From b9d5699c55bd93ebd0144777b70e2e2a4782a36a Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 08:15:11 -0700 Subject: [PATCH 001/118] Add GUI for PSU packing --- Cargo.lock | 2050 +++++++++++++++++++++++++---- Cargo.toml | 1 + Readme.md | 8 + crates/psu-packer-gui/Cargo.toml | 10 + crates/psu-packer-gui/src/main.rs | 71 + crates/psu-packer/src/lib.rs | 235 ++++ crates/psu-packer/src/main.rs | 252 +--- 7 files changed, 2128 insertions(+), 499 deletions(-) create mode 100644 crates/psu-packer-gui/Cargo.toml create mode 100644 crates/psu-packer-gui/src/main.rs create mode 100644 crates/psu-packer/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 58dbc4d..558709b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,6 +18,12 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" +[[package]] +name = "accesskit" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74a4b14f3d99c1255dcba8f45621ab1a2e7540a0009652d33989005a4d0bfc6b" + [[package]] name = "accesskit" version = "0.17.1" @@ -34,84 +40,149 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c5dd55e6e94949498698daf4d48fb5659e824d7abec0d394089656ceaf99d4f" dependencies = [ - "accesskit", - "accesskit_consumer", - "atspi-common", + "accesskit 0.17.1", + "accesskit_consumer 0.26.0", + "atspi-common 0.6.0", "serde", "thiserror 1.0.69", "zvariant 4.2.0", ] +[[package]] +name = "accesskit_consumer" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c17cca53c09fbd7288667b22a201274b9becaa27f0b91bf52a526db95de45e6" +dependencies = [ + "accesskit 0.12.3", +] + [[package]] name = "accesskit_consumer" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f47983a1084940ba9a39c077a8c63e55c619388be5476ac04c804cfbd1e63459" dependencies = [ - "accesskit", - "hashbrown", + "accesskit 0.17.1", + "hashbrown 0.15.2", "immutable-chunkmap", ] +[[package]] +name = "accesskit_macos" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" +dependencies = [ + "accesskit 0.12.3", + "accesskit_consumer 0.16.1", + "objc2 0.3.0-beta.3.patch-leaks.3", + "once_cell", +] + [[package]] name = "accesskit_macos" version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7329821f3bd1101e03a7d2e03bd339e3ac0dc64c70b4c9f9ae1949e3ba8dece1" dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown", + "accesskit 0.17.1", + "accesskit_consumer 0.26.0", + "hashbrown 0.15.2", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", ] +[[package]] +name = "accesskit_unix" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f46c18d99ba61ad7123dd13eeb0c104436ab6af1df6a1cd8c11054ed394a08" +dependencies = [ + "accesskit 0.12.3", + "accesskit_consumer 0.16.1", + "async-channel", + "async-once-cell", + "atspi 0.19.0", + "futures-lite 1.13.0", + "once_cell", + "serde", + "zbus 3.15.2", +] + [[package]] name = "accesskit_unix" version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcee751cc20d88678c33edaf9c07e8b693cd02819fe89053776f5313492273f5" dependencies = [ - "accesskit", + "accesskit 0.17.1", "accesskit_atspi_common", "async-channel", "async-executor", "async-task", - "atspi", - "futures-lite", + "atspi 0.22.0", + "futures-lite 2.6.0", "futures-util", "serde", "zbus 4.4.0", ] +[[package]] +name = "accesskit_windows" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcae27ec0974fc7c3b0b318783be89fd1b2e66dd702179fe600166a38ff4a0b" +dependencies = [ + "accesskit 0.12.3", + "accesskit_consumer 0.16.1", + "once_cell", + "paste", + "static_assertions", + "windows 0.48.0", +] + [[package]] name = "accesskit_windows" version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24fcd5d23d70670992b823e735e859374d694a3d12bfd8dd32bd3bd8bedb5d81" dependencies = [ - "accesskit", - "accesskit_consumer", - "hashbrown", + "accesskit 0.17.1", + "accesskit_consumer 0.26.0", + "hashbrown 0.15.2", "paste", "static_assertions", - "windows", + "windows 0.58.0", "windows-core 0.58.0", ] +[[package]] +name = "accesskit_winit" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5284218aca17d9e150164428a0ebc7b955f70e3a9a78b4c20894513aabf98a67" +dependencies = [ + "accesskit 0.12.3", + "accesskit_macos 0.10.1", + "accesskit_unix 0.6.2", + "accesskit_windows 0.15.1", + "winit 0.29.15", +] + [[package]] name = "accesskit_winit" version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6a48dad5530b6deb9fc7a52cc6c3bf72cdd9eb8157ac9d32d69f2427a5e879" dependencies = [ - "accesskit", - "accesskit_macos", - "accesskit_unix", - "accesskit_windows", - "raw-window-handle", - "winit", + "accesskit 0.17.1", + "accesskit_macos 0.18.1", + "accesskit_unix 0.13.1", + "accesskit_windows 0.24.1", + "raw-window-handle 0.6.2", + "winit 0.30.9", ] [[package]] @@ -134,12 +205,48 @@ dependencies = [ "zerocopy 0.7.35", ] +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + [[package]] name = "aligned-vec" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4aa90d7ce82d4be67b64039a3d588d38dbcc6736577de4a847025ce5b0c468d1" +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "android-activity" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee91c0c2905bae44f84bfa4e044536541df26b7703fd0888deeb9060fcc44289" +dependencies = [ + "android-properties", + "bitflags 2.9.0", + "cc", + "cesu8", + "jni", + "jni-sys", + "libc", + "log", + "ndk 0.8.0", + "ndk-context", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum", + "thiserror 1.0.69", +] + [[package]] name = "android-activity" version = "0.6.0" @@ -154,7 +261,7 @@ dependencies = [ "jni-sys", "libc", "log", - "ndk", + "ndk 0.9.0", "ndk-context", "ndk-sys 0.6.0+11769913", "num_enum", @@ -204,7 +311,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c1df21f715862ede32a0c525ce2ca4d52626bb0007f8c18b87a384503ac33e70" dependencies = [ "clipboard-win", - "image", + "image 0.25.6", "log", "objc2 0.6.0", "objc2-app-kit 0.3.0", @@ -225,7 +332,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -248,7 +355,7 @@ dependencies = [ "argh_shared", "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -278,13 +385,40 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] + [[package]] name = "ash" version = "0.38.0+1.3.281" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" dependencies = [ - "libloading", + "libloading 0.8.6", +] + +[[package]] +name = "ashpd" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd884d7c72877a94102c3715f3b1cd09ff4fac28221add3e57cfbe25c236d093" +dependencies = [ + "async-fs 2.1.2", + "async-net", + "enumflags2", + "futures-channel", + "futures-util", + "rand 0.8.5", + "serde", + "serde_repr", + "url", + "zbus 4.4.0", ] [[package]] @@ -293,26 +427,36 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6cbdf310d77fd3aaee6ea2093db7011dc2d35d2eb3481e5607f1f8d942ed99df" dependencies = [ - "async-fs", + "async-fs 2.1.2", "async-net", "enumflags2", "futures-channel", "futures-util", "rand 0.9.1", - "raw-window-handle", + "raw-window-handle 0.6.2", "serde", "serde_repr", "url", "zbus 5.5.0", ] +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener 2.5.3", + "futures-core", +] + [[package]] name = "async-broadcast" version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ - "event-listener", + "event-listener 5.4.0", "event-listener-strategy", "futures-core", "pin-project-lite", @@ -338,20 +482,52 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand", - "futures-lite", + "fastrand 2.3.0", + "futures-lite 2.6.0", "slab", ] +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + [[package]] name = "async-fs" version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" dependencies = [ - "async-lock", + "async-lock 3.4.0", "blocking", - "futures-lite", + "futures-lite 2.6.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.28", + "slab", + "socket2", + "waker-fn", ] [[package]] @@ -360,26 +536,35 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" dependencies = [ - "async-lock", + "async-lock 3.4.0", "cfg-if", "concurrent-queue", "futures-io", - "futures-lite", + "futures-lite 2.6.0", "parking", - "polling", + "polling 3.7.4", "rustix 0.38.44", "slab", "tracing", "windows-sys 0.59.0", ] +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + [[package]] name = "async-lock" version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "event-listener", + "event-listener 5.4.0", "event-listener-strategy", "pin-project-lite", ] @@ -390,9 +575,32 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" dependencies = [ - "async-io", + "async-io 2.4.0", "blocking", - "futures-lite", + "futures-lite 2.6.0", +] + +[[package]] +name = "async-once-cell" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288f83726785267c6f2ef073a3d83dc3f9b81464e9f99898240cced85fce35a" + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.44", + "windows-sys 0.48.0", ] [[package]] @@ -402,14 +610,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel", - "async-io", - "async-lock", + "async-io 2.4.0", + "async-lock 3.4.0", "async-signal", "async-task", "blocking", "cfg-if", - "event-listener", - "futures-lite", + "event-listener 5.4.0", + "futures-lite 2.6.0", "rustix 0.38.44", "tracing", ] @@ -422,7 +630,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -431,8 +639,8 @@ version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ - "async-io", - "async-lock", + "async-io 2.4.0", + "async-lock 3.4.0", "atomic-waker", "cfg-if", "futures-core", @@ -457,7 +665,7 @@ checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -466,15 +674,40 @@ version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +[[package]] +name = "atspi" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6059f350ab6f593ea00727b334265c4dfc7fd442ee32d264794bd9bdc68e87ca" +dependencies = [ + "atspi-common 0.3.0", + "atspi-connection 0.3.0", + "atspi-proxies 0.3.0", +] + [[package]] name = "atspi" version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be534b16650e35237bb1ed189ba2aab86ce65e88cc84c66f4935ba38575cecbf" dependencies = [ - "atspi-common", - "atspi-connection", - "atspi-proxies", + "atspi-common 0.6.0", + "atspi-connection 0.6.0", + "atspi-proxies 0.6.0", +] + +[[package]] +name = "atspi-common" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92af95f966d2431f962bc632c2e68eda7777330158bf640c4af4249349b2cdf5" +dependencies = [ + "enumflags2", + "serde", + "static_assertions", + "zbus 3.15.2", + "zbus_names 2.6.1", + "zvariant 3.15.2", ] [[package]] @@ -493,25 +726,48 @@ dependencies = [ "zvariant 4.2.0", ] +[[package]] +name = "atspi-connection" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c65e7d70f86d4c0e3b2d585d9bf3f979f0b19d635a336725a88d279f76b939" +dependencies = [ + "atspi-common 0.3.0", + "atspi-proxies 0.3.0", + "futures-lite 1.13.0", + "zbus 3.15.2", +] + [[package]] name = "atspi-connection" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "430c5960624a4baaa511c9c0fcc2218e3b58f5dbcc47e6190cafee344b873333" dependencies = [ - "atspi-common", - "atspi-proxies", - "futures-lite", + "atspi-common 0.6.0", + "atspi-proxies 0.6.0", + "futures-lite 2.6.0", "zbus 4.4.0", ] +[[package]] +name = "atspi-proxies" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6495661273703e7a229356dcbe8c8f38223d697aacfaf0e13590a9ac9977bb52" +dependencies = [ + "atspi-common 0.3.0", + "serde", + "zbus 3.15.2", +] + [[package]] name = "atspi-proxies" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5e6c5de3e524cf967569722446bcd458d5032348554d9a17d7d72b041ab7496" dependencies = [ - "atspi-common", + "atspi-common 0.6.0", "serde", "zbus 4.4.0", "zvariant 4.2.0", @@ -552,15 +808,30 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec 0.6.3", +] + [[package]] name = "bit-set" version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3" dependencies = [ - "bit-vec", + "bit-vec 0.8.0", ] +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + [[package]] name = "bit-vec" version = "0.8.0" @@ -609,6 +880,44 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys 0.2.0-beta.2", +] + +[[package]] +name = "block-sys" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae85a0696e7ea3b835a453750bf002770776609115e6d25c6d2ff28a8200f7e7" +dependencies = [ + "objc-sys 0.3.5", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys 0.1.0-beta.1", + "objc2-encode 2.0.0-pre.2", +] + +[[package]] +name = "block2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b55663a85f33501257357e6421bb33e769d5c9ffb5ba0921c975a123e35e68" +dependencies = [ + "block-sys 0.2.1", + "objc2 0.4.1", +] + [[package]] name = "block2" version = "0.5.1" @@ -636,7 +945,7 @@ dependencies = [ "async-channel", "async-task", "futures-io", - "futures-lite", + "futures-lite 2.6.0", "piper", ] @@ -669,7 +978,7 @@ checksum = "7ecc273b49b3205b83d648f0690daa588925572cc5063745bfe547fe7ec8e1a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -696,6 +1005,20 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3c8f83209414aacf0eeae3cf730b18d6981697fba62f200fcfb92b9f082acba" +[[package]] +name = "calloop" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fba7adb4dd5aa98e5553510223000e7148f621165ec5f9acd7113f6ca4995298" +dependencies = [ + "bitflags 2.9.0", + "log", + "polling 3.7.4", + "rustix 0.38.44", + "slab", + "thiserror 1.0.69", +] + [[package]] name = "calloop" version = "0.13.0" @@ -704,19 +1027,31 @@ checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" dependencies = [ "bitflags 2.9.0", "log", - "polling", + "polling 3.7.4", "rustix 0.38.44", "slab", "thiserror 1.0.69", ] +[[package]] +name = "calloop-wayland-source" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f0ea9b9476c7fad82841a8dbb380e2eae480c21910feba80725b46931ed8f02" +dependencies = [ + "calloop 0.12.4", + "rustix 0.38.44", + "wayland-backend", + "wayland-client", +] + [[package]] name = "calloop-wayland-source" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" dependencies = [ - "calloop", + "calloop 0.13.0", "rustix 0.38.44", "wayland-backend", "wayland-client", @@ -755,6 +1090,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -802,6 +1143,36 @@ dependencies = [ "error-code", ] +[[package]] +name = "cocoa" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" +dependencies = [ + "bitflags 1.3.2", + "block", + "cocoa-foundation", + "core-foundation 0.9.4", + "core-graphics", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" +dependencies = [ + "bitflags 1.3.2", + "block", + "core-foundation 0.9.4", + "core-graphics-types", + "libc", + "objc", +] + [[package]] name = "codespan-reporting" version = "0.11.1" @@ -827,6 +1198,37 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "com" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" +dependencies = [ + "com_macros", +] + +[[package]] +name = "com_macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +dependencies = [ + "com_macros_support", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "com_macros_support" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "combine" version = "4.6.7" @@ -967,6 +1369,17 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "digest" version = "0.10.7" @@ -1003,7 +1416,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -1012,7 +1425,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading", + "libloading 0.8.6", ] [[package]] @@ -1047,6 +1460,15 @@ dependencies = [ "proc-macro2-diagnostics", ] +[[package]] +name = "ecolor" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20930a432bbd57a6d55e07976089708d4893f3d556cf42a0d79e9e321fa73b10" +dependencies = [ + "bytemuck", +] + [[package]] name = "ecolor" version = "0.31.1" @@ -1054,10 +1476,44 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc4feb366740ded31a004a0e4452fbf84e80ef432ecf8314c485210229672fd1" dependencies = [ "bytemuck", - "emath", + "emath 0.31.1", "serde", ] +[[package]] +name = "eframe" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020e2ccef6bbcec71dbc542f7eed64a5846fc3076727f5746da8fd307c91bab2" +dependencies = [ + "bytemuck", + "cocoa", + "document-features", + "egui 0.27.2", + "egui-wgpu 0.27.2", + "egui-winit 0.27.2", + "egui_glow 0.27.2", + "glow 0.13.1", + "glutin 0.31.3", + "glutin-winit 0.4.2", + "image 0.24.9", + "js-sys", + "log", + "objc", + "parking_lot", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "static_assertions", + "thiserror 1.0.69", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "web-time 0.2.4", + "winapi", + "winit 0.29.15", +] + [[package]] name = "eframe" version = "0.31.1" @@ -1067,15 +1523,15 @@ dependencies = [ "ahash", "bytemuck", "document-features", - "egui", - "egui-wgpu", - "egui-winit", - "egui_glow", - "glow", - "glutin", - "glutin-winit", + "egui 0.31.1", + "egui-wgpu 0.31.1", + "egui-winit 0.31.1", + "egui_glow 0.31.1", + "glow 0.16.0", + "glutin 0.32.2", + "glutin-winit 0.5.0", "home", - "image", + "image 0.25.6", "js-sys", "log", "objc2 0.5.2", @@ -1084,17 +1540,30 @@ dependencies = [ "parking_lot", "percent-encoding", "profiling", - "raw-window-handle", + "raw-window-handle 0.6.2", "ron", "serde", "static_assertions", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "web-time", + "web-time 1.1.0", "winapi", "windows-sys 0.59.0", - "winit", + "winit 0.30.9", +] + +[[package]] +name = "egui" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "584c5d1bf9a67b25778a3323af222dbe1a1feb532190e103901187f92c7fe29a" +dependencies = [ + "accesskit 0.12.3", + "ahash", + "epaint 0.27.2", + "log", + "nohash-hasher", ] [[package]] @@ -1103,11 +1572,11 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25dd34cec49ab55d85ebf70139cb1ccd29c977ef6b6ba4fe85489d6877ee9ef3" dependencies = [ - "accesskit", + "accesskit 0.17.1", "ahash", "bitflags 2.9.0", - "emath", - "epaint", + "emath 0.31.1", + "epaint 0.31.1", "log", "nohash-hasher", "profiling", @@ -1115,6 +1584,24 @@ dependencies = [ "serde", ] +[[package]] +name = "egui-wgpu" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469ff65843f88a702b731a1532b7d03b0e8e96d283e70f3a22b0e06c46cb9b37" +dependencies = [ + "bytemuck", + "document-features", + "egui 0.27.2", + "epaint 0.27.2", + "log", + "thiserror 1.0.69", + "type-map", + "web-time 0.2.4", + "wgpu 0.19.4", + "winit 0.29.15", +] + [[package]] name = "egui-wgpu" version = "0.31.1" @@ -1124,15 +1611,32 @@ dependencies = [ "ahash", "bytemuck", "document-features", - "egui", - "epaint", + "egui 0.31.1", + "epaint 0.31.1", "log", "profiling", "thiserror 1.0.69", "type-map", - "web-time", - "wgpu", - "winit", + "web-time 1.1.0", + "wgpu 24.0.3", + "winit 0.30.9", +] + +[[package]] +name = "egui-winit" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e3da0cbe020f341450c599b35b92de4af7b00abde85624fd16f09c885573609" +dependencies = [ + "accesskit_winit 0.16.1", + "arboard", + "egui 0.27.2", + "log", + "raw-window-handle 0.6.2", + "smithay-clipboard", + "web-time 0.2.4", + "webbrowser 0.8.15", + "winit 0.29.15", ] [[package]] @@ -1141,19 +1645,19 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d9dfbb78fe4eb9c3a39ad528b90ee5915c252e77bbab9d4ebc576541ab67e13" dependencies = [ - "accesskit_winit", + "accesskit_winit 0.23.1", "ahash", "arboard", "bytemuck", - "egui", + "egui 0.31.1", "log", "profiling", - "raw-window-handle", + "raw-window-handle 0.6.2", "serde", "smithay-clipboard", - "web-time", - "webbrowser", - "winit", + "web-time 1.1.0", + "webbrowser 1.0.4", + "winit 0.30.9", ] [[package]] @@ -1163,7 +1667,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea7536fb0243aea55c1ca123a41a18253e16520d427a7213da584b9e2cb3973" dependencies = [ "duplicate", - "egui", + "egui 0.31.1", "paste", ] @@ -1173,14 +1677,30 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624659a2e972a46f4d5f646557906c55f1cd5a0836eddbe610fdf1afba1b4226" dependencies = [ - "ahash", - "egui", - "enum-map", - "image", + "ahash", + "egui 0.31.1", + "enum-map", + "image 0.25.6", + "log", + "mime_guess2", + "profiling", + "resvg", +] + +[[package]] +name = "egui_glow" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0e5d975f3c86edc3d35b1db88bb27c15dde7c55d3b5af164968ab5ede3f44ca" +dependencies = [ + "bytemuck", + "egui 0.27.2", + "glow 0.13.1", "log", - "mime_guess2", - "profiling", - "resvg", + "memoffset 0.9.1", + "wasm-bindgen", + "web-sys", + "winit 0.29.15", ] [[package]] @@ -1191,14 +1711,14 @@ checksum = "910906e3f042ea6d2378ec12a6fd07698e14ddae68aed2d819ffe944a73aab9e" dependencies = [ "ahash", "bytemuck", - "egui", - "glow", + "egui 0.31.1", + "glow 0.16.0", "log", - "memoffset", + "memoffset 0.9.1", "profiling", "wasm-bindgen", "web-sys", - "winit", + "winit 0.30.9", ] [[package]] @@ -1207,6 +1727,15 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +[[package]] +name = "emath" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4c3a552cfca14630702449d35f41c84a0d15963273771c6059175a803620f3f" +dependencies = [ + "bytemuck", +] + [[package]] name = "emath" version = "0.31.1" @@ -1241,7 +1770,7 @@ checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -1262,7 +1791,7 @@ checksum = "fc4caf64a58d7a6d65ab00639b046ff54399a39f5f2554728895ace4b297cd79" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -1273,7 +1802,23 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", +] + +[[package]] +name = "epaint" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b381f8b149657a4acf837095351839f32cd5c4aec1817fc4df84e18d76334176" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor 0.27.2", + "emath 0.27.2", + "log", + "nohash-hasher", + "parking_lot", ] [[package]] @@ -1285,8 +1830,8 @@ dependencies = [ "ab_glyph", "ahash", "bytemuck", - "ecolor", - "emath", + "ecolor 0.31.1", + "emath 0.31.1", "epaint_default_fonts", "log", "nohash-hasher", @@ -1323,6 +1868,23 @@ version = "3.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5d9305ccc6942a704f4335694ecd3de2ea531b114ac2d51f5f843750787a92f" +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + [[package]] name = "event-listener" version = "5.4.0" @@ -1340,7 +1902,7 @@ version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" dependencies = [ - "event-listener", + "event-listener 5.4.0", "pin-project-lite", ] @@ -1359,6 +1921,15 @@ dependencies = [ "zune-inflate", ] +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + [[package]] name = "fastrand" version = "2.3.0" @@ -1414,7 +1985,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -1462,13 +2033,28 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + [[package]] name = "futures-lite" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ - "fastrand", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -1483,7 +2069,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -1579,6 +2165,18 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "glow" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd348e04c43b32574f2de31c8bb397d96c9fcfa1371bd4ca6d8bdc464ab121b1" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "glow" version = "0.16.0" @@ -1591,6 +2189,30 @@ dependencies = [ "web-sys", ] +[[package]] +name = "glutin" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fcd4ae4e86d991ad1300b8f57166e5be0c95ef1f63f3f5b827f8a164548746" +dependencies = [ + "bitflags 2.9.0", + "cfg_aliases 0.1.1", + "cgl", + "core-foundation 0.9.4", + "dispatch", + "glutin_egl_sys 0.6.0", + "glutin_glx_sys 0.5.0", + "glutin_wgl_sys 0.5.0", + "icrate", + "libloading 0.8.6", + "objc2 0.4.1", + "once_cell", + "raw-window-handle 0.5.2", + "wayland-sys", + "windows-sys 0.48.0", + "x11-dl", +] + [[package]] name = "glutin" version = "0.32.2" @@ -1598,34 +2220,56 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "03642b8b0cce622392deb0ee3e88511f75df2daac806102597905c3ea1974848" dependencies = [ "bitflags 2.9.0", - "cfg_aliases", + "cfg_aliases 0.2.1", "cgl", "core-foundation 0.9.4", "dispatch", - "glutin_egl_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "libloading", + "glutin_egl_sys 0.7.1", + "glutin_glx_sys 0.6.1", + "glutin_wgl_sys 0.6.1", + "libloading 0.8.6", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", "once_cell", - "raw-window-handle", + "raw-window-handle 0.6.2", "wayland-sys", "windows-sys 0.52.0", "x11-dl", ] +[[package]] +name = "glutin-winit" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebcdfba24f73b8412c5181e56f092b5eff16671c514ce896b258a0a64bd7735" +dependencies = [ + "cfg_aliases 0.1.1", + "glutin 0.31.3", + "raw-window-handle 0.5.2", + "winit 0.29.15", +] + [[package]] name = "glutin-winit" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85edca7075f8fc728f28cb8fbb111a96c3b89e930574369e3e9c27eb75d3788f" dependencies = [ - "cfg_aliases", - "glutin", - "raw-window-handle", - "winit", + "cfg_aliases 0.2.1", + "glutin 0.32.2", + "raw-window-handle 0.6.2", + "winit 0.30.9", +] + +[[package]] +name = "glutin_egl_sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77cc5623f5309ef433c3dd4ca1223195347fe62c413da8e2fdd0eb76db2d9bcd" +dependencies = [ + "gl_generator", + "windows-sys 0.48.0", ] [[package]] @@ -1638,6 +2282,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "glutin_glx_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a165fd686c10dcc2d45380b35796e577eacfd43d4660ee741ec8ebe2201b3b4f" +dependencies = [ + "gl_generator", + "x11-dl", +] + [[package]] name = "glutin_glx_sys" version = "0.6.1" @@ -1648,6 +2302,15 @@ dependencies = [ "x11-dl", ] +[[package]] +name = "glutin_wgl_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +dependencies = [ + "gl_generator", +] + [[package]] name = "glutin_wgl_sys" version = "0.6.1" @@ -1676,6 +2339,30 @@ dependencies = [ "bitflags 2.9.0", ] +[[package]] +name = "gpu-allocator" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884" +dependencies = [ + "log", + "presser", + "thiserror 1.0.69", + "winapi", + "windows 0.52.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +dependencies = [ + "bitflags 2.9.0", + "gpu-descriptor-types 0.1.2", + "hashbrown 0.14.5", +] + [[package]] name = "gpu-descriptor" version = "0.3.1" @@ -1683,8 +2370,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca" dependencies = [ "bitflags 2.9.0", - "gpu-descriptor-types", - "hashbrown", + "gpu-descriptor-types 0.2.0", + "hashbrown 0.15.2", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +dependencies = [ + "bitflags 2.9.0", ] [[package]] @@ -1706,6 +2402,16 @@ dependencies = [ "crunchy", ] +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", +] + [[package]] name = "hashbrown" version = "0.15.2" @@ -1715,12 +2421,33 @@ dependencies = [ "foldhash", ] +[[package]] +name = "hassle-rs" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" +dependencies = [ + "bitflags 2.9.0", + "com", + "libc", + "libloading 0.8.6", + "thiserror 1.0.69", + "widestring", + "winapi", +] + [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + [[package]] name = "hermit-abi" version = "0.4.0" @@ -1772,6 +2499,17 @@ dependencies = [ "cc", ] +[[package]] +name = "icrate" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d3aaff8a54577104bafdf686ff18565c3b6903ca5782a2026ef06e2c7aa319" +dependencies = [ + "block2 0.3.0", + "dispatch", + "objc2 0.4.1", +] + [[package]] name = "icu_collections" version = "1.5.0" @@ -1887,7 +2625,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -1911,6 +2649,19 @@ dependencies = [ "icu_properties", ] +[[package]] +name = "image" +version = "0.24.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5690139d2f55868e080017335e4b94cb7414274c74f1669c84fb5feba2c9f69d" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-traits", + "png", +] + [[package]] name = "image" version = "0.25.6" @@ -1972,7 +2723,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.2", ] [[package]] @@ -1995,6 +2746,15 @@ dependencies = [ "libc", ] +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + [[package]] name = "interpolate_name" version = "0.2.4" @@ -2003,7 +2763,18 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "windows-sys 0.48.0", ] [[package]] @@ -2070,7 +2841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading", + "libloading 0.8.6", "pkg-config", ] @@ -2131,6 +2902,16 @@ dependencies = [ "cc", ] +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + [[package]] name = "libloading" version = "0.8.6" @@ -2152,6 +2933,12 @@ dependencies = [ "redox_syscall 0.5.11", ] +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -2207,7 +2994,7 @@ version = "0.1.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -2251,6 +3038,15 @@ dependencies = [ "libc", ] +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + [[package]] name = "memoffset" version = "0.9.1" @@ -2260,6 +3056,21 @@ dependencies = [ "autocfg", ] +[[package]] +name = "metal" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" +dependencies = [ + "bitflags 2.9.0", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + [[package]] name = "metal" version = "0.31.0" @@ -2321,6 +3132,26 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "naga" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50e3524642f53d9af419ab5e8dd29d3ba155708267667c2f3f06c88c9e130843" +dependencies = [ + "bit-set 0.5.3", + "bitflags 2.9.0", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "num-traits", + "rustc-hash", + "spirv", + "termcolor", + "thiserror 1.0.69", + "unicode-xid", +] + [[package]] name = "naga" version = "24.0.0" @@ -2328,19 +3159,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e" dependencies = [ "arrayvec", - "bit-set", + "bit-set 0.8.0", "bitflags 2.9.0", - "cfg_aliases", + "cfg_aliases 0.2.1", "codespan-reporting", "hexf-parse", "indexmap", "log", - "rustc-hash", - "spirv", - "strum", - "termcolor", - "thiserror 2.0.12", - "unicode-xid", + "rustc-hash", + "spirv", + "strum", + "termcolor", + "thiserror 2.0.12", + "unicode-xid", +] + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.9.0", + "jni-sys", + "log", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "thiserror 1.0.69", ] [[package]] @@ -2354,7 +3201,7 @@ dependencies = [ "log", "ndk-sys 0.6.0+11769913", "num_enum", - "raw-window-handle", + "raw-window-handle 0.6.2", "thiserror 1.0.69", ] @@ -2388,6 +3235,18 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", +] + [[package]] name = "nix" version = "0.29.0" @@ -2396,9 +3255,9 @@ checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.9.0", "cfg-if", - "cfg_aliases", + "cfg_aliases 0.2.1", "libc", - "memoffset", + "memoffset 0.9.1", ] [[package]] @@ -2465,7 +3324,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -2512,10 +3371,10 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -2525,22 +3384,61 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" dependencies = [ "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", ] +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + [[package]] name = "objc-sys" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2 0.2.0-alpha.6", + "objc-sys 0.2.0-beta.2", + "objc2-encode 2.0.0-pre.2", +] + +[[package]] +name = "objc2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "559c5a40fdd30eb5e344fbceacf7595a81e242529fb4e21cf5f43fb4f11ff98d" +dependencies = [ + "objc-sys 0.3.5", + "objc2-encode 3.0.0", +] + [[package]] name = "objc2" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ - "objc-sys", - "objc2-encode", + "objc-sys 0.3.5", + "objc2-encode 4.1.0", ] [[package]] @@ -2549,7 +3447,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3531f65190d9cff863b77a99857e74c314dd16bf56c538c4b57c7cbc3f3a6e59" dependencies = [ - "objc2-encode", + "objc2-encode 4.1.0", ] [[package]] @@ -2663,6 +3561,21 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys 0.2.0-beta.2", +] + +[[package]] +name = "objc2-encode" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d079845b37af429bfe5dfa76e6d087d788031045b25cfc6fd898486fd9847666" + [[package]] name = "objc2-encode" version = "4.1.0" @@ -2796,6 +3709,24 @@ dependencies = [ "objc2-foundation 0.2.2", ] +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + [[package]] name = "once_cell" version = "1.21.3" @@ -2910,7 +3841,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn", + "syn 2.0.101", "unicase", ] @@ -2947,7 +3878,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -2969,7 +3900,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand", + "fastrand 2.3.0", "futures-io", ] @@ -2992,6 +3923,22 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + [[package]] name = "polling" version = "3.7.4" @@ -3000,13 +3947,19 @@ checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" dependencies = [ "cfg-if", "concurrent-queue", - "hermit-abi", + "hermit-abi 0.4.0", "pin-project-lite", "rustix 0.38.44", "tracing", "windows-sys 0.59.0", ] +[[package]] +name = "pollster" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" + [[package]] name = "pollster" version = "0.4.0" @@ -3022,13 +3975,29 @@ dependencies = [ "zerocopy 0.8.24", ] +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + [[package]] name = "proc-macro-crate" version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edce586971a4dfaa28950c6f18ed55e0406c1ab88bbce2c6f6293a7aaba73d35" dependencies = [ - "toml_edit", + "toml_edit 0.22.24", ] [[package]] @@ -3048,7 +4017,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", "version_check", "yansi", ] @@ -3069,7 +4038,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a65f2e60fbf1063868558d69c6beacf412dc755f9fc020f514b7955fc914fe30" dependencies = [ "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -3078,7 +4047,7 @@ version = "0.1.0" dependencies = [ "byteorder", "chrono", - "image", + "image 0.25.6", "indexmap", "toml 0.9.5", ] @@ -3087,10 +4056,10 @@ dependencies = [ name = "ps2-mcm" version = "0.1.0" dependencies = [ - "eframe", - "image", + "eframe 0.31.1", + "image 0.25.6", "ps2-filetypes", - "rfd", + "rfd 0.15.3", ] [[package]] @@ -3099,8 +4068,8 @@ version = "0.1.0" dependencies = [ "byteorder", "chrono", - "eframe", - "rfd", + "eframe 0.31.1", + "rfd 0.15.3", ] [[package]] @@ -3115,6 +4084,15 @@ dependencies = [ "toml 0.9.5", ] +[[package]] +name = "psu-packer-gui" +version = "0.1.0" +dependencies = [ + "eframe 0.27.2", + "psu-packer", + "rfd 0.14.1", +] + [[package]] name = "qoi" version = "0.4.1" @@ -3273,6 +4251,12 @@ dependencies = [ "rgb", ] +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + [[package]] name = "raw-window-handle" version = "0.6.2" @@ -3305,6 +4289,15 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f" +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "redox_syscall" version = "0.4.1" @@ -3323,6 +4316,35 @@ dependencies = [ "bitflags 2.9.0", ] +[[package]] +name = "regex" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" + [[package]] name = "relative-path" version = "2.0.1" @@ -3352,13 +4374,36 @@ dependencies = [ "usvg", ] +[[package]] +name = "rfd" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a73a7337fc24366edfca76ec521f51877b114e42dab584008209cca6719251" +dependencies = [ + "ashpd 0.8.1", + "block", + "dispatch", + "js-sys", + "log", + "objc", + "objc-foundation", + "objc_id", + "pollster 0.3.0", + "raw-window-handle 0.6.2", + "urlencoding", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-sys 0.48.0", +] + [[package]] name = "rfd" version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "80c844748fdc82aae252ee4594a89b6e7ebef1063de7951545564cbc4e57075d" dependencies = [ - "ashpd", + "ashpd 0.11.0", "block2 0.6.0", "dispatch2", "js-sys", @@ -3367,8 +4412,8 @@ dependencies = [ "objc2-app-kit 0.3.0", "objc2-core-foundation", "objc2-foundation 0.3.0", - "pollster", - "raw-window-handle", + "pollster 0.4.0", + "raw-window-handle 0.6.2", "urlencoding", "wasm-bindgen", "wasm-bindgen-futures", @@ -3415,6 +4460,20 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustix" +version = "0.37.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + [[package]] name = "rustix" version = "0.38.44" @@ -3468,6 +4527,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sctk-adwaita" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70b31447ca297092c5a9916fc3b955203157b37c19ca8edde4f52e9843e602c7" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit 0.18.1", + "tiny-skia", +] + [[package]] name = "sctk-adwaita" version = "0.10.1" @@ -3477,7 +4549,7 @@ dependencies = [ "ab_glyph", "log", "memmap2", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "tiny-skia", ] @@ -3498,7 +4570,7 @@ checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -3509,7 +4581,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -3616,6 +4688,31 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9" +[[package]] +name = "smithay-client-toolkit" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "922fd3eeab3bd820d76537ce8f582b1cf951eceb5475c28500c7457d9d17f53a" +dependencies = [ + "bitflags 2.9.0", + "calloop 0.12.4", + "calloop-wayland-source 0.2.0", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 0.38.44", + "thiserror 1.0.69", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols 0.31.2", + "wayland-protocols-wlr 0.2.0", + "wayland-scanner", + "xkeysym", +] + [[package]] name = "smithay-client-toolkit" version = "0.19.2" @@ -3623,8 +4720,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" dependencies = [ "bitflags 2.9.0", - "calloop", - "calloop-wayland-source", + "calloop 0.13.0", + "calloop-wayland-source 0.3.0", "cursor-icon", "libc", "log", @@ -3635,8 +4732,8 @@ dependencies = [ "wayland-client", "wayland-csd-frame", "wayland-cursor", - "wayland-protocols", - "wayland-protocols-wlr", + "wayland-protocols 0.32.6", + "wayland-protocols-wlr 0.3.6", "wayland-scanner", "xkeysym", ] @@ -3648,7 +4745,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc8216eec463674a0e90f29e0ae41a4db573ec5b56b1c6c1c71615d249b6d846" dependencies = [ "libc", - "smithay-client-toolkit", + "smithay-client-toolkit 0.19.2", "wayland-backend", ] @@ -3661,6 +4758,16 @@ dependencies = [ "serde", ] +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -3710,7 +4817,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 2.0.101", ] [[package]] @@ -3719,15 +4826,15 @@ version = "0.1.0" dependencies = [ "bytesize", "cgmath", - "eframe", + "eframe 0.31.1", "egui_dock", "egui_extras", - "image", + "image 0.25.6", "macros", "notify", "ps2-filetypes", "relative-path", - "rfd", + "rfd 0.15.3", "serde", "toml 0.9.5", "wavefront_obj", @@ -3744,6 +4851,17 @@ dependencies = [ "siphasher 0.3.11", ] +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "syn" version = "2.0.101" @@ -3763,7 +4881,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -3791,7 +4909,7 @@ version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ - "fastrand", + "fastrand 2.3.0", "getrandom 0.3.2", "once_cell", "rustix 1.0.5", @@ -3833,7 +4951,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -3844,7 +4962,7 @@ checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -3903,7 +5021,7 @@ dependencies = [ "serde", "serde_spanned 0.6.8", "toml_datetime 0.6.8", - "toml_edit", + "toml_edit 0.22.24", ] [[package]] @@ -3918,7 +5036,7 @@ dependencies = [ "toml_datetime 0.7.0", "toml_parser", "toml_writer", - "winnow", + "winnow 0.7.12", ] [[package]] @@ -3939,6 +5057,17 @@ dependencies = [ "serde", ] +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime 0.6.8", + "winnow 0.5.40", +] + [[package]] name = "toml_edit" version = "0.22.24" @@ -3949,7 +5078,7 @@ dependencies = [ "serde", "serde_spanned 0.6.8", "toml_datetime 0.6.8", - "winnow", + "winnow 0.7.12", ] [[package]] @@ -3958,7 +5087,7 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b551886f449aa90d4fe2bdaa9f4a2577ad2dde302c61ecf262d80b116db95c10" dependencies = [ - "winnow", + "winnow 0.7.12", ] [[package]] @@ -3986,7 +5115,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -4025,7 +5154,7 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" dependencies = [ - "memoffset", + "memoffset 0.9.1", "tempfile", "winapi", ] @@ -4157,6 +5286,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + [[package]] name = "walkdir" version = "2.5.0" @@ -4204,7 +5339,7 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn", + "syn 2.0.101", "wasm-bindgen-shared", ] @@ -4239,7 +5374,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4307,6 +5442,18 @@ dependencies = [ "xcursor", ] +[[package]] +name = "wayland-protocols" +version = "0.31.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f81f365b8b4a97f422ac0e8737c438024b5951734506b0e1d775c73030561f4" +dependencies = [ + "bitflags 2.9.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + [[package]] name = "wayland-protocols" version = "0.32.6" @@ -4319,6 +5466,19 @@ dependencies = [ "wayland-scanner", ] +[[package]] +name = "wayland-protocols-plasma" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23803551115ff9ea9bce586860c5c5a971e360825a0309264102a9495a5ff479" +dependencies = [ + "bitflags 2.9.0", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-scanner", +] + [[package]] name = "wayland-protocols-plasma" version = "0.3.6" @@ -4328,7 +5488,20 @@ dependencies = [ "bitflags 2.9.0", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.32.6", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6" +dependencies = [ + "bitflags 2.9.0", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", "wayland-scanner", ] @@ -4341,7 +5514,7 @@ dependencies = [ "bitflags 2.9.0", "wayland-backend", "wayland-client", - "wayland-protocols", + "wayland-protocols 0.32.6", "wayland-scanner", ] @@ -4369,10 +5542,20 @@ dependencies = [ ] [[package]] -name = "web-sys" -version = "0.3.77" +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0" dependencies = [ "js-sys", "wasm-bindgen", @@ -4388,6 +5571,23 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webbrowser" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db67ae75a9405634f5882791678772c94ff5f16a66535aae186e26aa0841fc8b" +dependencies = [ + "core-foundation 0.9.4", + "home", + "jni", + "log", + "ndk-context", + "objc", + "raw-window-handle 0.5.2", + "url", + "web-sys", +] + [[package]] name = "webbrowser" version = "1.0.4" @@ -4411,6 +5611,30 @@ version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" +[[package]] +name = "wgpu" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbd7311dbd2abcfebaabf1841a2824ed7c8be443a0f29166e5d3c6a53a762c01" +dependencies = [ + "arrayvec", + "cfg-if", + "cfg_aliases 0.1.1", + "js-sys", + "log", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core 0.19.4", + "wgpu-hal 0.19.5", + "wgpu-types 0.19.2", +] + [[package]] name = "wgpu" version = "24.0.3" @@ -4419,21 +5643,47 @@ checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245" dependencies = [ "arrayvec", "bitflags 2.9.0", - "cfg_aliases", + "cfg_aliases 0.2.1", "document-features", "js-sys", "log", "parking_lot", "profiling", - "raw-window-handle", + "raw-window-handle 0.6.2", "smallvec", "static_assertions", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", + "wgpu-core 24.0.2", + "wgpu-hal 24.0.4", + "wgpu-types 24.0.0", +] + +[[package]] +name = "wgpu-core" +version = "0.19.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b94525fc99ba9e5c9a9e24764f2bc29bad0911a7446c12f446a8277369bf3a" +dependencies = [ + "arrayvec", + "bit-vec 0.6.3", + "bitflags 2.9.0", + "cfg_aliases 0.1.1", + "codespan-reporting", + "indexmap", + "log", + "naga 0.19.2", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "web-sys", + "wgpu-hal 0.19.5", + "wgpu-types 0.19.2", ] [[package]] @@ -4443,22 +5693,63 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c" dependencies = [ "arrayvec", - "bit-vec", + "bit-vec 0.8.0", "bitflags 2.9.0", - "cfg_aliases", + "cfg_aliases 0.2.1", "document-features", "indexmap", "log", - "naga", + "naga 24.0.0", "once_cell", "parking_lot", "profiling", - "raw-window-handle", + "raw-window-handle 0.6.2", "rustc-hash", "smallvec", "thiserror 2.0.12", - "wgpu-hal", - "wgpu-types", + "wgpu-hal 24.0.4", + "wgpu-types 24.0.0", +] + +[[package]] +name = "wgpu-hal" +version = "0.19.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfabcfc55fd86611a855816326b2d54c3b2fd7972c27ce414291562650552703" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash 0.37.3+1.3.251", + "bitflags 2.9.0", + "cfg_aliases 0.1.1", + "core-graphics-types", + "glow 0.13.1", + "glutin_wgl_sys 0.5.0", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor 0.2.4", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.6", + "log", + "metal 0.27.0", + "naga 0.19.2", + "ndk-sys 0.5.0+25.2.9519653", + "objc", + "once_cell", + "parking_lot", + "profiling", + "raw-window-handle 0.6.2", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror 1.0.69", + "wasm-bindgen", + "web-sys", + "wgpu-types 0.19.2", + "winapi", ] [[package]] @@ -4469,37 +5760,48 @@ checksum = "f112f464674ca69f3533248508ee30cb84c67cf06c25ff6800685f5e0294e259" dependencies = [ "android_system_properties", "arrayvec", - "ash", + "ash 0.38.0+1.3.281", "bitflags 2.9.0", "bytemuck", - "cfg_aliases", + "cfg_aliases 0.2.1", "core-graphics-types", - "glow", - "glutin_wgl_sys", + "glow 0.16.0", + "glutin_wgl_sys 0.6.1", "gpu-alloc", - "gpu-descriptor", + "gpu-descriptor 0.3.1", "js-sys", "khronos-egl", "libc", - "libloading", + "libloading 0.8.6", "log", - "metal", - "naga", + "metal 0.31.0", + "naga 24.0.0", "ndk-sys 0.5.0+25.2.9519653", "objc", "once_cell", "ordered-float", "parking_lot", "profiling", - "raw-window-handle", + "raw-window-handle 0.6.2", "renderdoc-sys", "rustc-hash", "smallvec", "thiserror 2.0.12", "wasm-bindgen", "web-sys", - "wgpu-types", - "windows", + "wgpu-types 24.0.0", + "windows 0.58.0", +] + +[[package]] +name = "wgpu-types" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b671ff9fb03f78b46ff176494ee1ebe7d603393f42664be55b64dc8d53969805" +dependencies = [ + "bitflags 2.9.0", + "js-sys", + "web-sys", ] [[package]] @@ -4514,6 +5816,12 @@ dependencies = [ "web-sys", ] +[[package]] +name = "widestring" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d" + [[package]] name = "winapi" version = "0.3.9" @@ -4545,6 +5853,27 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-implement 0.48.0", + "windows-interface 0.48.0", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows" version = "0.58.0" @@ -4555,6 +5884,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.58.0" @@ -4581,6 +5919,17 @@ dependencies = [ "windows-strings 0.4.0", ] +[[package]] +name = "windows-implement" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "windows-implement" version = "0.58.0" @@ -4589,7 +5938,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -4600,7 +5949,18 @@ checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", +] + +[[package]] +name = "windows-interface" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] @@ -4611,7 +5971,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -4622,7 +5982,7 @@ checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -4683,6 +6043,15 @@ dependencies = [ "windows-targets 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -4952,6 +6321,55 @@ version = "0.53.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +[[package]] +name = "winit" +version = "0.29.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca" +dependencies = [ + "ahash", + "android-activity 0.5.2", + "atomic-waker", + "bitflags 2.9.0", + "bytemuck", + "calloop 0.12.4", + "cfg_aliases 0.1.1", + "core-foundation 0.9.4", + "core-graphics", + "cursor-icon", + "icrate", + "js-sys", + "libc", + "log", + "memmap2", + "ndk 0.8.0", + "ndk-sys 0.5.0+25.2.9519653", + "objc2 0.4.1", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle 0.5.2", + "raw-window-handle 0.6.2", + "redox_syscall 0.3.5", + "rustix 0.38.44", + "sctk-adwaita 0.8.3", + "smithay-client-toolkit 0.18.1", + "smol_str", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols 0.31.2", + "wayland-protocols-plasma 0.2.0", + "web-sys", + "web-time 0.2.4", + "windows-sys 0.48.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + [[package]] name = "winit" version = "0.30.9" @@ -4959,13 +6377,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0" dependencies = [ "ahash", - "android-activity", + "android-activity 0.6.0", "atomic-waker", "bitflags 2.9.0", "block2 0.5.1", "bytemuck", - "calloop", - "cfg_aliases", + "calloop 0.13.0", + "cfg_aliases 0.2.1", "concurrent-queue", "core-foundation 0.9.4", "core-graphics", @@ -4974,7 +6392,7 @@ dependencies = [ "js-sys", "libc", "memmap2", - "ndk", + "ndk 0.9.0", "objc2 0.5.2", "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", @@ -4982,11 +6400,11 @@ dependencies = [ "orbclient", "percent-encoding", "pin-project", - "raw-window-handle", + "raw-window-handle 0.6.2", "redox_syscall 0.4.1", "rustix 0.38.44", - "sctk-adwaita", - "smithay-client-toolkit", + "sctk-adwaita 0.10.1", + "smithay-client-toolkit 0.19.2", "smol_str", "tracing", "unicode-segmentation", @@ -4994,16 +6412,25 @@ dependencies = [ "wasm-bindgen-futures", "wayland-backend", "wayland-client", - "wayland-protocols", - "wayland-protocols-plasma", + "wayland-protocols 0.32.6", + "wayland-protocols-plasma 0.3.6", "web-sys", - "web-time", + "web-time 1.1.0", "windows-sys 0.52.0", "x11-dl", "x11rb", "xkbcommon-dl", ] +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + [[package]] name = "winnow" version = "0.7.12" @@ -5064,7 +6491,7 @@ dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading", + "libloading 0.8.6", "once_cell", "rustix 0.38.44", "x11rb-protocol", @@ -5153,33 +6580,74 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", "synstructure", ] +[[package]] +name = "zbus" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "675d170b632a6ad49804c8cf2105d7c31eddd3312555cffd4b740e08e97c25e6" +dependencies = [ + "async-broadcast 0.5.1", + "async-executor", + "async-fs 1.6.0", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process 1.8.1", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener 2.5.3", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.26.4", + "once_cell", + "ordered-stream", + "rand 0.8.5", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros 3.15.2", + "zbus_names 2.6.1", + "zvariant 3.15.2", +] + [[package]] name = "zbus" version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" dependencies = [ - "async-broadcast", + "async-broadcast 0.7.2", "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-process", + "async-fs 2.1.2", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-process 2.3.0", "async-recursion", "async-task", "async-trait", "blocking", "enumflags2", - "event-listener", + "event-listener 5.4.0", "futures-core", "futures-sink", "futures-util", "hex", - "nix", + "nix 0.29.0", "ordered-stream", "rand 0.8.5", "serde", @@ -5201,22 +6669,22 @@ version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59c333f648ea1b647bc95dc1d34807c8e25ed7a6feff3394034dc4776054b236" dependencies = [ - "async-broadcast", + "async-broadcast 0.7.2", "async-executor", - "async-fs", - "async-io", - "async-lock", - "async-process", + "async-fs 2.1.2", + "async-io 2.4.0", + "async-lock 3.4.0", + "async-process 2.3.0", "async-recursion", "async-task", "async-trait", "blocking", "enumflags2", - "event-listener", + "event-listener 5.4.0", "futures-core", - "futures-lite", + "futures-lite 2.6.0", "hex", - "nix", + "nix 0.29.0", "ordered-stream", "serde", "serde_repr", @@ -5224,7 +6692,7 @@ dependencies = [ "tracing", "uds_windows", "windows-sys 0.59.0", - "winnow", + "winnow 0.7.12", "xdg-home", "zbus_macros 5.5.0", "zbus_names 4.2.0", @@ -5249,22 +6717,36 @@ checksum = "709ab20fc57cb22af85be7b360239563209258430bccf38d8b979c5a2ae3ecce" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", "zbus-lockstep", "zbus_xml", "zvariant 4.2.0", ] +[[package]] +name = "zbus_macros" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils 1.0.1", +] + [[package]] name = "zbus_macros" version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.101", "zvariant_utils 2.1.0", ] @@ -5274,15 +6756,26 @@ version = "5.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f325ad10eb0d0a3eb060203494c3b7ec3162a01a59db75d2deee100339709fc0" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.101", "zbus_names 4.2.0", "zvariant 5.4.0", "zvariant_utils 3.2.0", ] +[[package]] +name = "zbus_names" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "437d738d3750bed6ca9b8d423ccc7a8eb284f6b1d6d4e225a0e4e6258d864c8d" +dependencies = [ + "serde", + "static_assertions", + "zvariant 3.15.2", +] + [[package]] name = "zbus_names" version = "3.0.0" @@ -5302,7 +6795,7 @@ checksum = "7be68e64bf6ce8db94f63e72f0c7eb9a60d733f7e0499e628dfab0f84d6bcb97" dependencies = [ "serde", "static_assertions", - "winnow", + "winnow 0.7.12", "zvariant 5.4.0", ] @@ -5345,7 +6838,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -5356,7 +6849,7 @@ checksum = "a996a8f63c5c4448cd959ac1bab0aaa3306ccfd060472f85943ee0750f0169be" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -5376,7 +6869,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", "synstructure", ] @@ -5399,7 +6892,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -5426,6 +6919,20 @@ dependencies = [ "zune-core", ] +[[package]] +name = "zvariant" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eef2be88ba09b358d3b58aca6e41cd853631d44787f319a1383ca83424fb2db" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive 3.15.2", +] + [[package]] name = "zvariant" version = "4.2.0" @@ -5436,6 +6943,7 @@ dependencies = [ "enumflags2", "serde", "static_assertions", + "url", "zvariant_derive 4.2.0", ] @@ -5450,21 +6958,34 @@ dependencies = [ "serde", "static_assertions", "url", - "winnow", + "winnow 0.7.12", "zvariant_derive 5.4.0", "zvariant_utils 3.2.0", ] +[[package]] +name = "zvariant_derive" +version = "3.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils 1.0.1", +] + [[package]] name = "zvariant_derive" version = "4.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.101", "zvariant_utils 2.1.0", ] @@ -5474,13 +6995,24 @@ version = "5.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74170caa85b8b84cc4935f2d56a57c7a15ea6185ccdd7eadb57e6edd90f94b2f" dependencies = [ - "proc-macro-crate", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", - "syn", + "syn 2.0.101", "zvariant_utils 3.2.0", ] +[[package]] +name = "zvariant_utils" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "zvariant_utils" version = "2.1.0" @@ -5489,7 +7021,7 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.101", ] [[package]] @@ -5502,6 +7034,6 @@ dependencies = [ "quote", "serde", "static_assertions", - "syn", - "winnow", + "syn 2.0.101", + "winnow 0.7.12", ] diff --git a/Cargo.toml b/Cargo.toml index cd73287..94962fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ members = [ "crates/xtask-build-app", "crates/memcard", "crates/psu-packer", + "crates/psu-packer-gui", ] default-members = ["crates/psu-packer"] diff --git a/Readme.md b/Readme.md index a400f74..a0213db 100644 --- a/Readme.md +++ b/Readme.md @@ -12,6 +12,14 @@ A collection of PS2 file type parsers. Memory Card Manager +### psu-packer-gui + +Graphical interface for packing PSU archives. Run with: + +``` +cargo run -p psu-packer-gui +``` + ## Credits Icon & UI Design by [@Berion](https://www.psx-place.com/members/berion.1431/) \ No newline at end of file diff --git a/crates/psu-packer-gui/Cargo.toml b/crates/psu-packer-gui/Cargo.toml new file mode 100644 index 0000000..c563109 --- /dev/null +++ b/crates/psu-packer-gui/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "psu-packer-gui" +edition.workspace = true +license.workspace = true +version.workspace = true + +[dependencies] +psu-packer = { path = "../psu-packer" } +eframe = "0.27" +rfd = "0.14" diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs new file mode 100644 index 0000000..2822449 --- /dev/null +++ b/crates/psu-packer-gui/src/main.rs @@ -0,0 +1,71 @@ +use eframe::egui; +use std::path::PathBuf; + +struct PackerApp { + folder: Option, + output: String, + status: String, +} + +impl Default for PackerApp { + fn default() -> Self { + Self { + folder: None, + output: String::new(), + status: String::new(), + } + } +} + +impl eframe::App for PackerApp { + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + egui::CentralPanel::default().show(ctx, |ui| { + if ui.button("Select folder").clicked() { + if let Some(dir) = rfd::FileDialog::new().pick_folder() { + if let Ok(config) = psu_packer::load_config(&dir) { + self.output = format!("{}.psu", config.name); + } + self.folder = Some(dir); + } + } + if let Some(folder) = &self.folder { + ui.label(format!("Folder: {}", folder.display())); + } + ui.horizontal(|ui| { + ui.label("Output:"); + ui.text_edit_singleline(&mut self.output); + if ui.button("Browse").clicked() { + if let Some(file) = rfd::FileDialog::new() + .set_file_name(&self.output) + .save_file() + { + self.output = file.display().to_string(); + } + } + }); + if ui.button("Pack").clicked() { + if let Some(folder) = &self.folder { + let output_path = PathBuf::from(&self.output); + match psu_packer::pack_psu(folder, &output_path) { + Ok(_) => self.status = format!("Packed to {}", output_path.display()), + Err(e) => self.status = format!("Error: {e}"), + } + } else { + self.status = "Please select a folder".to_string(); + } + } + if !self.status.is_empty() { + ui.label(&self.status); + } + }); + } +} + +fn main() -> eframe::Result<()> { + let options = eframe::NativeOptions::default(); + eframe::run_native( + "PSU Packer", + options, + Box::new(|_cc| Box::::default()), + ) +} diff --git a/crates/psu-packer/src/lib.rs b/crates/psu-packer/src/lib.rs new file mode 100644 index 0000000..b16ddbe --- /dev/null +++ b/crates/psu-packer/src/lib.rs @@ -0,0 +1,235 @@ +use chrono::{DateTime, Local, NaiveDateTime}; +use colored::Colorize; +use ps2_filetypes::{PSUEntry, PSUEntryKind, PSUWriter, DIR_ID, FILE_ID, PSU}; +use serde::Deserialize; +use std::path::{Path, PathBuf}; +use std::time::{SystemTime, UNIX_EPOCH}; + +#[derive(Debug, Deserialize)] +pub struct Config { + pub name: String, + #[serde(default, with = "date_format")] + pub timestamp: Option, + pub include: Option>, + pub exclude: Option>, +} + +mod date_format { + use chrono::NaiveDateTime; + use serde::{self, Deserialize, Deserializer}; + + pub fn deserialize<'de, D>(deserialize: D) -> Result, D::Error> + where + D: Deserializer<'de>, + { + let s: Option = Option::deserialize(deserialize)?; + if let Some(s) = s { + Ok(Some( + NaiveDateTime::parse_from_str(&s, "%Y-%m-%d %H:%M:%S") + .map_err(serde::de::Error::custom)?, + )) + } else { + Ok(None) + } + } +} + +#[derive(Debug, Deserialize)] +struct ConfigFile { + config: Config, +} + +pub fn load_config(folder: &Path) -> Result { + let config_file = folder.join("psu.toml"); + let str = std::fs::read_to_string(&config_file)?; + let config = toml::from_str::(&str) + .map_err(|e| Error::ConfigError(e.to_string()))? + .config; + Ok(config) +} + +pub fn pack_psu(folder: &Path, output: &Path) -> Result<(), Error> { + let config = load_config(folder)?; + + if !check_name(&config.name) { + return Err(Error::NameError); + } + + if config.include.is_some() && config.exclude.is_some() { + return Err(Error::IncludeExcludeError); + } + + let mut psu = PSU::default(); + + let files = if let Some(include) = config.include { + include + .iter() + .filter_map(|file| { + if file.contains(|c| matches!(c, '\\' | '/')) { + eprintln!( + "{} {} {}", + "File".dimmed(), + file.dimmed(), + "exists in subfolder, skipping".dimmed() + ); + None + } else if !folder.join(file).exists() { + eprintln!( + "{} {} {}", + "File".dimmed(), + file.dimmed(), + "does not exist, skipping".dimmed() + ); + None + } else { + Some(folder.join(file)) + } + }) + .collect::>() + } else if let Some(exclude) = config.exclude { + std::fs::read_dir(folder)? + .into_iter() + .flatten() + .filter_map(|d| { + if !exclude.contains(&d.file_name().to_str().unwrap().to_string()) { + Some(d.path()) + } else { + None + } + }) + .collect::>() + } else { + std::fs::read_dir(folder)? + .into_iter() + .flatten() + .map(|d| d.path()) + .collect::>() + }; + let files = filter_files(&files); + add_psu_defaults( + &mut psu, + &config.name, + files.len(), + config.timestamp.unwrap_or_default(), + ); + add_files_to_psu(&mut psu, &files)?; + std::fs::write(output, PSUWriter::new(psu).to_bytes()?)?; + Ok(()) +} + +fn check_name(name: &str) -> bool { + for c in name.chars() { + if !matches!(c, 'a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-'|' ') { + return false; + } + } + true +} + +fn filter_files(files: &[PathBuf]) -> Vec { + files + .iter() + .filter_map(|f| { + if !f.is_file() { + println!( + "{} {}", + f.display().to_string().dimmed(), + "is not a file, skipping".dimmed() + ); + None + } else { + Some(f.to_owned()) + } + }) + .collect() +} + +fn add_psu_defaults(psu: &mut PSU, name: &str, file_count: usize, timestamp: NaiveDateTime) { + psu.entries.push(PSUEntry { + id: DIR_ID, + size: file_count as u32 + 2, + created: timestamp, + sector: 0, + modified: timestamp, + name: name.to_owned(), + kind: PSUEntryKind::Directory, + contents: None, + }); + psu.entries.push(PSUEntry { + id: DIR_ID, + size: 0, + created: timestamp, + sector: 0, + modified: timestamp, + name: ".".to_string(), + kind: PSUEntryKind::Directory, + contents: None, + }); + psu.entries.push(PSUEntry { + id: DIR_ID, + size: 0, + created: timestamp, + sector: 0, + modified: timestamp, + name: "..".to_string(), + kind: PSUEntryKind::Directory, + contents: None, + }); +} + +fn add_files_to_psu(psu: &mut PSU, files: &[PathBuf]) -> Result<(), Error> { + for file in files { + let name = file.file_name().unwrap().to_str().unwrap(); + + let f = std::fs::read(file)?; + let stat = std::fs::metadata(file)?; + + println!("+ {} {}", "Adding", name.green()); + + psu.entries.push(PSUEntry { + id: FILE_ID, + size: f.len() as u32, + created: convert_timestamp(stat.created()?), + sector: 0, + modified: convert_timestamp(stat.modified()?), + name: name.to_owned(), + kind: PSUEntryKind::File, + contents: Some(f), + }) + } + + Ok(()) +} + +fn convert_timestamp(time: SystemTime) -> NaiveDateTime { + let duration = time.duration_since(UNIX_EPOCH).unwrap(); + DateTime::from_timestamp(duration.as_secs() as i64, duration.subsec_nanos()) + .unwrap() + .with_timezone(&Local) + .naive_local() +} + +#[derive(Debug)] +pub enum Error { + NameError, + IOError(std::io::Error), + IncludeExcludeError, + ConfigError(String), +} + +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Error::NameError => write!(f, "Name must match [a-zA-Z0-9._-\\s]+"), + Error::IncludeExcludeError => write!(f, "Exclude cannot be used in include mode"), + Error::IOError(err) => write!(f, "{err:?}"), + Error::ConfigError(err) => write!(f, "{err}"), + } + } +} + +impl From for Error { + fn from(err: std::io::Error) -> Self { + Error::IOError(err) + } +} diff --git a/crates/psu-packer/src/main.rs b/crates/psu-packer/src/main.rs index 6b1651a..2f521fa 100644 --- a/crates/psu-packer/src/main.rs +++ b/crates/psu-packer/src/main.rs @@ -1,13 +1,13 @@ -use chrono::{DateTime, Local, NaiveDateTime}; +use argh::FromArgs; use colored::Colorize; -use ps2_filetypes::{PSUEntry, PSUEntryKind, PSUWriter, DIR_ID, FILE_ID, PSU}; -use serde::Deserialize; use std::path::PathBuf; -use std::time::{SystemTime, UNIX_EPOCH}; -use argh::FromArgs; + +use psu_packer::{load_config, pack_psu, Error}; #[derive(Debug, FromArgs)] -#[argh(description = "Expects a folder with a psu.toml file that follows this format\n\t[config]\n\tname = \"Test PSU\"\t\t\t# Folder name on Memory Card\n\tinclude = [ \"BOOT.ELF\", \"icon.sys\" ]\t# using `exclude` will automatically include all files except the specified ones\n\ttimestamp = \"2024-10-10 10:30:00\"\t# Optional, but recommended\n")] +#[argh( + description = "Expects a folder with a psu.toml file that follows this format\n\t[config]\n\tname = \"Test PSU\"\t\t\t# Folder name on Memory Card\n\tinclude = [ \"BOOT.ELF\", \"icon.sys\" ]\t# using `exclude` will automatically include all files except the specified ones\n\ttimestamp = \"2024-10-10 10:30:00\"\t# Optional, but recommended\n" +)] struct Args { /// folder to package to psu #[argh(positional)] @@ -17,244 +17,16 @@ struct Args { output: Option, } -#[derive(Debug, Deserialize)] -struct Config { - name: String, - #[serde(default, with = "date_format")] - timestamp: Option, - include: Option>, - exclude: Option>, -} - -mod date_format { - use chrono::NaiveDateTime; - use serde::{self, Deserialize, Deserializer}; - - pub fn deserialize<'de, D>(deserialize: D) -> Result, D::Error> - where - D: Deserializer<'de>, - { - let s: Option = Option::deserialize(deserialize)?; - if let Some(s) = s { - Ok(Some( - NaiveDateTime::parse_from_str(&s, "%Y-%m-%d %H:%M:%S") - .map_err(serde::de::Error::custom)?, - )) - } else { - Ok(None) - } - } -} - -#[derive(Debug, Deserialize)] -struct ConfigFile { - config: Config, -} - -fn check_name(name: &str) -> bool { - for c in name.chars() { - if !matches!(c, 'a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-'|' ') { - return false - } - } - true -} - fn main() -> Result<(), Error> { let args: Args = argh::from_env(); - let folder = PathBuf::from(args.folder); - - let config_file = folder.join("psu.toml"); - - if config_file.exists() { - let str = std::fs::read_to_string(&config_file)?; - let config = toml::from_str::(&str) - .expect("Failed to parse config file") - .config; - - let output_file = args.output.unwrap_or(format!("{}.psu", config.name)); + let folder = PathBuf::from(&args.folder); - if !check_name(&config.name) { - return Err(Error::NameError); - } + let config = load_config(&folder)?; + let output_file = args.output.unwrap_or(format!("{}.psu", config.name)); + let output_path = PathBuf::from(&output_file); - if config.include.is_some() && config.exclude.is_some() { - return Err(Error::IncludeExcludeError); - } - - let mut psu = PSU::default(); - - let files = if let Some(include) = config.include { - include - .iter() - .filter_map(|file| { - if file.contains(|c| matches!(c, '\\' | '/')) { - eprintln!( - "{} {} {}", - "File".dimmed(), - file.dimmed(), - "exists in subfolder, skipping".dimmed() - ); - None - } else if !folder.join(file).exists() { - eprintln!( - "{} {} {}", - "File".dimmed(), - file.dimmed(), - "does not exist, skipping".dimmed() - ); - None - } else { - Some(folder.join(file)) - } - }) - .collect::>() - } else if let Some(exclude) = config.exclude { - std::fs::read_dir(folder)? - .into_iter() - .flatten() - .filter_map(|d| { - if !exclude.contains(&d.file_name().to_str().unwrap().to_string()) { - Some(d.path()) - } else { - None - } - }) - .collect::>() - } else { - // Include all - std::fs::read_dir(folder)? - .into_iter() - .flatten() - .map(|d| d.path()) - .collect::>() - }; - let files = filter_files(&files); - add_psu_defaults( - &mut psu, - &config.name, - files.len(), - config.timestamp.unwrap_or_default(), - ); - add_files_to_psu(&mut psu, &files)?; - std::fs::write(&output_file, PSUWriter::new(psu).to_bytes()?)?; - println!("Wrote {}! {}", output_file.green(), "".clear()); - } else { - eprintln!("{}", "Failed to find psu.toml".red()); - } + pack_psu(&folder, &output_path)?; + println!("Wrote {}! {}", output_file.green(), "".clear()); Ok(()) } - -fn filter_files(files: &[PathBuf]) -> Vec { - files - .iter() - .filter_map(|f| { - if !f.is_file() { - println!( - "{} {}", - f.display().to_string().dimmed(), - "is not a file, skipping".dimmed() - ); - None - } else { - Some(f.to_owned()) - } - }) - .collect() -} - -fn add_psu_defaults(psu: &mut PSU, name: &str, file_count: usize, timestamp: NaiveDateTime) { - psu.entries.push(PSUEntry { - id: DIR_ID, - size: file_count as u32 + 2, // +2 to include . and .. - created: timestamp, - sector: 0, - modified: timestamp, - name: name.to_owned(), - kind: PSUEntryKind::Directory, - contents: None, - }); - psu.entries.push(PSUEntry { - id: DIR_ID, - size: 0, - created: timestamp, - sector: 0, - modified: timestamp, - name: ".".to_string(), - kind: PSUEntryKind::Directory, - contents: None, - }); - psu.entries.push(PSUEntry { - id: DIR_ID, - size: 0, - created: timestamp, - sector: 0, - modified: timestamp, - name: "..".to_string(), - kind: PSUEntryKind::Directory, - contents: None, - }); -} - -fn add_files_to_psu(psu: &mut PSU, files: &[PathBuf]) -> Result<(), Error> { - for file in files { - let name = file.file_name().unwrap().to_str().unwrap(); - - let f = std::fs::read(file)?; - let stat = std::fs::metadata(file)?; - - println!("+ {} {}", "Adding", name.green()); - - psu.entries.push(PSUEntry { - id: FILE_ID, - size: f.len() as u32, - created: convert_timestamp(stat.created()?), - sector: 0, - modified: convert_timestamp(stat.modified()?), - name: name.to_owned(), - kind: PSUEntryKind::File, - contents: Some(f), - }) - } - - Ok(()) -} - -fn convert_timestamp(time: SystemTime) -> NaiveDateTime { - let duration = time.duration_since(UNIX_EPOCH).unwrap(); - let local = DateTime::from_timestamp(duration.as_secs() as i64, duration.subsec_nanos()) - .unwrap() - .with_timezone(&Local) - .naive_local(); - - local -} - -enum Error { - NameError, - IOError(std::io::Error), - IncludeExcludeError, -} - -impl std::fmt::Display for Error { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - match self { - Error::NameError => write!(f, "Name must match [a-zA-Z0-9._-\\s]+"), - Error::IncludeExcludeError => write!(f, "Exclude cannot be used in include mode"), - Error::IOError(err) => write!(f, "{err:?}"), - } - } -} - -impl std::fmt::Debug for Error { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - write!(f, "{}", self) - } -} - -impl From for Error { - fn from(err: std::io::Error) -> Self { - Error::IOError(err) - } -} From bab89979661fd56edf910d8c949793e6f1d85ae4 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 08:58:51 -0700 Subject: [PATCH 002/118] Update build-suitcase.yml --- .github/workflows/build-suitcase.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-suitcase.yml b/.github/workflows/build-suitcase.yml index ee55cf0..1567025 100644 --- a/.github/workflows/build-suitcase.yml +++ b/.github/workflows/build-suitcase.yml @@ -5,6 +5,7 @@ on: branches: [ "main" ] pull_request: branches: [ "main" ] + workflow_dispatch: env: CARGO_TERM_COLOR: always @@ -38,4 +39,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: suitcase-${{matrix.os.name}} - path: target/release/${{matrix.os.executable}} \ No newline at end of file + path: target/release/${{matrix.os.executable}} From bb4dbb0b5954176451bbf6a37e1f045160e2ed9d Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 09:28:59 -0700 Subject: [PATCH 003/118] Update default workspace member --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 94962fe..ee2e206 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ members = [ "crates/psu-packer", "crates/psu-packer-gui", ] -default-members = ["crates/psu-packer"] +default-members = ["crates/psu-packer-gui"] [workspace.package] edition = "2021" From e858898e8ad838a1606e65f3410c5fe8218bf594 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 09:40:13 -0700 Subject: [PATCH 004/118] Hide console window in release builds --- crates/psu-packer-gui/src/main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 2822449..5358b51 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -1,3 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + use eframe::egui; use std::path::PathBuf; From ccd2665879ddb402472db905701f56b72624a864 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 10:03:03 -0700 Subject: [PATCH 005/118] Update CI to build psu-packer GUI artifacts --- .github/workflows/build-psu-packer.yml | 33 +++++++++++++++++++------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-psu-packer.yml b/.github/workflows/build-psu-packer.yml index b02025b..53a1cfa 100644 --- a/.github/workflows/build-psu-packer.yml +++ b/.github/workflows/build-psu-packer.yml @@ -1,4 +1,4 @@ -name: Build PSU Packer +name: Build PSU Packer GUI on: push: @@ -17,13 +17,13 @@ jobs: os: - name: ubuntu version: ubuntu-latest - executable: psu-packer + executable: psu-packer-gui - name: macos version: macos-latest - executable: psu-packer + executable: psu-packer-gui - name: windows version: windows-latest - executable: psu-packer.exe + executable: psu-packer-gui.exe runs-on: ${{matrix.os.version}} steps: @@ -31,9 +31,26 @@ jobs: - run: rustup toolchain install stable --profile minimal - uses: Swatinem/rust-cache@v2 - name: Build - run: cargo build --package psu-packer --verbose --release - - name: Upload artifacts + run: cargo build --package psu-packer-gui --verbose --release + - name: Ensure executable permissions + if: matrix.os.name != 'windows' + run: chmod +x target/release/${{matrix.os.executable}} + - name: Archive Windows binary + if: matrix.os.name == 'windows' + shell: pwsh + run: | + $archivePath = "target/release/${{matrix.os.executable}}.zip" + if (Test-Path $archivePath) { Remove-Item $archivePath } + Compress-Archive -Path "target/release/${{matrix.os.executable}}" -DestinationPath $archivePath + - name: Upload artifacts (macOS/Linux) + if: matrix.os.name != 'windows' uses: actions/upload-artifact@v4 with: - name: psu-packer-${{matrix.os.name}} - path: target/release/${{matrix.os.executable}} \ No newline at end of file + name: psu-packer-gui-${{matrix.os.name}} + path: target/release/${{matrix.os.executable}} + - name: Upload artifacts (Windows) + if: matrix.os.name == 'windows' + uses: actions/upload-artifact@v4 + with: + name: psu-packer-gui-${{matrix.os.name}} + path: target/release/${{matrix.os.executable}}.zip From 8291ebc17830c9c19a883dda0e3e581395c55f96 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 10:32:48 -0700 Subject: [PATCH 006/118] Add PSU metadata editing to GUI --- Cargo.lock | 2 + crates/psu-packer-gui/Cargo.toml | 2 + crates/psu-packer-gui/src/main.rs | 85 +++++++++++++++++++++++++++++-- 3 files changed, 86 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 558709b..0c75236 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4088,9 +4088,11 @@ dependencies = [ name = "psu-packer-gui" version = "0.1.0" dependencies = [ + "chrono", "eframe 0.27.2", "psu-packer", "rfd 0.14.1", + "toml_edit 0.22.24", ] [[package]] diff --git a/crates/psu-packer-gui/Cargo.toml b/crates/psu-packer-gui/Cargo.toml index c563109..0160bd9 100644 --- a/crates/psu-packer-gui/Cargo.toml +++ b/crates/psu-packer-gui/Cargo.toml @@ -8,3 +8,5 @@ version.workspace = true psu-packer = { path = "../psu-packer" } eframe = "0.27" rfd = "0.14" +chrono = "0.4.42" +toml_edit = "0.22" diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 5358b51..11ec644 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -1,12 +1,18 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] +use chrono::NaiveDateTime; use eframe::egui; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; +use toml_edit::{value, DocumentMut}; + +const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; struct PackerApp { folder: Option, output: String, status: String, + name: String, + timestamp: String, } impl Default for PackerApp { @@ -15,17 +21,70 @@ impl Default for PackerApp { folder: None, output: String::new(), status: String::new(), + name: String::new(), + timestamp: String::new(), } } } +impl PackerApp { + fn save_config(&self, folder: &Path) -> Result<(), String> { + let config_path = folder.join("psu.toml"); + let config_str = std::fs::read_to_string(&config_path) + .map_err(|e| format!("Failed to read {}: {e}", config_path.display()))?; + let mut document = config_str + .parse::() + .map_err(|e| format!("Failed to parse {}: {e}", config_path.display()))?; + + let Some(config_item) = document.get_mut("config") else { + return Err("psu.toml is missing a [config] section".to_string()); + }; + let Some(config_table) = config_item.as_table_mut() else { + return Err("psu.toml [config] section is not a table".to_string()); + }; + + config_table.insert("name", value(self.name.clone())); + + let timestamp = self.timestamp.trim(); + if timestamp.is_empty() { + config_table.remove("timestamp"); + } else { + let parsed = NaiveDateTime::parse_from_str(timestamp, TIMESTAMP_FORMAT) + .map_err(|e| format!("Invalid timestamp: {e}"))?; + config_table.insert( + "timestamp", + value(parsed.format(TIMESTAMP_FORMAT).to_string()), + ); + } + + std::fs::write(&config_path, document.to_string()) + .map_err(|e| format!("Failed to write {}: {e}", config_path.display()))?; + + Ok(()) + } +} + impl eframe::App for PackerApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { if ui.button("Select folder").clicked() { if let Some(dir) = rfd::FileDialog::new().pick_folder() { - if let Ok(config) = psu_packer::load_config(&dir) { - self.output = format!("{}.psu", config.name); + match psu_packer::load_config(&dir) { + Ok(config) => { + self.output = format!("{}.psu", config.name); + self.name = config.name; + self.timestamp = config + .timestamp + .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) + .unwrap_or_default(); + self.status.clear(); + } + Err(err) => { + self.status = format!("Error loading config: {err}"); + self.output.clear(); + self.name.clear(); + self.timestamp.clear(); + } } self.folder = Some(dir); } @@ -33,6 +92,16 @@ impl eframe::App for PackerApp { if let Some(folder) = &self.folder { ui.label(format!("Folder: {}", folder.display())); } + if !self.name.is_empty() || self.folder.is_some() { + ui.horizontal(|ui| { + ui.label("Name:"); + ui.text_edit_singleline(&mut self.name); + }); + ui.horizontal(|ui| { + ui.label("Timestamp:"); + ui.text_edit_singleline(&mut self.timestamp); + }); + } ui.horizontal(|ui| { ui.label("Output:"); ui.text_edit_singleline(&mut self.output); @@ -47,6 +116,16 @@ impl eframe::App for PackerApp { }); if ui.button("Pack").clicked() { if let Some(folder) = &self.folder { + if self.name.trim().is_empty() { + self.status = "Please provide a PSU name".to_string(); + return; + } + + if let Err(err) = self.save_config(folder) { + self.status = err; + return; + } + let output_path = PathBuf::from(&self.output); match psu_packer::pack_psu(folder, &output_path) { Ok(_) => self.status = format!("Packed to {}", output_path.display()), From e9002f0dd66a16c34ddcf279672183391bd0823b Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 11:37:33 -0700 Subject: [PATCH 007/118] Add include/exclude list management to PSU packer GUI --- crates/psu-packer-gui/src/main.rs | 207 +++++++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 5 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 11ec644..1c49613 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -3,16 +3,33 @@ use chrono::NaiveDateTime; use eframe::egui; use std::path::{Path, PathBuf}; -use toml_edit::{value, DocumentMut}; +use toml_edit::{value, Array, DocumentMut}; const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; +#[derive(Clone, Copy, PartialEq, Eq)] +enum FileMode { + Include, + Exclude, +} + +impl Default for FileMode { + fn default() -> Self { + Self::Exclude + } +} + struct PackerApp { folder: Option, output: String, status: String, name: String, timestamp: String, + file_mode: FileMode, + include_files: Vec, + exclude_files: Vec, + selected_include: Option, + selected_exclude: Option, } impl Default for PackerApp { @@ -23,11 +40,145 @@ impl Default for PackerApp { status: String::new(), name: String::new(), timestamp: String::new(), + file_mode: FileMode::default(), + include_files: Vec::new(), + exclude_files: Vec::new(), + selected_include: None, + selected_exclude: None, } } } impl PackerApp { + fn current_list(&mut self) -> (&mut Vec, &mut Option) { + match self.file_mode { + FileMode::Include => (&mut self.include_files, &mut self.selected_include), + FileMode::Exclude => (&mut self.exclude_files, &mut self.selected_exclude), + } + } + + fn mode_label(&self) -> &'static str { + match self.file_mode { + FileMode::Include => "Included files", + FileMode::Exclude => "Excluded files", + } + } + + fn list_to_array(list: &[String]) -> Array { + let mut array = Array::default(); + for entry in list { + array.push(entry.as_str()); + } + array + } + + fn file_list_ui(&mut self, ui: &mut egui::Ui) { + let mode_label = self.mode_label(); + ui.label(mode_label); + + let mut add_clicked = false; + let mut remove_clicked = false; + + { + let (files, selected) = self.current_list(); + egui::ScrollArea::vertical() + .max_height(150.0) + .show(ui, |ui| { + for (idx, file) in files.iter().enumerate() { + let is_selected = Some(idx) == *selected; + if ui.selectable_label(is_selected, file).clicked() { + *selected = Some(idx); + } + } + }); + + ui.horizontal(|ui| { + if ui.button("Add file").clicked() { + add_clicked = true; + } + + if ui + .add_enabled(selected.is_some(), egui::Button::new("Remove file")) + .clicked() + { + remove_clicked = true; + } + }); + } + + if add_clicked { + self.handle_add_file(); + } + + if remove_clicked { + self.handle_remove_file(); + } + } + + fn handle_add_file(&mut self) { + let Some(folder) = self.folder.clone() else { + self.status = "Please select a folder before adding files".to_string(); + return; + }; + + let Some(path) = rfd::FileDialog::new().set_directory(&folder).pick_file() else { + return; + }; + + let Ok(relative) = path.strip_prefix(&folder) else { + self.status = "Selected file must be in the selected folder".to_string(); + return; + }; + + if relative.components().count() != 1 { + self.status = "Selected file must be in the selected folder".to_string(); + return; + } + + let Some(name) = path.file_name().and_then(|n| n.to_str()) else { + self.status = "Invalid file name".to_string(); + return; + }; + + let name = name.to_string(); + let duplicate = match self.file_mode { + FileMode::Include => self.include_files.iter().any(|entry| entry == &name), + FileMode::Exclude => self.exclude_files.iter().any(|entry| entry == &name), + }; + + if duplicate { + self.status = "File is already listed".to_string(); + return; + } + + match self.file_mode { + FileMode::Include => { + self.include_files.push(name); + self.selected_include = Some(self.include_files.len() - 1); + } + FileMode::Exclude => { + self.exclude_files.push(name); + self.selected_exclude = Some(self.exclude_files.len() - 1); + } + } + + self.status.clear(); + } + + fn handle_remove_file(&mut self) { + let (files, selected) = self.current_list(); + if let Some(idx) = selected.take() { + files.remove(idx); + if files.is_empty() { + *selected = None; + } else if idx >= files.len() { + *selected = Some(files.len() - 1); + } else { + *selected = Some(idx); + } + } + } + fn save_config(&self, folder: &Path) -> Result<(), String> { let config_path = folder.join("psu.toml"); let config_str = std::fs::read_to_string(&config_path) @@ -57,6 +208,19 @@ impl PackerApp { ); } + match self.file_mode { + FileMode::Include => { + let array = Self::list_to_array(&self.include_files); + config_table.insert("include", value(array)); + config_table.remove("exclude"); + } + FileMode::Exclude => { + let array = Self::list_to_array(&self.exclude_files); + config_table.insert("exclude", value(array)); + config_table.remove("include"); + } + } + std::fs::write(&config_path, document.to_string()) .map_err(|e| format!("Failed to write {}: {e}", config_path.display()))?; @@ -71,19 +235,46 @@ impl eframe::App for PackerApp { if let Some(dir) = rfd::FileDialog::new().pick_folder() { match psu_packer::load_config(&dir) { Ok(config) => { - self.output = format!("{}.psu", config.name); - self.name = config.name; - self.timestamp = config - .timestamp + let psu_packer::Config { + name, + timestamp, + include, + exclude, + } = config; + + let include_present = include.is_some(); + let exclude_present = exclude.is_some(); + + self.output = format!("{}.psu", name); + self.name = name; + self.timestamp = timestamp .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) .unwrap_or_default(); + self.file_mode = if include_present { + FileMode::Include + } else { + FileMode::Exclude + }; + self.include_files = include.unwrap_or_default(); + self.exclude_files = exclude.unwrap_or_default(); + self.selected_include = None; + self.selected_exclude = None; self.status.clear(); + if include_present && exclude_present { + self.status = "Config contains both include and exclude lists; using include list" + .to_string(); + } } Err(err) => { self.status = format!("Error loading config: {err}"); self.output.clear(); self.name.clear(); self.timestamp.clear(); + self.file_mode = FileMode::default(); + self.include_files.clear(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; } } self.folder = Some(dir); @@ -101,6 +292,12 @@ impl eframe::App for PackerApp { ui.label("Timestamp:"); ui.text_edit_singleline(&mut self.timestamp); }); + ui.horizontal(|ui| { + ui.label("File mode:"); + ui.radio_value(&mut self.file_mode, FileMode::Include, "Include"); + ui.radio_value(&mut self.file_mode, FileMode::Exclude, "Exclude"); + }); + self.file_list_ui(ui); } ui.horizontal(|ui| { ui.label("Output:"); From cc51981ac0a6995fc6ea94f8b2cc5a0235e3bc1b Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 12:10:52 -0700 Subject: [PATCH 008/118] Support packing with provided config --- Cargo.lock | 1 - crates/psu-packer-gui/Cargo.toml | 1 - crates/psu-packer-gui/src/main.rs | 96 +++++++++++-------------------- crates/psu-packer/src/lib.rs | 25 ++++---- 4 files changed, 48 insertions(+), 75 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0c75236..10452e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4092,7 +4092,6 @@ dependencies = [ "eframe 0.27.2", "psu-packer", "rfd 0.14.1", - "toml_edit 0.22.24", ] [[package]] diff --git a/crates/psu-packer-gui/Cargo.toml b/crates/psu-packer-gui/Cargo.toml index 0160bd9..18f8d0c 100644 --- a/crates/psu-packer-gui/Cargo.toml +++ b/crates/psu-packer-gui/Cargo.toml @@ -9,4 +9,3 @@ psu-packer = { path = "../psu-packer" } eframe = "0.27" rfd = "0.14" chrono = "0.4.42" -toml_edit = "0.22" diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 1c49613..206ec7d 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -2,8 +2,7 @@ use chrono::NaiveDateTime; use eframe::egui; -use std::path::{Path, PathBuf}; -use toml_edit::{value, Array, DocumentMut}; +use std::path::PathBuf; const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; @@ -64,14 +63,6 @@ impl PackerApp { } } - fn list_to_array(list: &[String]) -> Array { - let mut array = Array::default(); - for entry in list { - array.push(entry.as_str()); - } - array - } - fn file_list_ui(&mut self, ui: &mut egui::Ui) { let mode_label = self.mode_label(); ui.label(mode_label); @@ -115,6 +106,30 @@ impl PackerApp { } } + fn build_config(&self) -> Result { + let timestamp = self.timestamp.trim(); + let timestamp = if timestamp.is_empty() { + None + } else { + Some( + NaiveDateTime::parse_from_str(timestamp, TIMESTAMP_FORMAT) + .map_err(|e| format!("Invalid timestamp: {e}"))?, + ) + }; + + let (include, exclude) = match self.file_mode { + FileMode::Include => (Some(self.include_files.clone()), None), + FileMode::Exclude => (None, Some(self.exclude_files.clone())), + }; + + Ok(psu_packer::Config { + name: self.name.clone(), + timestamp, + include, + exclude, + }) + } + fn handle_add_file(&mut self) { let Some(folder) = self.folder.clone() else { self.status = "Please select a folder before adding files".to_string(); @@ -178,54 +193,6 @@ impl PackerApp { } } } - - fn save_config(&self, folder: &Path) -> Result<(), String> { - let config_path = folder.join("psu.toml"); - let config_str = std::fs::read_to_string(&config_path) - .map_err(|e| format!("Failed to read {}: {e}", config_path.display()))?; - let mut document = config_str - .parse::() - .map_err(|e| format!("Failed to parse {}: {e}", config_path.display()))?; - - let Some(config_item) = document.get_mut("config") else { - return Err("psu.toml is missing a [config] section".to_string()); - }; - let Some(config_table) = config_item.as_table_mut() else { - return Err("psu.toml [config] section is not a table".to_string()); - }; - - config_table.insert("name", value(self.name.clone())); - - let timestamp = self.timestamp.trim(); - if timestamp.is_empty() { - config_table.remove("timestamp"); - } else { - let parsed = NaiveDateTime::parse_from_str(timestamp, TIMESTAMP_FORMAT) - .map_err(|e| format!("Invalid timestamp: {e}"))?; - config_table.insert( - "timestamp", - value(parsed.format(TIMESTAMP_FORMAT).to_string()), - ); - } - - match self.file_mode { - FileMode::Include => { - let array = Self::list_to_array(&self.include_files); - config_table.insert("include", value(array)); - config_table.remove("exclude"); - } - FileMode::Exclude => { - let array = Self::list_to_array(&self.exclude_files); - config_table.insert("exclude", value(array)); - config_table.remove("include"); - } - } - - std::fs::write(&config_path, document.to_string()) - .map_err(|e| format!("Failed to write {}: {e}", config_path.display()))?; - - Ok(()) - } } impl eframe::App for PackerApp { @@ -318,13 +285,16 @@ impl eframe::App for PackerApp { return; } - if let Err(err) = self.save_config(folder) { - self.status = err; - return; - } + let config = match self.build_config() { + Ok(config) => config, + Err(err) => { + self.status = err; + return; + } + }; let output_path = PathBuf::from(&self.output); - match psu_packer::pack_psu(folder, &output_path) { + match psu_packer::pack_with_config(folder, &output_path, config) { Ok(_) => self.status = format!("Packed to {}", output_path.display()), Err(e) => self.status = format!("Error: {e}"), } diff --git a/crates/psu-packer/src/lib.rs b/crates/psu-packer/src/lib.rs index b16ddbe..5f765a6 100644 --- a/crates/psu-packer/src/lib.rs +++ b/crates/psu-packer/src/lib.rs @@ -50,18 +50,28 @@ pub fn load_config(folder: &Path) -> Result { pub fn pack_psu(folder: &Path, output: &Path) -> Result<(), Error> { let config = load_config(folder)?; + pack_with_config(folder, output, config) +} + +pub fn pack_with_config(folder: &Path, output: &Path, cfg: Config) -> Result<(), Error> { + let Config { + name, + timestamp, + include, + exclude, + } = cfg; - if !check_name(&config.name) { + if !check_name(&name) { return Err(Error::NameError); } - if config.include.is_some() && config.exclude.is_some() { + if include.is_some() && exclude.is_some() { return Err(Error::IncludeExcludeError); } let mut psu = PSU::default(); - let files = if let Some(include) = config.include { + let files = if let Some(include) = include { include .iter() .filter_map(|file| { @@ -86,7 +96,7 @@ pub fn pack_psu(folder: &Path, output: &Path) -> Result<(), Error> { } }) .collect::>() - } else if let Some(exclude) = config.exclude { + } else if let Some(exclude) = exclude { std::fs::read_dir(folder)? .into_iter() .flatten() @@ -106,12 +116,7 @@ pub fn pack_psu(folder: &Path, output: &Path) -> Result<(), Error> { .collect::>() }; let files = filter_files(&files); - add_psu_defaults( - &mut psu, - &config.name, - files.len(), - config.timestamp.unwrap_or_default(), - ); + add_psu_defaults(&mut psu, &name, files.len(), timestamp.unwrap_or_default()); add_files_to_psu(&mut psu, &files)?; std::fs::write(output, PSUWriter::new(psu).to_bytes()?)?; Ok(()) From e9bf56fd7b8fc33c10bda03cd38907f0aacf2e21 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 13:20:57 -0700 Subject: [PATCH 009/118] Improve GUI error handling --- crates/psu-packer-gui/src/main.rs | 142 +++++++++++++++++++++++++++--- 1 file changed, 130 insertions(+), 12 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 206ec7d..f89ff2b 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -2,7 +2,7 @@ use chrono::NaiveDateTime; use eframe::egui; -use std::path::PathBuf; +use std::path::{Path, PathBuf}; const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; @@ -22,6 +22,7 @@ struct PackerApp { folder: Option, output: String, status: String, + error_message: Option, name: String, timestamp: String, file_mode: FileMode, @@ -37,6 +38,7 @@ impl Default for PackerApp { folder: None, output: String::new(), status: String::new(), + error_message: None, name: String::new(), timestamp: String::new(), file_mode: FileMode::default(), @@ -56,6 +58,110 @@ impl PackerApp { } } + fn set_error_message>(&mut self, message: S) { + self.error_message = Some(message.into()); + self.status.clear(); + } + + fn clear_error_message(&mut self) { + self.error_message = None; + } + + fn missing_include_files(&self, folder: &Path) -> Vec { + if !matches!(self.file_mode, FileMode::Include) { + return Vec::new(); + } + + self.include_files + .iter() + .filter_map(|file| { + let candidate = folder.join(file); + if candidate.is_file() { + None + } else { + Some(file.clone()) + } + }) + .collect() + } + + fn format_load_error(folder: &Path, err: psu_packer::Error) -> String { + match err { + psu_packer::Error::NameError => { + "Configuration contains an invalid PSU name.".to_string() + } + psu_packer::Error::IncludeExcludeError => { + "Configuration cannot define both include and exclude lists.".to_string() + } + psu_packer::Error::ConfigError(message) => { + format!("The psu.toml file is invalid: {message}") + } + psu_packer::Error::IOError(io_err) => { + let config_path = folder.join("psu.toml"); + match io_err.kind() { + std::io::ErrorKind::NotFound => format!( + "Could not find {}. Create a psu.toml file in the selected folder.", + config_path.display() + ), + _ => format!("Failed to read {}: {}", config_path.display(), io_err), + } + } + } + } + + fn format_pack_error( + &self, + folder: &Path, + output_path: &Path, + err: psu_packer::Error, + ) -> String { + match err { + psu_packer::Error::NameError => { + "PSU name can only contain letters, numbers, spaces, underscores, and hyphens." + .to_string() + } + psu_packer::Error::IncludeExcludeError => { + "Include and exclude lists cannot be used at the same time.".to_string() + } + psu_packer::Error::ConfigError(message) => { + format!("Configuration error: {message}") + } + psu_packer::Error::IOError(io_err) => { + let missing_files = self.missing_include_files(folder); + if !missing_files.is_empty() { + let formatted = missing_files + .into_iter() + .map(|name| format!("• {name}")) + .collect::>() + .join("\n"); + return format!( + "The following files referenced in the configuration are missing from {}:\n{}", + folder.display(), + formatted + ); + } + + match io_err.kind() { + std::io::ErrorKind::NotFound => { + if let Some(parent) = output_path.parent() { + if !parent.exists() { + return format!( + "Cannot write the PSU file because the destination folder {} does not exist.", + parent.display() + ); + } + } + format!("A required file or folder could not be found: {io_err}") + } + std::io::ErrorKind::PermissionDenied => { + format!("Permission denied while accessing the file system: {io_err}") + } + _ => format!("File system error: {io_err}"), + } + } + } + } + fn mode_label(&self) -> &'static str { match self.file_mode { FileMode::Include => "Included files", @@ -132,7 +238,7 @@ impl PackerApp { fn handle_add_file(&mut self) { let Some(folder) = self.folder.clone() else { - self.status = "Please select a folder before adding files".to_string(); + self.set_error_message("Please select a folder before adding files"); return; }; @@ -141,17 +247,17 @@ impl PackerApp { }; let Ok(relative) = path.strip_prefix(&folder) else { - self.status = "Selected file must be in the selected folder".to_string(); + self.set_error_message("Selected file must be in the selected folder"); return; }; if relative.components().count() != 1 { - self.status = "Selected file must be in the selected folder".to_string(); + self.set_error_message("Selected file must be in the selected folder"); return; } let Some(name) = path.file_name().and_then(|n| n.to_str()) else { - self.status = "Invalid file name".to_string(); + self.set_error_message("Invalid file name"); return; }; @@ -162,7 +268,7 @@ impl PackerApp { }; if duplicate { - self.status = "File is already listed".to_string(); + self.set_error_message("File is already listed"); return; } @@ -177,6 +283,7 @@ impl PackerApp { } } + self.clear_error_message(); self.status.clear(); } @@ -226,6 +333,7 @@ impl eframe::App for PackerApp { self.exclude_files = exclude.unwrap_or_default(); self.selected_include = None; self.selected_exclude = None; + self.clear_error_message(); self.status.clear(); if include_present && exclude_present { self.status = "Config contains both include and exclude lists; using include list" @@ -233,7 +341,8 @@ impl eframe::App for PackerApp { } } Err(err) => { - self.status = format!("Error loading config: {err}"); + let message = PackerApp::format_load_error(&dir, err); + self.set_error_message(message); self.output.clear(); self.name.clear(); self.timestamp.clear(); @@ -281,27 +390,36 @@ impl eframe::App for PackerApp { if ui.button("Pack").clicked() { if let Some(folder) = &self.folder { if self.name.trim().is_empty() { - self.status = "Please provide a PSU name".to_string(); + self.set_error_message("Please provide a PSU name"); return; } let config = match self.build_config() { Ok(config) => config, Err(err) => { - self.status = err; + self.set_error_message(err); return; } }; let output_path = PathBuf::from(&self.output); match psu_packer::pack_with_config(folder, &output_path, config) { - Ok(_) => self.status = format!("Packed to {}", output_path.display()), - Err(e) => self.status = format!("Error: {e}"), + Ok(_) => { + self.status = format!("Packed to {}", output_path.display()); + self.clear_error_message(); + } + Err(err) => { + let message = self.format_pack_error(folder, &output_path, err); + self.set_error_message(message); + } } } else { - self.status = "Please select a folder".to_string(); + self.set_error_message("Please select a folder"); } } + if let Some(error) = &self.error_message { + ui.colored_label(egui::Color32::RED, error); + } if !self.status.is_empty() { ui.label(&self.status); } From 2975d74e1c779981d41c1717ccec88622a8e5bac Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 13:38:55 -0700 Subject: [PATCH 010/118] Update Readme.md --- Readme.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index a0213db..5d71b5f 100644 --- a/Readme.md +++ b/Readme.md @@ -1,3 +1,10 @@ +image + +***This fork of the original project simply intends to add a simple gui to the existing progress of the project. Nothing fancy or pretty, but should work good for those who don't like to use terminals.*** +*This fork only addresses the PSU packer, and not the other featured programs of the repo. Only windows has been tested.* + +--------------------------------------------------------------------- +# ORIGINAL READMME BY https://github.com/ps2store/ps2suitcase & https://github.com/techwritescode & https://github.com/mcoirault # PS2 Rust Monorepo of my Rust projects for PS2 homebrew. @@ -22,4 +29,4 @@ cargo run -p psu-packer-gui ## Credits -Icon & UI Design by [@Berion](https://www.psx-place.com/members/berion.1431/) \ No newline at end of file +Icon & UI Design by [@Berion](https://www.psx-place.com/members/berion.1431/) From 72190c5447b712ff4e10ec6dcccb6baff2973059 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 14:45:41 -0700 Subject: [PATCH 011/118] Reorganize GUI layout into grouped sections --- crates/psu-packer-gui/src/main.rs | 300 ++++++++++++++++++------------ 1 file changed, 184 insertions(+), 116 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index f89ff2b..6d8fa03 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -188,19 +188,22 @@ impl PackerApp { } } }); + } - ui.horizontal(|ui| { - if ui.button("Add file").clicked() { - add_clicked = true; - } + let selected_exists = { + let (_, selected) = self.current_list(); + selected.is_some() + }; - if ui - .add_enabled(selected.is_some(), egui::Button::new("Remove file")) - .clicked() - { - remove_clicked = true; - } - }); + if ui.button("Add file").clicked() { + add_clicked = true; + } + + if ui + .add_enabled(selected_exists, egui::Button::new("Remove file")) + .clicked() + { + remove_clicked = true; } if add_clicked { @@ -305,124 +308,189 @@ impl PackerApp { impl eframe::App for PackerApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { - if ui.button("Select folder").clicked() { - if let Some(dir) = rfd::FileDialog::new().pick_folder() { - match psu_packer::load_config(&dir) { - Ok(config) => { - let psu_packer::Config { - name, - timestamp, - include, - exclude, - } = config; - - let include_present = include.is_some(); - let exclude_present = exclude.is_some(); - - self.output = format!("{}.psu", name); - self.name = name; - self.timestamp = timestamp - .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) - .unwrap_or_default(); - self.file_mode = if include_present { - FileMode::Include - } else { - FileMode::Exclude - }; - self.include_files = include.unwrap_or_default(); - self.exclude_files = exclude.unwrap_or_default(); - self.selected_include = None; - self.selected_exclude = None; - self.clear_error_message(); - self.status.clear(); - if include_present && exclude_present { - self.status = "Config contains both include and exclude lists; using include list" - .to_string(); + ui.group(|ui| { + ui.heading("Folder"); + ui.small("Select the PSU project folder containing psu.toml."); + if ui + .button("Select folder") + .on_hover_text("Pick the source directory to load configuration values.") + .clicked() + { + if let Some(dir) = rfd::FileDialog::new().pick_folder() { + match psu_packer::load_config(&dir) { + Ok(config) => { + let psu_packer::Config { + name, + timestamp, + include, + exclude, + } = config; + + let include_present = include.is_some(); + let exclude_present = exclude.is_some(); + + self.output = format!("{}.psu", name); + self.name = name; + self.timestamp = timestamp + .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) + .unwrap_or_default(); + self.file_mode = if include_present { + FileMode::Include + } else { + FileMode::Exclude + }; + self.include_files = include.unwrap_or_default(); + self.exclude_files = exclude.unwrap_or_default(); + self.selected_include = None; + self.selected_exclude = None; + self.clear_error_message(); + self.status.clear(); + if include_present && exclude_present { + self.status = "Config contains both include and exclude lists; using include list" + .to_string(); + } + } + Err(err) => { + let message = PackerApp::format_load_error(&dir, err); + self.set_error_message(message); + self.output.clear(); + self.name.clear(); + self.timestamp.clear(); + self.file_mode = FileMode::default(); + self.include_files.clear(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; } } - Err(err) => { - let message = PackerApp::format_load_error(&dir, err); - self.set_error_message(message); - self.output.clear(); - self.name.clear(); - self.timestamp.clear(); - self.file_mode = FileMode::default(); - self.include_files.clear(); - self.exclude_files.clear(); - self.selected_include = None; - self.selected_exclude = None; - } + self.folder = Some(dir); } - self.folder = Some(dir); } - } - if let Some(folder) = &self.folder { - ui.label(format!("Folder: {}", folder.display())); - } - if !self.name.is_empty() || self.folder.is_some() { - ui.horizontal(|ui| { - ui.label("Name:"); - ui.text_edit_singleline(&mut self.name); - }); - ui.horizontal(|ui| { - ui.label("Timestamp:"); - ui.text_edit_singleline(&mut self.timestamp); - }); - ui.horizontal(|ui| { - ui.label("File mode:"); - ui.radio_value(&mut self.file_mode, FileMode::Include, "Include"); - ui.radio_value(&mut self.file_mode, FileMode::Exclude, "Exclude"); - }); - self.file_list_ui(ui); - } - ui.horizontal(|ui| { - ui.label("Output:"); - ui.text_edit_singleline(&mut self.output); - if ui.button("Browse").clicked() { - if let Some(file) = rfd::FileDialog::new() - .set_file_name(&self.output) - .save_file() - { - self.output = file.display().to_string(); - } + + if let Some(folder) = &self.folder { + ui.label(format!("Folder: {}", folder.display())); } }); - if ui.button("Pack").clicked() { - if let Some(folder) = &self.folder { - if self.name.trim().is_empty() { - self.set_error_message("Please provide a PSU name"); - return; - } - let config = match self.build_config() { - Ok(config) => config, - Err(err) => { - self.set_error_message(err); - return; + ui.add_space(8.0); + + ui.group(|ui| { + ui.heading("Metadata"); + ui.small("Review or edit metadata loaded from the selected folder."); + if self.folder.is_some() || !self.name.is_empty() { + egui::Grid::new("metadata_grid") + .num_columns(2) + .spacing(egui::vec2(12.0, 6.0)) + .show(ui, |ui| { + ui.label("Name"); + ui.text_edit_singleline(&mut self.name); + ui.end_row(); + + ui.label("Timestamp"); + ui.text_edit_singleline(&mut self.timestamp); + ui.end_row(); + + ui.label("File mode"); + ui.vertical(|ui| { + ui.radio_value(&mut self.file_mode, FileMode::Include, "Include"); + ui.radio_value(&mut self.file_mode, FileMode::Exclude, "Exclude"); + }); + ui.end_row(); + }); + } else { + ui.label("Select a folder to load metadata options."); + } + }); + + ui.add_space(8.0); + + ui.group(|ui| { + ui.heading("File filters"); + ui.small("Manage include or exclude lists before creating the archive."); + if self.folder.is_some() || !self.name.is_empty() { + self.file_list_ui(ui); + } else { + ui.label("Select a folder to configure file filters."); + } + }); + + ui.add_space(8.0); + + ui.group(|ui| { + ui.heading("Output"); + ui.small("Choose where the packed PSU file will be saved."); + egui::Grid::new("output_grid") + .num_columns(2) + .spacing(egui::vec2(12.0, 6.0)) + .show(ui, |ui| { + ui.label("File path"); + ui.text_edit_singleline(&mut self.output); + ui.end_row(); + + ui.label(""); + if ui + .button("Browse") + .on_hover_text("Set a custom destination for the PSU file.") + .clicked() + { + if let Some(file) = rfd::FileDialog::new() + .set_file_name(&self.output) + .save_file() + { + self.output = file.display().to_string(); + } } - }; + ui.end_row(); + }); + }); + + ui.add_space(8.0); - let output_path = PathBuf::from(&self.output); - match psu_packer::pack_with_config(folder, &output_path, config) { - Ok(_) => { - self.status = format!("Packed to {}", output_path.display()); - self.clear_error_message(); + ui.group(|ui| { + ui.heading("Packaging"); + ui.small("Validate the configuration and generate the PSU archive."); + if ui + .button("Pack") + .on_hover_text("Create the PSU archive using the settings above.") + .clicked() + { + if let Some(folder) = &self.folder { + if self.name.trim().is_empty() { + self.set_error_message("Please provide a PSU name"); + return; } - Err(err) => { - let message = self.format_pack_error(folder, &output_path, err); - self.set_error_message(message); + + let config = match self.build_config() { + Ok(config) => config, + Err(err) => { + self.set_error_message(err); + return; + } + }; + + let output_path = PathBuf::from(&self.output); + match psu_packer::pack_with_config(folder, &output_path, config) { + Ok(_) => { + self.status = format!("Packed to {}", output_path.display()); + self.clear_error_message(); + } + Err(err) => { + let message = self.format_pack_error(folder, &output_path, err); + self.set_error_message(message); + } } + } else { + self.set_error_message("Please select a folder"); } - } else { - self.set_error_message("Please select a folder"); } - } - if let Some(error) = &self.error_message { - ui.colored_label(egui::Color32::RED, error); - } - if !self.status.is_empty() { - ui.label(&self.status); - } + + if let Some(error) = &self.error_message { + ui.colored_label(egui::Color32::RED, error); + } + if !self.status.is_empty() { + ui.label(&self.status); + } + }); }); } } From 8948598094bb1d7826949eb17006e4d16170daaf Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:07:25 -0700 Subject: [PATCH 012/118] Add PSU import workflow to GUI --- crates/psu-packer-gui/Cargo.toml | 1 + crates/psu-packer-gui/src/main.rs | 206 ++++++++++++++++++++++-------- 2 files changed, 156 insertions(+), 51 deletions(-) diff --git a/crates/psu-packer-gui/Cargo.toml b/crates/psu-packer-gui/Cargo.toml index 18f8d0c..2ca4bbd 100644 --- a/crates/psu-packer-gui/Cargo.toml +++ b/crates/psu-packer-gui/Cargo.toml @@ -6,6 +6,7 @@ version.workspace = true [dependencies] psu-packer = { path = "../psu-packer" } +ps2-filetypes = { path = "../ps2-filetypes" } eframe = "0.27" rfd = "0.14" chrono = "0.4.42" diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 6d8fa03..7437620 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -2,6 +2,7 @@ use chrono::NaiveDateTime; use eframe::egui; +use ps2_filetypes::{PSUEntryKind, PSU}; use std::path::{Path, PathBuf}; const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; @@ -30,6 +31,8 @@ struct PackerApp { exclude_files: Vec, selected_include: Option, selected_exclude: Option, + loaded_psu_path: Option, + loaded_psu_files: Vec, } impl Default for PackerApp { @@ -46,6 +49,8 @@ impl Default for PackerApp { exclude_files: Vec::new(), selected_include: None, selected_exclude: None, + loaded_psu_path: None, + loaded_psu_files: Vec::new(), } } } @@ -85,6 +90,71 @@ impl PackerApp { .collect() } + fn handle_open_psu(&mut self) { + let Some(path) = rfd::FileDialog::new() + .add_filter("PSU", &["psu"]) + .pick_file() + else { + return; + }; + + let data = match std::fs::read(&path) { + Ok(bytes) => bytes, + Err(err) => { + self.set_error_message(format!("Failed to read {}: {err}", path.display())); + return; + } + }; + + let parsed = match std::panic::catch_unwind(|| PSU::new(data)) { + Ok(psu) => psu, + Err(_) => { + self.set_error_message(format!("Failed to parse PSU file {}", path.display())); + return; + } + }; + + let entries = parsed.entries(); + let mut root_name: Option = None; + let mut root_timestamp = None; + let mut files = Vec::new(); + + for entry in &entries { + match entry.kind { + PSUEntryKind::Directory => { + if entry.name != "." && entry.name != ".." && root_name.is_none() { + root_name = Some(entry.name.clone()); + root_timestamp = Some(entry.created); + } + } + PSUEntryKind::File => files.push(entry.name.clone()), + } + } + + let Some(name) = root_name else { + self.set_error_message(format!("{} does not contain PSU metadata", path.display())); + return; + }; + + self.name = name; + self.timestamp = root_timestamp + .map(|ts| ts.format(TIMESTAMP_FORMAT).to_string()) + .unwrap_or_default(); + self.file_mode = FileMode::Include; + self.include_files = files.clone(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; + self.loaded_psu_files = files; + self.loaded_psu_path = Some(path.clone()); + self.clear_error_message(); + self.status = format!("Loaded PSU from {}", path.display()); + + if self.output.trim().is_empty() { + self.output = path.display().to_string(); + } + } + fn format_load_error(folder: &Path, err: psu_packer::Error) -> String { match err { psu_packer::Error::NameError => { @@ -311,67 +381,101 @@ impl eframe::App for PackerApp { ui.group(|ui| { ui.heading("Folder"); ui.small("Select the PSU project folder containing psu.toml."); - if ui - .button("Select folder") - .on_hover_text("Pick the source directory to load configuration values.") - .clicked() - { - if let Some(dir) = rfd::FileDialog::new().pick_folder() { - match psu_packer::load_config(&dir) { - Ok(config) => { - let psu_packer::Config { - name, - timestamp, - include, - exclude, - } = config; - - let include_present = include.is_some(); - let exclude_present = exclude.is_some(); - - self.output = format!("{}.psu", name); - self.name = name; - self.timestamp = timestamp - .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) - .unwrap_or_default(); - self.file_mode = if include_present { - FileMode::Include - } else { - FileMode::Exclude - }; - self.include_files = include.unwrap_or_default(); - self.exclude_files = exclude.unwrap_or_default(); - self.selected_include = None; - self.selected_exclude = None; - self.clear_error_message(); - self.status.clear(); - if include_present && exclude_present { - self.status = "Config contains both include and exclude lists; using include list" - .to_string(); + ui.horizontal(|ui| { + if ui + .button("Select folder") + .on_hover_text( + "Pick the source directory to load configuration values.", + ) + .clicked() + { + if let Some(dir) = rfd::FileDialog::new().pick_folder() { + match psu_packer::load_config(&dir) { + Ok(config) => { + let psu_packer::Config { + name, + timestamp, + include, + exclude, + } = config; + + let include_present = include.is_some(); + let exclude_present = exclude.is_some(); + + self.output = format!("{}.psu", name); + self.name = name; + self.timestamp = timestamp + .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) + .unwrap_or_default(); + self.file_mode = if include_present { + FileMode::Include + } else { + FileMode::Exclude + }; + self.include_files = include.unwrap_or_default(); + self.exclude_files = exclude.unwrap_or_default(); + self.selected_include = None; + self.selected_exclude = None; + self.clear_error_message(); + self.status.clear(); + if include_present && exclude_present { + self.status = "Config contains both include and exclude lists; using include list" + .to_string(); + } + } + Err(err) => { + let message = PackerApp::format_load_error(&dir, err); + self.set_error_message(message); + self.output.clear(); + self.name.clear(); + self.timestamp.clear(); + self.file_mode = FileMode::default(); + self.include_files.clear(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; } } - Err(err) => { - let message = PackerApp::format_load_error(&dir, err); - self.set_error_message(message); - self.output.clear(); - self.name.clear(); - self.timestamp.clear(); - self.file_mode = FileMode::default(); - self.include_files.clear(); - self.exclude_files.clear(); - self.selected_include = None; - self.selected_exclude = None; - } + self.folder = Some(dir); } - self.folder = Some(dir); } - } + + if ui + .button("Open PSU") + .on_hover_text("Load metadata from an existing PSU archive.") + .clicked() + { + self.handle_open_psu(); + } + }); if let Some(folder) = &self.folder { ui.label(format!("Folder: {}", folder.display())); } }); + if self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty() { + ui.add_space(8.0); + ui.group(|ui| { + ui.heading("Loaded PSU"); + ui.small("Review the files discovered in the opened PSU archive."); + if let Some(path) = &self.loaded_psu_path { + ui.label(format!("File: {}", path.display())); + } + egui::ScrollArea::vertical() + .max_height(150.0) + .show(ui, |ui| { + if self.loaded_psu_files.is_empty() { + ui.label("The archive does not contain any files."); + } else { + for file in &self.loaded_psu_files { + ui.label(file); + } + } + }); + }); + } + ui.add_space(8.0); ui.group(|ui| { From 3c85f3a09af09d4d2a2aab888084749fb30e37eb Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:22:13 -0700 Subject: [PATCH 013/118] Support adding multiple files in GUI --- crates/psu-packer-gui/src/main.rs | 127 ++++++++++++++++++++++-------- 1 file changed, 94 insertions(+), 33 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 7437620..ca319ec 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -35,6 +35,41 @@ struct PackerApp { loaded_psu_files: Vec, } +struct ErrorMessage { + message: String, + failed_files: Vec, +} + +impl From for ErrorMessage { + fn from(message: String) -> Self { + Self { + message, + failed_files: Vec::new(), + } + } +} + +impl From<&str> for ErrorMessage { + fn from(message: &str) -> Self { + Self { + message: message.to_owned(), + failed_files: Vec::new(), + } + } +} + +impl From<(S, Vec)> for ErrorMessage +where + S: Into, +{ + fn from((message, failed_files): (S, Vec)) -> Self { + Self { + message: message.into(), + failed_files, + } + } +} + impl Default for PackerApp { fn default() -> Self { Self { @@ -63,8 +98,20 @@ impl PackerApp { } } - fn set_error_message>(&mut self, message: S) { - self.error_message = Some(message.into()); + fn set_error_message(&mut self, message: M) + where + M: Into, + { + let message = message.into(); + let mut text = message.message; + if !message.failed_files.is_empty() { + if !text.is_empty() { + text.push(' '); + } + text.push_str("Failed files: "); + text.push_str(&message.failed_files.join(", ")); + } + self.error_message = Some(text); self.status.clear(); } @@ -315,49 +362,63 @@ impl PackerApp { return; }; - let Some(path) = rfd::FileDialog::new().set_directory(&folder).pick_file() else { + let Some(paths) = rfd::FileDialog::new().set_directory(&folder).pick_files() else { return; }; - let Ok(relative) = path.strip_prefix(&folder) else { - self.set_error_message("Selected file must be in the selected folder"); - return; - }; - - if relative.components().count() != 1 { - self.set_error_message("Selected file must be in the selected folder"); + if paths.is_empty() { return; } - let Some(name) = path.file_name().and_then(|n| n.to_str()) else { - self.set_error_message("Invalid file name"); - return; - }; + let (list, selected) = self.current_list(); + let mut invalid_entries = Vec::new(); + let mut last_added = None; + + for path in paths { + let Ok(relative) = path.strip_prefix(&folder) else { + invalid_entries.push(format!( + "{} (must be in the selected folder)", + path.display() + )); + continue; + }; + + if relative.components().count() != 1 { + invalid_entries.push(format!( + "{} (must be in the selected folder)", + path.display() + )); + continue; + } - let name = name.to_string(); - let duplicate = match self.file_mode { - FileMode::Include => self.include_files.iter().any(|entry| entry == &name), - FileMode::Exclude => self.exclude_files.iter().any(|entry| entry == &name), - }; + let Some(name) = path.file_name().and_then(|n| n.to_str()) else { + invalid_entries.push(format!("{} (invalid file name)", path.display())); + continue; + }; - if duplicate { - self.set_error_message("File is already listed"); - return; - } + let name = name.to_string(); - match self.file_mode { - FileMode::Include => { - self.include_files.push(name); - self.selected_include = Some(self.include_files.len() - 1); - } - FileMode::Exclude => { - self.exclude_files.push(name); - self.selected_exclude = Some(self.exclude_files.len() - 1); + if list.iter().any(|entry| entry == &name) { + invalid_entries.push(format!("{name} (already listed)")); + continue; } + + list.push(name); + last_added = Some(list.len() - 1); } - self.clear_error_message(); - self.status.clear(); + if let Some(index) = last_added { + *selected = Some(index); + } + + if invalid_entries.is_empty() { + if last_added.is_some() { + self.clear_error_message(); + self.status.clear(); + } + } else { + self.set_error_message(("Some files could not be added", invalid_entries)); + } } fn handle_remove_file(&mut self) { From 62227b980589de8356d93c6970d63048b1b96db8 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 15:50:17 -0700 Subject: [PATCH 014/118] Wrap packer UI in scroll area --- crates/psu-packer-gui/src/main.rs | 370 +++++++++++++++--------------- 1 file changed, 186 insertions(+), 184 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index ca319ec..23a3474 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -439,222 +439,224 @@ impl PackerApp { impl eframe::App for PackerApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { egui::CentralPanel::default().show(ctx, |ui| { - ui.group(|ui| { - ui.heading("Folder"); - ui.small("Select the PSU project folder containing psu.toml."); - ui.horizontal(|ui| { - if ui - .button("Select folder") - .on_hover_text( - "Pick the source directory to load configuration values.", - ) - .clicked() - { - if let Some(dir) = rfd::FileDialog::new().pick_folder() { - match psu_packer::load_config(&dir) { - Ok(config) => { - let psu_packer::Config { - name, - timestamp, - include, - exclude, - } = config; - - let include_present = include.is_some(); - let exclude_present = exclude.is_some(); - - self.output = format!("{}.psu", name); - self.name = name; - self.timestamp = timestamp - .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) - .unwrap_or_default(); - self.file_mode = if include_present { - FileMode::Include - } else { - FileMode::Exclude - }; - self.include_files = include.unwrap_or_default(); - self.exclude_files = exclude.unwrap_or_default(); - self.selected_include = None; - self.selected_exclude = None; - self.clear_error_message(); - self.status.clear(); - if include_present && exclude_present { - self.status = "Config contains both include and exclude lists; using include list" - .to_string(); + egui::ScrollArea::vertical().show(ui, |ui| { + ui.group(|ui| { + ui.heading("Folder"); + ui.small("Select the PSU project folder containing psu.toml."); + ui.horizontal(|ui| { + if ui + .button("Select folder") + .on_hover_text( + "Pick the source directory to load configuration values.", + ) + .clicked() + { + if let Some(dir) = rfd::FileDialog::new().pick_folder() { + match psu_packer::load_config(&dir) { + Ok(config) => { + let psu_packer::Config { + name, + timestamp, + include, + exclude, + } = config; + + let include_present = include.is_some(); + let exclude_present = exclude.is_some(); + + self.output = format!("{}.psu", name); + self.name = name; + self.timestamp = timestamp + .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) + .unwrap_or_default(); + self.file_mode = if include_present { + FileMode::Include + } else { + FileMode::Exclude + }; + self.include_files = include.unwrap_or_default(); + self.exclude_files = exclude.unwrap_or_default(); + self.selected_include = None; + self.selected_exclude = None; + self.clear_error_message(); + self.status.clear(); + if include_present && exclude_present { + self.status = "Config contains both include and exclude lists; using include list" + .to_string(); + } + } + Err(err) => { + let message = PackerApp::format_load_error(&dir, err); + self.set_error_message(message); + self.output.clear(); + self.name.clear(); + self.timestamp.clear(); + self.file_mode = FileMode::default(); + self.include_files.clear(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; } } - Err(err) => { - let message = PackerApp::format_load_error(&dir, err); - self.set_error_message(message); - self.output.clear(); - self.name.clear(); - self.timestamp.clear(); - self.file_mode = FileMode::default(); - self.include_files.clear(); - self.exclude_files.clear(); - self.selected_include = None; - self.selected_exclude = None; - } + self.folder = Some(dir); } - self.folder = Some(dir); } - } - if ui - .button("Open PSU") - .on_hover_text("Load metadata from an existing PSU archive.") - .clicked() - { - self.handle_open_psu(); + if ui + .button("Open PSU") + .on_hover_text("Load metadata from an existing PSU archive.") + .clicked() + { + self.handle_open_psu(); + } + }); + + if let Some(folder) = &self.folder { + ui.label(format!("Folder: {}", folder.display())); } }); - if let Some(folder) = &self.folder { - ui.label(format!("Folder: {}", folder.display())); + if self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty() { + ui.add_space(8.0); + ui.group(|ui| { + ui.heading("Loaded PSU"); + ui.small("Review the files discovered in the opened PSU archive."); + if let Some(path) = &self.loaded_psu_path { + ui.label(format!("File: {}", path.display())); + } + egui::ScrollArea::vertical() + .max_height(150.0) + .show(ui, |ui| { + if self.loaded_psu_files.is_empty() { + ui.label("The archive does not contain any files."); + } else { + for file in &self.loaded_psu_files { + ui.label(file); + } + } + }); + }); } - }); - if self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty() { ui.add_space(8.0); + ui.group(|ui| { - ui.heading("Loaded PSU"); - ui.small("Review the files discovered in the opened PSU archive."); - if let Some(path) = &self.loaded_psu_path { - ui.label(format!("File: {}", path.display())); + ui.heading("Metadata"); + ui.small("Review or edit metadata loaded from the selected folder."); + if self.folder.is_some() || !self.name.is_empty() { + egui::Grid::new("metadata_grid") + .num_columns(2) + .spacing(egui::vec2(12.0, 6.0)) + .show(ui, |ui| { + ui.label("Name"); + ui.text_edit_singleline(&mut self.name); + ui.end_row(); + + ui.label("Timestamp"); + ui.text_edit_singleline(&mut self.timestamp); + ui.end_row(); + + ui.label("File mode"); + ui.vertical(|ui| { + ui.radio_value(&mut self.file_mode, FileMode::Include, "Include"); + ui.radio_value(&mut self.file_mode, FileMode::Exclude, "Exclude"); + }); + ui.end_row(); + }); + } else { + ui.label("Select a folder to load metadata options."); + } + }); + + ui.add_space(8.0); + + ui.group(|ui| { + ui.heading("File filters"); + ui.small("Manage include or exclude lists before creating the archive."); + if self.folder.is_some() || !self.name.is_empty() { + self.file_list_ui(ui); + } else { + ui.label("Select a folder to configure file filters."); } - egui::ScrollArea::vertical() - .max_height(150.0) - .show(ui, |ui| { - if self.loaded_psu_files.is_empty() { - ui.label("The archive does not contain any files."); - } else { - for file in &self.loaded_psu_files { - ui.label(file); - } - } - }); }); - } - ui.add_space(8.0); + ui.add_space(8.0); - ui.group(|ui| { - ui.heading("Metadata"); - ui.small("Review or edit metadata loaded from the selected folder."); - if self.folder.is_some() || !self.name.is_empty() { - egui::Grid::new("metadata_grid") + ui.group(|ui| { + ui.heading("Output"); + ui.small("Choose where the packed PSU file will be saved."); + egui::Grid::new("output_grid") .num_columns(2) .spacing(egui::vec2(12.0, 6.0)) .show(ui, |ui| { - ui.label("Name"); - ui.text_edit_singleline(&mut self.name); - ui.end_row(); - - ui.label("Timestamp"); - ui.text_edit_singleline(&mut self.timestamp); + ui.label("File path"); + ui.text_edit_singleline(&mut self.output); ui.end_row(); - ui.label("File mode"); - ui.vertical(|ui| { - ui.radio_value(&mut self.file_mode, FileMode::Include, "Include"); - ui.radio_value(&mut self.file_mode, FileMode::Exclude, "Exclude"); - }); - ui.end_row(); - }); - } else { - ui.label("Select a folder to load metadata options."); - } - }); - - ui.add_space(8.0); - - ui.group(|ui| { - ui.heading("File filters"); - ui.small("Manage include or exclude lists before creating the archive."); - if self.folder.is_some() || !self.name.is_empty() { - self.file_list_ui(ui); - } else { - ui.label("Select a folder to configure file filters."); - } - }); - - ui.add_space(8.0); - - ui.group(|ui| { - ui.heading("Output"); - ui.small("Choose where the packed PSU file will be saved."); - egui::Grid::new("output_grid") - .num_columns(2) - .spacing(egui::vec2(12.0, 6.0)) - .show(ui, |ui| { - ui.label("File path"); - ui.text_edit_singleline(&mut self.output); - ui.end_row(); - - ui.label(""); - if ui - .button("Browse") - .on_hover_text("Set a custom destination for the PSU file.") - .clicked() - { - if let Some(file) = rfd::FileDialog::new() - .set_file_name(&self.output) - .save_file() + ui.label(""); + if ui + .button("Browse") + .on_hover_text("Set a custom destination for the PSU file.") + .clicked() { - self.output = file.display().to_string(); + if let Some(file) = rfd::FileDialog::new() + .set_file_name(&self.output) + .save_file() + { + self.output = file.display().to_string(); + } } - } - ui.end_row(); - }); - }); - - ui.add_space(8.0); + ui.end_row(); + }); + }); - ui.group(|ui| { - ui.heading("Packaging"); - ui.small("Validate the configuration and generate the PSU archive."); - if ui - .button("Pack") - .on_hover_text("Create the PSU archive using the settings above.") - .clicked() - { - if let Some(folder) = &self.folder { - if self.name.trim().is_empty() { - self.set_error_message("Please provide a PSU name"); - return; - } + ui.add_space(8.0); - let config = match self.build_config() { - Ok(config) => config, - Err(err) => { - self.set_error_message(err); + ui.group(|ui| { + ui.heading("Packaging"); + ui.small("Validate the configuration and generate the PSU archive."); + if ui + .button("Pack") + .on_hover_text("Create the PSU archive using the settings above.") + .clicked() + { + if let Some(folder) = &self.folder { + if self.name.trim().is_empty() { + self.set_error_message("Please provide a PSU name"); return; } - }; - let output_path = PathBuf::from(&self.output); - match psu_packer::pack_with_config(folder, &output_path, config) { - Ok(_) => { - self.status = format!("Packed to {}", output_path.display()); - self.clear_error_message(); - } - Err(err) => { - let message = self.format_pack_error(folder, &output_path, err); - self.set_error_message(message); + let config = match self.build_config() { + Ok(config) => config, + Err(err) => { + self.set_error_message(err); + return; + } + }; + + let output_path = PathBuf::from(&self.output); + match psu_packer::pack_with_config(folder, &output_path, config) { + Ok(_) => { + self.status = format!("Packed to {}", output_path.display()); + self.clear_error_message(); + } + Err(err) => { + let message = self.format_pack_error(folder, &output_path, err); + self.set_error_message(message); + } } + } else { + self.set_error_message("Please select a folder"); } - } else { - self.set_error_message("Please select a folder"); } - } - if let Some(error) = &self.error_message { - ui.colored_label(egui::Color32::RED, error); - } - if !self.status.is_empty() { - ui.label(&self.status); - } + if let Some(error) = &self.error_message { + ui.colored_label(egui::Color32::RED, error); + } + if !self.status.is_empty() { + ui.label(&self.status); + } + }); }); }); } From 139888b9ba35d38d9b93ed3b0c9ca860bfb0ff7b Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 16:35:44 -0700 Subject: [PATCH 015/118] Adjust PSU/folder selection state handling --- crates/psu-packer-gui/src/main.rs | 103 +++++++++++++++++------------- 1 file changed, 58 insertions(+), 45 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 23a3474..8421991 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -188,14 +188,15 @@ impl PackerApp { .map(|ts| ts.format(TIMESTAMP_FORMAT).to_string()) .unwrap_or_default(); self.file_mode = FileMode::Include; - self.include_files = files.clone(); - self.exclude_files.clear(); - self.selected_include = None; - self.selected_exclude = None; self.loaded_psu_files = files; self.loaded_psu_path = Some(path.clone()); self.clear_error_message(); self.status = format!("Loaded PSU from {}", path.display()); + self.folder = None; + self.include_files.clear(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; if self.output.trim().is_empty() { self.output = path.display().to_string(); @@ -498,6 +499,8 @@ impl eframe::App for PackerApp { self.selected_exclude = None; } } + self.loaded_psu_path = None; + self.loaded_psu_files.clear(); self.folder = Some(dir); } } @@ -516,7 +519,10 @@ impl eframe::App for PackerApp { } }); - if self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty() { + let showing_psu = self.folder.is_none() + && (self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty()); + + if showing_psu { ui.add_space(8.0); ui.group(|ui| { ui.heading("Loaded PSU"); @@ -536,49 +542,56 @@ impl eframe::App for PackerApp { } }); }); - } - - ui.add_space(8.0); - - ui.group(|ui| { - ui.heading("Metadata"); - ui.small("Review or edit metadata loaded from the selected folder."); - if self.folder.is_some() || !self.name.is_empty() { - egui::Grid::new("metadata_grid") - .num_columns(2) - .spacing(egui::vec2(12.0, 6.0)) - .show(ui, |ui| { - ui.label("Name"); - ui.text_edit_singleline(&mut self.name); - ui.end_row(); - - ui.label("Timestamp"); - ui.text_edit_singleline(&mut self.timestamp); - ui.end_row(); - - ui.label("File mode"); - ui.vertical(|ui| { - ui.radio_value(&mut self.file_mode, FileMode::Include, "Include"); - ui.radio_value(&mut self.file_mode, FileMode::Exclude, "Exclude"); + } else { + ui.add_space(8.0); + ui.group(|ui| { + ui.heading("Metadata"); + ui.small("Review or edit metadata loaded from the selected folder."); + if self.folder.is_some() { + egui::Grid::new("metadata_grid") + .num_columns(2) + .spacing(egui::vec2(12.0, 6.0)) + .show(ui, |ui| { + ui.label("Name"); + ui.text_edit_singleline(&mut self.name); + ui.end_row(); + + ui.label("Timestamp"); + ui.text_edit_singleline(&mut self.timestamp); + ui.end_row(); + + ui.label("File mode"); + ui.vertical(|ui| { + ui.radio_value( + &mut self.file_mode, + FileMode::Include, + "Include", + ); + ui.radio_value( + &mut self.file_mode, + FileMode::Exclude, + "Exclude", + ); + }); + ui.end_row(); }); - ui.end_row(); - }); - } else { - ui.label("Select a folder to load metadata options."); - } - }); + } else { + ui.label("Select a folder to load metadata options."); + } + }); - ui.add_space(8.0); + ui.add_space(8.0); - ui.group(|ui| { - ui.heading("File filters"); - ui.small("Manage include or exclude lists before creating the archive."); - if self.folder.is_some() || !self.name.is_empty() { - self.file_list_ui(ui); - } else { - ui.label("Select a folder to configure file filters."); - } - }); + ui.group(|ui| { + ui.heading("File filters"); + ui.small("Manage include or exclude lists before creating the archive."); + if self.folder.is_some() { + self.file_list_ui(ui); + } else { + ui.label("Select a folder to configure file filters."); + } + }); + } ui.add_space(8.0); From 99d9baa7629d47c2df1448016fd21e9f09a4c564 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 16:46:21 -0700 Subject: [PATCH 016/118] Update file list controls --- crates/psu-packer-gui/src/main.rs | 65 ++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 8421991..00e95da 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -289,39 +289,60 @@ impl PackerApp { fn file_list_ui(&mut self, ui: &mut egui::Ui) { let mode_label = self.mode_label(); - ui.label(mode_label); - let mut add_clicked = false; let mut remove_clicked = false; + let has_selection = { + let (_, selected) = self.current_list(); + selected.is_some() + }; + + ui.horizontal(|ui| { + ui.label(mode_label); + ui.add_space(ui.spacing().item_spacing.x); + + if ui + .add(egui::Button::new("➕").small()) + .on_hover_text("Add files from the selected folder to this list.") + .clicked() + { + add_clicked = true; + } + + if ui + .add_enabled(has_selection, egui::Button::new("➖").small()) + .on_hover_text("Remove the selected file from this list.") + .clicked() + { + remove_clicked = true; + } + }); + { let (files, selected) = self.current_list(); egui::ScrollArea::vertical() .max_height(150.0) .show(ui, |ui| { for (idx, file) in files.iter().enumerate() { - let is_selected = Some(idx) == *selected; - if ui.selectable_label(is_selected, file).clicked() { - *selected = Some(idx); - } - } - }); - } - - let selected_exists = { - let (_, selected) = self.current_list(); - selected.is_some() - }; + ui.horizontal(|ui| { + let is_selected = Some(idx) == *selected; + if ui.selectable_label(is_selected, file).clicked() { + *selected = Some(idx); + } - if ui.button("Add file").clicked() { - add_clicked = true; - } + ui.add_space(ui.spacing().item_spacing.x); - if ui - .add_enabled(selected_exists, egui::Button::new("Remove file")) - .clicked() - { - remove_clicked = true; + if ui + .small_button("✖") + .on_hover_text("Remove this file from the list.") + .clicked() + { + *selected = Some(idx); + remove_clicked = true; + } + }); + } + }); } if add_clicked { From 545c038d5dcce7c3bf945d3cf8ac20f7142f12aa Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 16:55:26 -0700 Subject: [PATCH 017/118] Add menu bar with file actions in PSU packer --- Cargo.lock | 1 + crates/psu-packer-gui/src/main.rs | 49 ++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 10452e3..7d7af95 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4090,6 +4090,7 @@ version = "0.1.0" dependencies = [ "chrono", "eframe 0.27.2", + "ps2-filetypes", "psu-packer", "rfd 0.14.1", ] diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 00e95da..68ffbc7 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -33,6 +33,7 @@ struct PackerApp { selected_exclude: Option, loaded_psu_path: Option, loaded_psu_files: Vec, + exit_confirmation_requested: bool, } struct ErrorMessage { @@ -86,6 +87,7 @@ impl Default for PackerApp { selected_exclude: None, loaded_psu_path: None, loaded_psu_files: Vec::new(), + exit_confirmation_requested: false, } } } @@ -203,6 +205,15 @@ impl PackerApp { } } + fn browse_output_destination(&mut self) { + if let Some(file) = rfd::FileDialog::new() + .set_file_name(&self.output) + .save_file() + { + self.output = file.display().to_string(); + } + } + fn format_load_error(folder: &Path, err: psu_packer::Error) -> String { match err { psu_packer::Error::NameError => { @@ -460,6 +471,29 @@ impl PackerApp { impl eframe::App for PackerApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { + egui::menu::bar(ui, |ui| { + ui.menu_button("File", |ui| { + if ui.button("Save PSU As...").clicked() { + self.browse_output_destination(); + ui.close_menu(); + } + + if ui.button("Open PSU...").clicked() { + self.handle_open_psu(); + ui.close_menu(); + } + + ui.separator(); + + if ui.button("Exit").clicked() { + self.exit_confirmation_requested = true; + ui.close_menu(); + } + }); + }); + }); + egui::CentralPanel::default().show(ctx, |ui| { egui::ScrollArea::vertical().show(ui, |ui| { ui.group(|ui| { @@ -525,14 +559,6 @@ impl eframe::App for PackerApp { self.folder = Some(dir); } } - - if ui - .button("Open PSU") - .on_hover_text("Load metadata from an existing PSU archive.") - .clicked() - { - self.handle_open_psu(); - } }); if let Some(folder) = &self.folder { @@ -633,12 +659,7 @@ impl eframe::App for PackerApp { .on_hover_text("Set a custom destination for the PSU file.") .clicked() { - if let Some(file) = rfd::FileDialog::new() - .set_file_name(&self.output) - .save_file() - { - self.output = file.display().to_string(); - } + self.browse_output_destination(); } ui.end_row(); }); From 4955a819585805c250f6c3e81a3be7c32929974d Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 17:11:54 -0700 Subject: [PATCH 018/118] Add exit confirmation when exiting GUI --- crates/psu-packer-gui/src/main.rs | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 68ffbc7..d2915fc 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -33,7 +33,7 @@ struct PackerApp { selected_exclude: Option, loaded_psu_path: Option, loaded_psu_files: Vec, - exit_confirmation_requested: bool, + show_exit_confirm: bool, } struct ErrorMessage { @@ -87,7 +87,7 @@ impl Default for PackerApp { selected_exclude: None, loaded_psu_path: None, loaded_psu_files: Vec::new(), - exit_confirmation_requested: false, + show_exit_confirm: false, } } } @@ -487,7 +487,7 @@ impl eframe::App for PackerApp { ui.separator(); if ui.button("Exit").clicked() { - self.exit_confirmation_requested = true; + self.show_exit_confirm = true; ui.close_menu(); } }); @@ -714,6 +714,27 @@ impl eframe::App for PackerApp { }); }); }); + + if self.show_exit_confirm { + egui::Window::new("Confirm Exit") + .collapsible(false) + .resizable(false) + .show(ctx, |ui| { + ui.label("Are you sure you want to exit?"); + ui.add_space(8.0); + ui.horizontal(|ui| { + let yes_clicked = ui.button("Yes").clicked(); + let no_clicked = ui.button("No").clicked(); + + if yes_clicked { + self.show_exit_confirm = false; + ctx.send_viewport_cmd(egui::ViewportCommand::Close); + } else if no_clicked { + self.show_exit_confirm = false; + } + }); + }); + } } } From 6a0d084138bd53fb2c42ad61aec145133bc4a9e0 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 17:58:21 -0700 Subject: [PATCH 019/118] Allow editing metadata without selecting a folder --- crates/psu-packer-gui/src/main.rs | 86 ++++++++++++++++++------------- 1 file changed, 49 insertions(+), 37 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index d2915fc..bf9ffac 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -34,6 +34,7 @@ struct PackerApp { loaded_psu_path: Option, loaded_psu_files: Vec, show_exit_confirm: bool, + source_present_last_frame: bool, } struct ErrorMessage { @@ -88,6 +89,7 @@ impl Default for PackerApp { loaded_psu_path: None, loaded_psu_files: Vec::new(), show_exit_confirm: false, + source_present_last_frame: false, } } } @@ -121,6 +123,16 @@ impl PackerApp { self.error_message = None; } + fn reset_metadata_fields(&mut self) { + self.name.clear(); + self.timestamp.clear(); + self.file_mode = FileMode::default(); + self.include_files.clear(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; + } + fn missing_include_files(&self, folder: &Path) -> Vec { if !matches!(self.file_mode, FileMode::Include) { return Vec::new(); @@ -471,6 +483,16 @@ impl PackerApp { impl eframe::App for PackerApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + let source_present = self.folder.is_some() + || self.loaded_psu_path.is_some() + || !self.loaded_psu_files.is_empty(); + + if !source_present && self.source_present_last_frame { + self.reset_metadata_fields(); + } + + self.source_present_last_frame = source_present; + egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { egui::menu::bar(ui, |ui| { ui.menu_button("File", |ui| { @@ -589,44 +611,34 @@ impl eframe::App for PackerApp { } }); }); - } else { - ui.add_space(8.0); - ui.group(|ui| { - ui.heading("Metadata"); - ui.small("Review or edit metadata loaded from the selected folder."); - if self.folder.is_some() { - egui::Grid::new("metadata_grid") - .num_columns(2) - .spacing(egui::vec2(12.0, 6.0)) - .show(ui, |ui| { - ui.label("Name"); - ui.text_edit_singleline(&mut self.name); - ui.end_row(); - - ui.label("Timestamp"); - ui.text_edit_singleline(&mut self.timestamp); - ui.end_row(); - - ui.label("File mode"); - ui.vertical(|ui| { - ui.radio_value( - &mut self.file_mode, - FileMode::Include, - "Include", - ); - ui.radio_value( - &mut self.file_mode, - FileMode::Exclude, - "Exclude", - ); - }); - ui.end_row(); - }); - } else { - ui.label("Select a folder to load metadata options."); - } - }); + } + + ui.add_space(8.0); + ui.group(|ui| { + ui.heading("Metadata"); + ui.small("Edit PSU metadata before or after selecting a folder."); + egui::Grid::new("metadata_grid") + .num_columns(2) + .spacing(egui::vec2(12.0, 6.0)) + .show(ui, |ui| { + ui.label("Name"); + ui.text_edit_singleline(&mut self.name); + ui.end_row(); + + ui.label("Timestamp"); + ui.text_edit_singleline(&mut self.timestamp); + ui.end_row(); + + ui.label("File mode"); + ui.vertical(|ui| { + ui.radio_value(&mut self.file_mode, FileMode::Include, "Include"); + ui.radio_value(&mut self.file_mode, FileMode::Exclude, "Exclude"); + }); + ui.end_row(); + }); + }); + if !showing_psu { ui.add_space(8.0); ui.group(|ui| { From 49a905d3decc03051823aa38e0a7454106394149 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 18:46:57 -0700 Subject: [PATCH 020/118] Add timestamp hint text in GUI --- crates/psu-packer-gui/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index bf9ffac..49ceca3 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -626,7 +626,7 @@ impl eframe::App for PackerApp { ui.end_row(); ui.label("Timestamp"); - ui.text_edit_singleline(&mut self.timestamp); + ui.add(egui::TextEdit::singleline(&mut self.timestamp).hint_text(TIMESTAMP_FORMAT)); ui.end_row(); ui.label("File mode"); From 0117be1dfd3cb63857eb23fee86585b3364d59fb Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 19:18:43 -0700 Subject: [PATCH 021/118] Support include/exclude lists in packer --- crates/psu-packer-gui/src/main.rs | 212 +++++++++++++++--------------- crates/psu-packer/src/lib.rs | 89 ++++++++----- 2 files changed, 164 insertions(+), 137 deletions(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 49ceca3..0c79098 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -7,18 +7,6 @@ use std::path::{Path, PathBuf}; const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; -#[derive(Clone, Copy, PartialEq, Eq)] -enum FileMode { - Include, - Exclude, -} - -impl Default for FileMode { - fn default() -> Self { - Self::Exclude - } -} - struct PackerApp { folder: Option, output: String, @@ -26,7 +14,6 @@ struct PackerApp { error_message: Option, name: String, timestamp: String, - file_mode: FileMode, include_files: Vec, exclude_files: Vec, selected_include: Option, @@ -37,6 +24,21 @@ struct PackerApp { source_present_last_frame: bool, } +#[derive(Copy, Clone)] +enum ListKind { + Include, + Exclude, +} + +impl ListKind { + fn label(self) -> &'static str { + match self { + ListKind::Include => "Include files", + ListKind::Exclude => "Exclude files", + } + } +} + struct ErrorMessage { message: String, failed_files: Vec, @@ -81,7 +83,6 @@ impl Default for PackerApp { error_message: None, name: String::new(), timestamp: String::new(), - file_mode: FileMode::default(), include_files: Vec::new(), exclude_files: Vec::new(), selected_include: None, @@ -95,10 +96,10 @@ impl Default for PackerApp { } impl PackerApp { - fn current_list(&mut self) -> (&mut Vec, &mut Option) { - match self.file_mode { - FileMode::Include => (&mut self.include_files, &mut self.selected_include), - FileMode::Exclude => (&mut self.exclude_files, &mut self.selected_exclude), + fn list_mut(&mut self, kind: ListKind) -> (&mut Vec, &mut Option) { + match kind { + ListKind::Include => (&mut self.include_files, &mut self.selected_include), + ListKind::Exclude => (&mut self.exclude_files, &mut self.selected_exclude), } } @@ -126,7 +127,6 @@ impl PackerApp { fn reset_metadata_fields(&mut self) { self.name.clear(); self.timestamp.clear(); - self.file_mode = FileMode::default(); self.include_files.clear(); self.exclude_files.clear(); self.selected_include = None; @@ -134,7 +134,7 @@ impl PackerApp { } fn missing_include_files(&self, folder: &Path) -> Vec { - if !matches!(self.file_mode, FileMode::Include) { + if self.include_files.is_empty() { return Vec::new(); } @@ -201,7 +201,6 @@ impl PackerApp { self.timestamp = root_timestamp .map(|ts| ts.format(TIMESTAMP_FORMAT).to_string()) .unwrap_or_default(); - self.file_mode = FileMode::Include; self.loaded_psu_files = files; self.loaded_psu_path = Some(path.clone()); self.clear_error_message(); @@ -231,9 +230,6 @@ impl PackerApp { psu_packer::Error::NameError => { "Configuration contains an invalid PSU name.".to_string() } - psu_packer::Error::IncludeExcludeError => { - "Configuration cannot define both include and exclude lists.".to_string() - } psu_packer::Error::ConfigError(message) => { format!("The psu.toml file is invalid: {message}") } @@ -261,9 +257,6 @@ impl PackerApp { "PSU name can only contain letters, numbers, spaces, underscores, and hyphens." .to_string() } - psu_packer::Error::IncludeExcludeError => { - "Include and exclude lists cannot be used at the same time.".to_string() - } psu_packer::Error::ConfigError(message) => { format!("Configuration error: {message}") } @@ -303,25 +296,18 @@ impl PackerApp { } } - fn mode_label(&self) -> &'static str { - match self.file_mode { - FileMode::Include => "Included files", - FileMode::Exclude => "Excluded files", - } - } - - fn file_list_ui(&mut self, ui: &mut egui::Ui) { - let mode_label = self.mode_label(); + fn file_list_ui( + ui: &mut egui::Ui, + label: &str, + files: &mut Vec, + selected: &mut Option, + ) -> (bool, bool) { let mut add_clicked = false; let mut remove_clicked = false; - - let has_selection = { - let (_, selected) = self.current_list(); - selected.is_some() - }; + let has_selection = selected.is_some(); ui.horizontal(|ui| { - ui.label(mode_label); + ui.label(label); ui.add_space(ui.spacing().item_spacing.x); if ui @@ -341,40 +327,31 @@ impl PackerApp { } }); - { - let (files, selected) = self.current_list(); - egui::ScrollArea::vertical() - .max_height(150.0) - .show(ui, |ui| { - for (idx, file) in files.iter().enumerate() { - ui.horizontal(|ui| { - let is_selected = Some(idx) == *selected; - if ui.selectable_label(is_selected, file).clicked() { - *selected = Some(idx); - } - - ui.add_space(ui.spacing().item_spacing.x); + egui::ScrollArea::vertical() + .max_height(150.0) + .show(ui, |ui| { + for (idx, file) in files.iter().enumerate() { + ui.horizontal(|ui| { + let is_selected = Some(idx) == *selected; + if ui.selectable_label(is_selected, file).clicked() { + *selected = Some(idx); + } - if ui - .small_button("✖") - .on_hover_text("Remove this file from the list.") - .clicked() - { - *selected = Some(idx); - remove_clicked = true; - } - }); - } - }); - } + ui.add_space(ui.spacing().item_spacing.x); - if add_clicked { - self.handle_add_file(); - } + if ui + .small_button("✖") + .on_hover_text("Remove this file from the list.") + .clicked() + { + *selected = Some(idx); + remove_clicked = true; + } + }); + } + }); - if remove_clicked { - self.handle_remove_file(); - } + (add_clicked, remove_clicked) } fn build_config(&self) -> Result { @@ -388,9 +365,16 @@ impl PackerApp { ) }; - let (include, exclude) = match self.file_mode { - FileMode::Include => (Some(self.include_files.clone()), None), - FileMode::Exclude => (None, Some(self.exclude_files.clone())), + let include = if self.include_files.is_empty() { + None + } else { + Some(self.include_files.clone()) + }; + + let exclude = if self.exclude_files.is_empty() { + None + } else { + Some(self.exclude_files.clone()) }; Ok(psu_packer::Config { @@ -401,12 +385,15 @@ impl PackerApp { }) } - fn handle_add_file(&mut self) { + fn handle_add_file(&mut self, kind: ListKind) { let Some(folder) = self.folder.clone() else { self.set_error_message("Please select a folder before adding files"); return; }; + let list_label = kind.label(); + let (files, selected) = self.list_mut(kind); + let Some(paths) = rfd::FileDialog::new().set_directory(&folder).pick_files() else { return; }; @@ -415,7 +402,6 @@ impl PackerApp { return; } - let (list, selected) = self.current_list(); let mut invalid_entries = Vec::new(); let mut last_added = None; @@ -443,13 +429,13 @@ impl PackerApp { let name = name.to_string(); - if list.iter().any(|entry| entry == &name) { + if files.iter().any(|entry| entry == &name) { invalid_entries.push(format!("{name} (already listed)")); continue; } - list.push(name); - last_added = Some(list.len() - 1); + files.push(name); + last_added = Some(files.len() - 1); } if let Some(index) = last_added { @@ -462,12 +448,13 @@ impl PackerApp { self.status.clear(); } } else { - self.set_error_message(("Some files could not be added", invalid_entries)); + let message = format!("Some files could not be added to the {list_label} list"); + self.set_error_message((message, invalid_entries)); } } - fn handle_remove_file(&mut self) { - let (files, selected) = self.current_list(); + fn handle_remove_file(&mut self, kind: ListKind) { + let (files, selected) = self.list_mut(kind); if let Some(idx) = selected.take() { files.remove(idx); if files.is_empty() { @@ -539,29 +526,17 @@ impl eframe::App for PackerApp { exclude, } = config; - let include_present = include.is_some(); - let exclude_present = exclude.is_some(); - self.output = format!("{}.psu", name); self.name = name; self.timestamp = timestamp .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) .unwrap_or_default(); - self.file_mode = if include_present { - FileMode::Include - } else { - FileMode::Exclude - }; self.include_files = include.unwrap_or_default(); self.exclude_files = exclude.unwrap_or_default(); self.selected_include = None; self.selected_exclude = None; self.clear_error_message(); self.status.clear(); - if include_present && exclude_present { - self.status = "Config contains both include and exclude lists; using include list" - .to_string(); - } } Err(err) => { let message = PackerApp::format_load_error(&dir, err); @@ -569,7 +544,6 @@ impl eframe::App for PackerApp { self.output.clear(); self.name.clear(); self.timestamp.clear(); - self.file_mode = FileMode::default(); self.include_files.clear(); self.exclude_files.clear(); self.selected_include = None; @@ -626,14 +600,10 @@ impl eframe::App for PackerApp { ui.end_row(); ui.label("Timestamp"); - ui.add(egui::TextEdit::singleline(&mut self.timestamp).hint_text(TIMESTAMP_FORMAT)); - ui.end_row(); - - ui.label("File mode"); - ui.vertical(|ui| { - ui.radio_value(&mut self.file_mode, FileMode::Include, "Include"); - ui.radio_value(&mut self.file_mode, FileMode::Exclude, "Exclude"); - }); + ui.add( + egui::TextEdit::singleline(&mut self.timestamp) + .hint_text(TIMESTAMP_FORMAT), + ); ui.end_row(); }); }); @@ -643,9 +613,37 @@ impl eframe::App for PackerApp { ui.group(|ui| { ui.heading("File filters"); - ui.small("Manage include or exclude lists before creating the archive."); + ui.small( + "Manage which files to include or exclude before creating the archive.", + ); if self.folder.is_some() { - self.file_list_ui(ui); + ui.columns(2, |columns| { + let (include_add, include_remove) = Self::file_list_ui( + &mut columns[0], + ListKind::Include.label(), + &mut self.include_files, + &mut self.selected_include, + ); + if include_add { + self.handle_add_file(ListKind::Include); + } + if include_remove { + self.handle_remove_file(ListKind::Include); + } + + let (exclude_add, exclude_remove) = Self::file_list_ui( + &mut columns[1], + ListKind::Exclude.label(), + &mut self.exclude_files, + &mut self.selected_exclude, + ); + if exclude_add { + self.handle_add_file(ListKind::Exclude); + } + if exclude_remove { + self.handle_remove_file(ListKind::Exclude); + } + }); } else { ui.label("Select a folder to configure file filters."); } diff --git a/crates/psu-packer/src/lib.rs b/crates/psu-packer/src/lib.rs index 5f765a6..42f1b5a 100644 --- a/crates/psu-packer/src/lib.rs +++ b/crates/psu-packer/src/lib.rs @@ -2,6 +2,7 @@ use chrono::{DateTime, Local, NaiveDateTime}; use colored::Colorize; use ps2_filetypes::{PSUEntry, PSUEntryKind, PSUWriter, DIR_ID, FILE_ID, PSU}; use serde::Deserialize; +use std::collections::HashSet; use std::path::{Path, PathBuf}; use std::time::{SystemTime, UNIX_EPOCH}; @@ -65,15 +66,11 @@ pub fn pack_with_config(folder: &Path, output: &Path, cfg: Config) -> Result<(), return Err(Error::NameError); } - if include.is_some() && exclude.is_some() { - return Err(Error::IncludeExcludeError); - } - let mut psu = PSU::default(); - let files = if let Some(include) = include { + let raw_included_files = if let Some(include) = include { include - .iter() + .into_iter() .filter_map(|file| { if file.contains(|c| matches!(c, '\\' | '/')) { eprintln!( @@ -83,28 +80,19 @@ pub fn pack_with_config(folder: &Path, output: &Path, cfg: Config) -> Result<(), "exists in subfolder, skipping".dimmed() ); None - } else if !folder.join(file).exists() { - eprintln!( - "{} {} {}", - "File".dimmed(), - file.dimmed(), - "does not exist, skipping".dimmed() - ); - None } else { - Some(folder.join(file)) - } - }) - .collect::>() - } else if let Some(exclude) = exclude { - std::fs::read_dir(folder)? - .into_iter() - .flatten() - .filter_map(|d| { - if !exclude.contains(&d.file_name().to_str().unwrap().to_string()) { - Some(d.path()) - } else { - None + let candidate = folder.join(&file); + if !candidate.exists() { + eprintln!( + "{} {} {}", + "File".dimmed(), + file.dimmed(), + "does not exist, skipping".dimmed() + ); + None + } else { + Some(candidate) + } } }) .collect::>() @@ -115,7 +103,50 @@ pub fn pack_with_config(folder: &Path, output: &Path, cfg: Config) -> Result<(), .map(|d| d.path()) .collect::>() }; - let files = filter_files(&files); + + let mut files = filter_files(&raw_included_files); + + if let Some(exclude) = exclude { + let mut exclude_set = HashSet::new(); + + for file in exclude { + if file.contains(|c| matches!(c, '\\' | '/')) { + eprintln!( + "{} {} {}", + "File".dimmed(), + file.dimmed(), + "exists in subfolder, skipping exclude".dimmed() + ); + continue; + } + + let candidate = folder.join(&file); + if !candidate.exists() { + eprintln!( + "{} {} {}", + "File".dimmed(), + file.dimmed(), + "does not exist, skipping exclude".dimmed() + ); + continue; + } + + exclude_set.insert(file); + } + + if !exclude_set.is_empty() { + files = files + .into_iter() + .filter(|path| { + path.file_name() + .and_then(|name| name.to_str()) + .map(|name| !exclude_set.contains(name)) + .unwrap_or(true) + }) + .collect::>(); + } + } + add_psu_defaults(&mut psu, &name, files.len(), timestamp.unwrap_or_default()); add_files_to_psu(&mut psu, &files)?; std::fs::write(output, PSUWriter::new(psu).to_bytes()?)?; @@ -218,7 +249,6 @@ fn convert_timestamp(time: SystemTime) -> NaiveDateTime { pub enum Error { NameError, IOError(std::io::Error), - IncludeExcludeError, ConfigError(String), } @@ -226,7 +256,6 @@ impl std::fmt::Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { match self { Error::NameError => write!(f, "Name must match [a-zA-Z0-9._-\\s]+"), - Error::IncludeExcludeError => write!(f, "Exclude cannot be used in include mode"), Error::IOError(err) => write!(f, "{err:?}"), Error::ConfigError(err) => write!(f, "{err}"), } From b77dfcaa4bf3b7b033b42d78e59bb48006b68403 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 20:48:52 -0700 Subject: [PATCH 022/118] Replace README GUI screenshot with text description --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 5d71b5f..5e8d7f4 100644 --- a/Readme.md +++ b/Readme.md @@ -1,4 +1,4 @@ -image +**PSU Packer GUI overview:** The application presents a straightforward window for selecting PSU source folders, configuring metadata, and packing archives without needing to use the command line. ***This fork of the original project simply intends to add a simple gui to the existing progress of the project. Nothing fancy or pretty, but should work good for those who don't like to use terminals.*** *This fork only addresses the PSU packer, and not the other featured programs of the repo. Only windows has been tested.* From 0a46f19f1b5e04646e21de0ebde3c1238f1201bf Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 21:00:09 -0700 Subject: [PATCH 023/118] Remove binary screenshot and update documentation --- Readme.md | 41 +++ crates/psu-packer-gui/src/main.rs | 148 +++++++++++ crates/psu-packer/src/lib.rs | 399 +++++++++++++++++++++++++++++- 3 files changed, 579 insertions(+), 9 deletions(-) diff --git a/Readme.md b/Readme.md index 5d71b5f..75174b0 100644 --- a/Readme.md +++ b/Readme.md @@ -27,6 +27,47 @@ Graphical interface for packing PSU archives. Run with: cargo run -p psu-packer-gui ``` +### Configuring icon.sys metadata + +`psu-packer` now understands an optional `[icon_sys]` table inside `psu.toml`. When the table is present—or when the GUI toggle is enabled—the packer regenerates `icon.sys` before packaging and automatically includes it even if the file is missing from the `include` list. + +#### Example `psu.toml` + +```toml +[config] +name = "Example Save" +timestamp = "2024-10-10 10:30:00" +include = ["BOOT.ELF", "TITLE.DB"] + +[icon_sys] +flags = "PS2 Save File" +title = "Example Save" +background_transparency = 0 +background_colors = [ + { r = 0, g = 32, b = 96, a = 0 }, + { r = 0, g = 48, b = 128, a = 0 }, + { r = 0, g = 64, b = 160, a = 0 }, + { r = 0, g = 16, b = 48, a = 0 }, +] +light_directions = [ + { x = 0.0, y = 0.0, z = 1.0, w = 0.0 }, + { x = -0.5, y = -0.5, z = 0.5, w = 0.0 }, + { x = 0.5, y = -0.5, z = 0.5, w = 0.0 }, +] +light_colors = [ + { r = 1.0, g = 1.0, b = 1.0, a = 1.0 }, + { r = 0.5, g = 0.5, b = 0.6, a = 1.0 }, + { r = 0.3, g = 0.3, b = 0.4, a = 1.0 }, +] +ambient_color = { r = 0.2, g = 0.2, b = 0.2, a = 1.0 } +``` + +* `flags` accepts either a numeric value or one of the descriptive names from the GUI drop-down (for example `"PS2 Save File"`, `"Software (PS2)"`, or `"System Driver"`). +* `background_colors` must contain exactly four entries; `light_directions` and `light_colors` expect three entries each. Omit these arrays to keep the defaults. +* `ambient_color` and `background_transparency` are optional—leave them out to rely on the standard lighting values bundled with the packer. + +The GUI mirrors the same settings so you can preview and persist changes without touching the TOML by hand. + ## Credits Icon & UI Design by [@Berion](https://www.psx-place.com/members/berion.1431/) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 0c79098..41cd8ad 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -6,6 +6,20 @@ use ps2_filetypes::{PSUEntryKind, PSU}; use std::path::{Path, PathBuf}; const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; +const ICON_SYS_FLAG_OPTIONS: &[(u16, &str)] = &[ + (0, "PS2 Save File"), + (1, "Software (PS2)"), + (2, "Unrecognized (0x02)"), + (3, "Software (Pocketstation)"), + (4, "Settings (PS2)"), + (5, "System Driver"), +]; + +#[derive(Clone, Copy, PartialEq, Eq)] +enum IconFlagSelection { + Preset(usize), + Custom, +} struct PackerApp { folder: Option, @@ -22,6 +36,10 @@ struct PackerApp { loaded_psu_files: Vec, show_exit_confirm: bool, source_present_last_frame: bool, + icon_sys_enabled: bool, + icon_sys_title: String, + icon_sys_flag_selection: IconFlagSelection, + icon_sys_custom_flag: u16, } #[derive(Copy, Clone)] @@ -91,6 +109,10 @@ impl Default for PackerApp { loaded_psu_files: Vec::new(), show_exit_confirm: false, source_present_last_frame: false, + icon_sys_enabled: false, + icon_sys_title: String::new(), + icon_sys_flag_selection: IconFlagSelection::Preset(0), + icon_sys_custom_flag: ICON_SYS_FLAG_OPTIONS[0].0, } } } @@ -124,6 +146,13 @@ impl PackerApp { self.error_message = None; } + fn reset_icon_sys_fields(&mut self) { + self.icon_sys_enabled = false; + self.icon_sys_title.clear(); + self.icon_sys_flag_selection = IconFlagSelection::Preset(0); + self.icon_sys_custom_flag = ICON_SYS_FLAG_OPTIONS[0].0; + } + fn reset_metadata_fields(&mut self) { self.name.clear(); self.timestamp.clear(); @@ -131,6 +160,29 @@ impl PackerApp { self.exclude_files.clear(); self.selected_include = None; self.selected_exclude = None; + self.reset_icon_sys_fields(); + } + + fn icon_flag_label(&self) -> String { + match self.icon_sys_flag_selection { + IconFlagSelection::Preset(index) => ICON_SYS_FLAG_OPTIONS + .get(index) + .map(|(_, label)| (*label).to_string()) + .unwrap_or_else(|| format!("Preset {index}")), + IconFlagSelection::Custom => { + format!("Custom (0x{:04X})", self.icon_sys_custom_flag) + } + } + } + + fn selected_icon_flag_value(&self) -> Result { + match self.icon_sys_flag_selection { + IconFlagSelection::Preset(index) => ICON_SYS_FLAG_OPTIONS + .get(index) + .map(|(value, _)| *value) + .ok_or_else(|| "Invalid icon.sys flag selection".to_string()), + IconFlagSelection::Custom => Ok(self.icon_sys_custom_flag), + } } fn missing_include_files(&self, folder: &Path) -> Vec { @@ -210,6 +262,7 @@ impl PackerApp { self.exclude_files.clear(); self.selected_include = None; self.selected_exclude = None; + self.reset_icon_sys_fields(); if self.output.trim().is_empty() { self.output = path.display().to_string(); @@ -377,11 +430,33 @@ impl PackerApp { Some(self.exclude_files.clone()) }; + let icon_sys = if self.icon_sys_enabled { + let title = self.icon_sys_title.trim(); + if title.is_empty() { + return Err("Icon.sys title cannot be empty when enabled".to_string()); + } + + let flag_value = self.selected_icon_flag_value()?; + + Some(psu_packer::IconSysConfig { + flags: psu_packer::IconSysFlags::new(flag_value), + title: title.to_string(), + background_transparency: None, + background_colors: None, + light_directions: None, + light_colors: None, + ambient_color: None, + }) + } else { + None + }; + Ok(psu_packer::Config { name: self.name.clone(), timestamp, include, exclude, + icon_sys, }) } @@ -524,6 +599,7 @@ impl eframe::App for PackerApp { timestamp, include, exclude, + icon_sys, } = config; self.output = format!("{}.psu", name); @@ -535,6 +611,26 @@ impl eframe::App for PackerApp { self.exclude_files = exclude.unwrap_or_default(); self.selected_include = None; self.selected_exclude = None; + if let Some(icon_cfg) = icon_sys { + let psu_packer::IconSysConfig { flags, title, .. } = + icon_cfg; + let flag_value = flags.value(); + self.icon_sys_enabled = true; + self.icon_sys_title = title; + self.icon_sys_custom_flag = flag_value; + if let Some(index) = ICON_SYS_FLAG_OPTIONS + .iter() + .position(|(value, _)| *value == flag_value) + { + self.icon_sys_flag_selection = + IconFlagSelection::Preset(index); + } else { + self.icon_sys_flag_selection = + IconFlagSelection::Custom; + } + } else { + self.reset_icon_sys_fields(); + } self.clear_error_message(); self.status.clear(); } @@ -548,6 +644,7 @@ impl eframe::App for PackerApp { self.exclude_files.clear(); self.selected_include = None; self.selected_exclude = None; + self.reset_icon_sys_fields(); } } self.loaded_psu_path = None; @@ -605,6 +702,57 @@ impl eframe::App for PackerApp { .hint_text(TIMESTAMP_FORMAT), ); ui.end_row(); + + ui.label("Icon.sys"); + let checkbox = ui + .checkbox(&mut self.icon_sys_enabled, "Generate icon.sys metadata"); + checkbox.on_hover_text( + "Automatically create or update icon.sys when packing.", + ); + ui.end_row(); + + ui.label("Icon title"); + ui.add_enabled( + self.icon_sys_enabled, + egui::TextEdit::singleline(&mut self.icon_sys_title), + ); + ui.end_row(); + + ui.label("Icon type"); + ui.add_enabled_ui(self.icon_sys_enabled, |ui| { + ui.horizontal(|ui| { + egui::ComboBox::from_id_source("icon_sys_flag_combo") + .selected_text(self.icon_flag_label()) + .show_ui(ui, |ui| { + for (idx, (_, label)) in + ICON_SYS_FLAG_OPTIONS.iter().enumerate() + { + ui.selectable_value( + &mut self.icon_sys_flag_selection, + IconFlagSelection::Preset(idx), + *label, + ); + } + ui.selectable_value( + &mut self.icon_sys_flag_selection, + IconFlagSelection::Custom, + "Custom…", + ); + }); + + if matches!( + self.icon_sys_flag_selection, + IconFlagSelection::Custom + ) { + ui.add( + egui::DragValue::new(&mut self.icon_sys_custom_flag) + .clamp_range(0.0..=u16::MAX as f64), + ); + ui.label(format!("0x{:04X}", self.icon_sys_custom_flag)); + } + }); + }); + ui.end_row(); }); }); diff --git a/crates/psu-packer/src/lib.rs b/crates/psu-packer/src/lib.rs index 42f1b5a..67970d1 100644 --- a/crates/psu-packer/src/lib.rs +++ b/crates/psu-packer/src/lib.rs @@ -1,18 +1,21 @@ use chrono::{DateTime, Local, NaiveDateTime}; use colored::Colorize; -use ps2_filetypes::{PSUEntry, PSUEntryKind, PSUWriter, DIR_ID, FILE_ID, PSU}; -use serde::Deserialize; +use ps2_filetypes::color::Color; +use ps2_filetypes::{ + ColorF, IconSys, PSUEntry, PSUEntryKind, PSUWriter, Vector, DIR_ID, FILE_ID, PSU, +}; +use serde::{Deserialize, Deserializer}; use std::collections::HashSet; use std::path::{Path, PathBuf}; use std::time::{SystemTime, UNIX_EPOCH}; -#[derive(Debug, Deserialize)] +#[derive(Debug)] pub struct Config { pub name: String, - #[serde(default, with = "date_format")] pub timestamp: Option, pub include: Option>, pub exclude: Option>, + pub icon_sys: Option, } mod date_format { @@ -37,16 +40,381 @@ mod date_format { #[derive(Debug, Deserialize)] struct ConfigFile { - config: Config, + config: ConfigSection, + #[serde(default)] + icon_sys: Option, +} + +#[derive(Debug, Deserialize)] +struct ConfigSection { + name: String, + #[serde(default, with = "date_format")] + timestamp: Option, + include: Option>, + exclude: Option>, +} + +impl From for Config { + fn from(file: ConfigFile) -> Self { + let ConfigFile { config, icon_sys } = file; + Self { + name: config.name, + timestamp: config.timestamp, + include: config.include, + exclude: config.exclude, + icon_sys, + } + } +} + +#[derive(Debug, Deserialize)] +pub struct IconSysConfig { + pub flags: IconSysFlags, + pub title: String, + #[serde(default)] + pub background_transparency: Option, + #[serde(default)] + pub background_colors: Option>, + #[serde(default)] + pub light_directions: Option>, + #[serde(default)] + pub light_colors: Option>, + #[serde(default)] + pub ambient_color: Option, } +impl IconSysConfig { + fn to_bytes(&self) -> Result, Error> { + let icon_sys = self.build_icon_sys()?; + icon_sys + .to_bytes() + .map_err(|err| Error::ConfigError(err.to_string())) + } + + fn build_icon_sys(&self) -> Result { + let mut background_colors = DEFAULT_BACKGROUND_COLORS; + if let Some(colors) = &self.background_colors { + if colors.len() != background_colors.len() { + return Err(Error::ConfigError(format!( + "icon_sys.background_colors must contain exactly {} entries", + background_colors.len() + ))); + } + + for (target, value) in background_colors.iter_mut().zip(colors.iter()) { + *target = (*value).into(); + } + } + + let mut light_directions = DEFAULT_LIGHT_DIRECTIONS; + if let Some(directions) = &self.light_directions { + if directions.len() != light_directions.len() { + return Err(Error::ConfigError(format!( + "icon_sys.light_directions must contain exactly {} entries", + light_directions.len() + ))); + } + + for (target, value) in light_directions.iter_mut().zip(directions.iter()) { + *target = (*value).into(); + } + } + + let mut light_colors = DEFAULT_LIGHT_COLORS; + if let Some(colors) = &self.light_colors { + if colors.len() != light_colors.len() { + return Err(Error::ConfigError(format!( + "icon_sys.light_colors must contain exactly {} entries", + light_colors.len() + ))); + } + + for (target, value) in light_colors.iter_mut().zip(colors.iter()) { + *target = (*value).into(); + } + } + + let ambient_color = self + .ambient_color + .map(|color| color.into()) + .unwrap_or(DEFAULT_AMBIENT_COLOR); + + let background_transparency = self + .background_transparency + .unwrap_or(DEFAULT_BACKGROUND_TRANSPARENCY); + + Ok(IconSys { + flags: self.flags.value(), + linebreak_pos: DEFAULT_LINEBREAK_POS, + background_transparency, + background_colors, + light_directions, + light_colors, + ambient_color, + title: self.title.clone(), + icon_file: ICON_FILE_NAME.to_string(), + icon_copy_file: ICON_FILE_NAME.to_string(), + icon_delete_file: ICON_FILE_NAME.to_string(), + }) + } +} + +#[derive(Debug, Deserialize, Clone, Copy)] +pub struct ColorConfig { + pub r: u8, + pub g: u8, + pub b: u8, + pub a: u8, +} + +impl From for Color { + fn from(value: ColorConfig) -> Self { + Color { + r: value.r, + g: value.g, + b: value.b, + a: value.a, + } + } +} + +#[derive(Debug, Deserialize, Clone, Copy)] +pub struct ColorFConfig { + pub r: f32, + pub g: f32, + pub b: f32, + pub a: f32, +} + +impl From for ColorF { + fn from(value: ColorFConfig) -> Self { + ColorF { + r: value.r, + g: value.g, + b: value.b, + a: value.a, + } + } +} + +#[derive(Debug, Deserialize, Clone, Copy)] +pub struct VectorConfig { + pub x: f32, + pub y: f32, + pub z: f32, + pub w: f32, +} + +impl From for Vector { + fn from(value: VectorConfig) -> Self { + Vector { + x: value.x, + y: value.y, + z: value.z, + w: value.w, + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct IconSysFlags(u16); + +impl IconSysFlags { + pub const fn new(value: u16) -> Self { + Self(value) + } + + pub const fn value(self) -> u16 { + self.0 + } +} + +impl From for IconSysFlags { + fn from(value: u16) -> Self { + Self::new(value) + } +} + +impl From for u16 { + fn from(value: IconSysFlags) -> Self { + value.value() + } +} + +impl<'de> Deserialize<'de> for IconSysFlags { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct IconSysFlagsVisitor; + + impl<'de> serde::de::Visitor<'de> for IconSysFlagsVisitor { + type Value = IconSysFlags; + + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("an icon.sys flag value or descriptive name") + } + + fn visit_u64(self, value: u64) -> Result + where + E: serde::de::Error, + { + if value > u16::MAX as u64 { + return Err(E::custom("icon_sys.flags must be between 0 and 65535")); + } + Ok(IconSysFlags::new(value as u16)) + } + + fn visit_i64(self, value: i64) -> Result + where + E: serde::de::Error, + { + if !(0..=u16::MAX as i64).contains(&value) { + return Err(E::custom("icon_sys.flags must be between 0 and 65535")); + } + Ok(IconSysFlags::new(value as u16)) + } + + fn visit_str(self, value: &str) -> Result + where + E: serde::de::Error, + { + parse_flag_string(value) + .map(IconSysFlags::new) + .map_err(E::custom) + } + + fn visit_string(self, value: String) -> Result + where + E: serde::de::Error, + { + self.visit_str(&value) + } + } + + deserializer.deserialize_any(IconSysFlagsVisitor) + } +} + +fn parse_flag_string(value: &str) -> Result { + let trimmed = value.trim(); + if let Some(mapped) = parse_named_flag(trimmed) { + return Ok(mapped); + } + + if let Some(stripped) = trimmed + .strip_prefix("0x") + .or_else(|| trimmed.strip_prefix("0X")) + { + return u16::from_str_radix(stripped, 16) + .map_err(|_| format!("Invalid hexadecimal icon_sys flag: {trimmed}")); + } + + trimmed + .parse::() + .map_err(|_| format!("Invalid icon_sys flag value: {trimmed}")) +} + +fn parse_named_flag(value: &str) -> Option { + let normalized: String = value + .to_ascii_lowercase() + .chars() + .filter(|c| !c.is_ascii_whitespace() && *c != '_' && *c != '(' && *c != ')') + .collect(); + + match normalized.as_str() { + "ps2savefile" | "savefile" => Some(0), + "softwareps2" | "software" => Some(1), + "unrecognizeddata" | "unrecognized" | "data" => Some(2), + "softwarepocketstation" | "pocketstation" => Some(3), + "settingsps2" | "settings" => Some(4), + "systemdriver" | "driver" => Some(5), + _ => None, + } +} + +const DEFAULT_LINEBREAK_POS: u16 = 0; +const DEFAULT_BACKGROUND_TRANSPARENCY: u32 = 0; +const DEFAULT_BACKGROUND_COLORS: [Color; 4] = [ + Color { + r: 0, + g: 0, + b: 0, + a: 0, + }, + Color { + r: 0, + g: 0, + b: 0, + a: 0, + }, + Color { + r: 0, + g: 0, + b: 0, + a: 0, + }, + Color { + r: 0, + g: 0, + b: 0, + a: 0, + }, +]; +const DEFAULT_LIGHT_DIRECTIONS: [Vector; 3] = [ + Vector { + x: 0.0, + y: 0.0, + z: 1.0, + w: 0.0, + }, + Vector { + x: 0.0, + y: 0.0, + z: 1.0, + w: 0.0, + }, + Vector { + x: 0.0, + y: 0.0, + z: 1.0, + w: 0.0, + }, +]; +const DEFAULT_LIGHT_COLORS: [ColorF; 3] = [ + ColorF { + r: 1.0, + g: 1.0, + b: 1.0, + a: 1.0, + }, + ColorF { + r: 0.5, + g: 0.5, + b: 0.5, + a: 1.0, + }, + ColorF { + r: 0.3, + g: 0.3, + b: 0.3, + a: 1.0, + }, +]; +const DEFAULT_AMBIENT_COLOR: ColorF = ColorF { + r: 0.2, + g: 0.2, + b: 0.2, + a: 1.0, +}; +const ICON_FILE_NAME: &str = "icon.icn"; + pub fn load_config(folder: &Path) -> Result { let config_file = folder.join("psu.toml"); let str = std::fs::read_to_string(&config_file)?; - let config = toml::from_str::(&str) - .map_err(|e| Error::ConfigError(e.to_string()))? - .config; - Ok(config) + let config_file = + toml::from_str::(&str).map_err(|e| Error::ConfigError(e.to_string()))?; + Ok(config_file.into()) } pub fn pack_psu(folder: &Path, output: &Path) -> Result<(), Error> { @@ -60,6 +428,7 @@ pub fn pack_with_config(folder: &Path, output: &Path, cfg: Config) -> Result<(), timestamp, include, exclude, + icon_sys, } = cfg; if !check_name(&name) { @@ -68,6 +437,12 @@ pub fn pack_with_config(folder: &Path, output: &Path, cfg: Config) -> Result<(), let mut psu = PSU::default(); + let icon_sys_path = folder.join("icon.sys"); + if let Some(icon_config) = &icon_sys { + let bytes = icon_config.to_bytes()?; + std::fs::write(&icon_sys_path, bytes)?; + } + let raw_included_files = if let Some(include) = include { include .into_iter() @@ -147,6 +522,12 @@ pub fn pack_with_config(folder: &Path, output: &Path, cfg: Config) -> Result<(), } } + if icon_sys.is_some() { + if !files.iter().any(|path| path == &icon_sys_path) { + files.push(icon_sys_path); + } + } + add_psu_defaults(&mut psu, &name, files.len(), timestamp.unwrap_or_default()); add_files_to_psu(&mut psu, &files)?; std::fs::write(output, PSUWriter::new(psu).to_bytes()?)?; From 8adcb0603606d341196995aebcdd3a6ced726eaf Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 22:49:20 -0700 Subject: [PATCH 024/118] Refactor GUI into modular layout --- crates/psu-packer-gui/src/lib.rs | 237 +++++ crates/psu-packer-gui/src/main.rs | 896 +----------------- crates/psu-packer-gui/src/ui/dialogs.rs | 26 + crates/psu-packer-gui/src/ui/file_picker.rs | 211 +++++ crates/psu-packer-gui/src/ui/mod.rs | 3 + crates/psu-packer-gui/src/ui/pack_controls.rs | 457 +++++++++ 6 files changed, 935 insertions(+), 895 deletions(-) create mode 100644 crates/psu-packer-gui/src/lib.rs create mode 100644 crates/psu-packer-gui/src/ui/dialogs.rs create mode 100644 crates/psu-packer-gui/src/ui/file_picker.rs create mode 100644 crates/psu-packer-gui/src/ui/mod.rs create mode 100644 crates/psu-packer-gui/src/ui/pack_controls.rs diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs new file mode 100644 index 0000000..36f7bfd --- /dev/null +++ b/crates/psu-packer-gui/src/lib.rs @@ -0,0 +1,237 @@ +use std::path::{Path, PathBuf}; + +use eframe::egui; + +pub mod ui; + +pub use ui::{dialogs, file_picker, pack_controls}; + +pub(crate) const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; +pub(crate) const ICON_SYS_FLAG_OPTIONS: &[(u16, &str)] = &[ + (0, "PS2 Save File"), + (1, "Software (PS2)"), + (2, "Unrecognized (0x02)"), + (3, "Software (Pocketstation)"), + (4, "Settings (PS2)"), + (5, "System Driver"), +]; + +#[derive(Clone, Copy, PartialEq, Eq)] +pub(crate) enum IconFlagSelection { + Preset(usize), + Custom, +} + +pub struct PackerApp { + pub(crate) folder: Option, + pub(crate) output: String, + pub(crate) status: String, + pub(crate) error_message: Option, + pub(crate) name: String, + pub(crate) timestamp: String, + pub(crate) include_files: Vec, + pub(crate) exclude_files: Vec, + pub(crate) selected_include: Option, + pub(crate) selected_exclude: Option, + pub(crate) loaded_psu_path: Option, + pub(crate) loaded_psu_files: Vec, + pub(crate) show_exit_confirm: bool, + pub(crate) source_present_last_frame: bool, + pub(crate) icon_sys_enabled: bool, + pub(crate) icon_sys_title: String, + pub(crate) icon_sys_flag_selection: IconFlagSelection, + pub(crate) icon_sys_custom_flag: u16, +} + +struct ErrorMessage { + message: String, + failed_files: Vec, +} + +impl From for ErrorMessage { + fn from(message: String) -> Self { + Self { + message, + failed_files: Vec::new(), + } + } +} + +impl From<&str> for ErrorMessage { + fn from(message: &str) -> Self { + Self { + message: message.to_owned(), + failed_files: Vec::new(), + } + } +} + +impl From<(S, Vec)> for ErrorMessage +where + S: Into, +{ + fn from((message, failed_files): (S, Vec)) -> Self { + Self { + message: message.into(), + failed_files, + } + } +} + +impl Default for PackerApp { + fn default() -> Self { + Self { + folder: None, + output: String::new(), + status: String::new(), + error_message: None, + name: String::new(), + timestamp: String::new(), + include_files: Vec::new(), + exclude_files: Vec::new(), + selected_include: None, + selected_exclude: None, + loaded_psu_path: None, + loaded_psu_files: Vec::new(), + show_exit_confirm: false, + source_present_last_frame: false, + icon_sys_enabled: false, + icon_sys_title: String::new(), + icon_sys_flag_selection: IconFlagSelection::Preset(0), + icon_sys_custom_flag: ICON_SYS_FLAG_OPTIONS[0].0, + } + } +} + +impl PackerApp { + pub(crate) fn set_error_message(&mut self, message: M) + where + M: Into, + { + let message = message.into(); + let mut text = message.message; + if !message.failed_files.is_empty() { + if !text.is_empty() { + text.push(' '); + } + text.push_str("Failed files: "); + text.push_str(&message.failed_files.join(", ")); + } + self.error_message = Some(text); + self.status.clear(); + } + + pub(crate) fn clear_error_message(&mut self) { + self.error_message = None; + } + + pub(crate) fn reset_icon_sys_fields(&mut self) { + self.icon_sys_enabled = false; + self.icon_sys_title.clear(); + self.icon_sys_flag_selection = IconFlagSelection::Preset(0); + self.icon_sys_custom_flag = ICON_SYS_FLAG_OPTIONS[0].0; + } + + pub(crate) fn reset_metadata_fields(&mut self) { + self.name.clear(); + self.timestamp.clear(); + self.include_files.clear(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; + self.reset_icon_sys_fields(); + } + + pub(crate) fn icon_flag_label(&self) -> String { + match self.icon_sys_flag_selection { + IconFlagSelection::Preset(index) => ICON_SYS_FLAG_OPTIONS + .get(index) + .map(|(_, label)| (*label).to_string()) + .unwrap_or_else(|| format!("Preset {index}")), + IconFlagSelection::Custom => { + format!("Custom (0x{:04X})", self.icon_sys_custom_flag) + } + } + } + + pub(crate) fn selected_icon_flag_value(&self) -> Result { + match self.icon_sys_flag_selection { + IconFlagSelection::Preset(index) => ICON_SYS_FLAG_OPTIONS + .get(index) + .map(|(value, _)| *value) + .ok_or_else(|| "Invalid icon.sys flag selection".to_string()), + IconFlagSelection::Custom => Ok(self.icon_sys_custom_flag), + } + } + + pub(crate) fn missing_include_files(&self, folder: &Path) -> Vec { + if self.include_files.is_empty() { + return Vec::new(); + } + + self.include_files + .iter() + .filter_map(|file| { + let candidate = folder.join(file); + if candidate.is_file() { + None + } else { + Some(file.clone()) + } + }) + .collect() + } + + fn has_source(&self) -> bool { + self.folder.is_some() || self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty() + } + + fn showing_loaded_psu(&self) -> bool { + self.folder.is_none() + && (self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty()) + } +} + +impl eframe::App for PackerApp { + fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + let source_present = self.has_source(); + if !source_present && self.source_present_last_frame { + self.reset_metadata_fields(); + } + self.source_present_last_frame = source_present; + + egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { + egui::menu::bar(ui, |ui| { + ui::file_picker::file_menu(self, ui); + }); + }); + + egui::CentralPanel::default().show(ctx, |ui| { + egui::ScrollArea::vertical().show(ui, |ui| { + ui::file_picker::folder_section(self, ui); + + let showing_psu = self.showing_loaded_psu(); + if showing_psu { + ui.add_space(8.0); + ui::file_picker::loaded_psu_section(self, ui); + } + + ui.add_space(8.0); + ui::pack_controls::metadata_section(self, ui); + + if !showing_psu { + ui.add_space(8.0); + ui::pack_controls::file_filters_section(self, ui); + } + + ui.add_space(8.0); + ui::pack_controls::output_section(self, ui); + + ui.add_space(8.0); + ui::pack_controls::packaging_section(self, ui); + }); + }); + + ui::dialogs::exit_confirmation(self, ctx); + } +} diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 41cd8ad..329c592 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -1,900 +1,6 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -use chrono::NaiveDateTime; -use eframe::egui; -use ps2_filetypes::{PSUEntryKind, PSU}; -use std::path::{Path, PathBuf}; - -const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; -const ICON_SYS_FLAG_OPTIONS: &[(u16, &str)] = &[ - (0, "PS2 Save File"), - (1, "Software (PS2)"), - (2, "Unrecognized (0x02)"), - (3, "Software (Pocketstation)"), - (4, "Settings (PS2)"), - (5, "System Driver"), -]; - -#[derive(Clone, Copy, PartialEq, Eq)] -enum IconFlagSelection { - Preset(usize), - Custom, -} - -struct PackerApp { - folder: Option, - output: String, - status: String, - error_message: Option, - name: String, - timestamp: String, - include_files: Vec, - exclude_files: Vec, - selected_include: Option, - selected_exclude: Option, - loaded_psu_path: Option, - loaded_psu_files: Vec, - show_exit_confirm: bool, - source_present_last_frame: bool, - icon_sys_enabled: bool, - icon_sys_title: String, - icon_sys_flag_selection: IconFlagSelection, - icon_sys_custom_flag: u16, -} - -#[derive(Copy, Clone)] -enum ListKind { - Include, - Exclude, -} - -impl ListKind { - fn label(self) -> &'static str { - match self { - ListKind::Include => "Include files", - ListKind::Exclude => "Exclude files", - } - } -} - -struct ErrorMessage { - message: String, - failed_files: Vec, -} - -impl From for ErrorMessage { - fn from(message: String) -> Self { - Self { - message, - failed_files: Vec::new(), - } - } -} - -impl From<&str> for ErrorMessage { - fn from(message: &str) -> Self { - Self { - message: message.to_owned(), - failed_files: Vec::new(), - } - } -} - -impl From<(S, Vec)> for ErrorMessage -where - S: Into, -{ - fn from((message, failed_files): (S, Vec)) -> Self { - Self { - message: message.into(), - failed_files, - } - } -} - -impl Default for PackerApp { - fn default() -> Self { - Self { - folder: None, - output: String::new(), - status: String::new(), - error_message: None, - name: String::new(), - timestamp: String::new(), - include_files: Vec::new(), - exclude_files: Vec::new(), - selected_include: None, - selected_exclude: None, - loaded_psu_path: None, - loaded_psu_files: Vec::new(), - show_exit_confirm: false, - source_present_last_frame: false, - icon_sys_enabled: false, - icon_sys_title: String::new(), - icon_sys_flag_selection: IconFlagSelection::Preset(0), - icon_sys_custom_flag: ICON_SYS_FLAG_OPTIONS[0].0, - } - } -} - -impl PackerApp { - fn list_mut(&mut self, kind: ListKind) -> (&mut Vec, &mut Option) { - match kind { - ListKind::Include => (&mut self.include_files, &mut self.selected_include), - ListKind::Exclude => (&mut self.exclude_files, &mut self.selected_exclude), - } - } - - fn set_error_message(&mut self, message: M) - where - M: Into, - { - let message = message.into(); - let mut text = message.message; - if !message.failed_files.is_empty() { - if !text.is_empty() { - text.push(' '); - } - text.push_str("Failed files: "); - text.push_str(&message.failed_files.join(", ")); - } - self.error_message = Some(text); - self.status.clear(); - } - - fn clear_error_message(&mut self) { - self.error_message = None; - } - - fn reset_icon_sys_fields(&mut self) { - self.icon_sys_enabled = false; - self.icon_sys_title.clear(); - self.icon_sys_flag_selection = IconFlagSelection::Preset(0); - self.icon_sys_custom_flag = ICON_SYS_FLAG_OPTIONS[0].0; - } - - fn reset_metadata_fields(&mut self) { - self.name.clear(); - self.timestamp.clear(); - self.include_files.clear(); - self.exclude_files.clear(); - self.selected_include = None; - self.selected_exclude = None; - self.reset_icon_sys_fields(); - } - - fn icon_flag_label(&self) -> String { - match self.icon_sys_flag_selection { - IconFlagSelection::Preset(index) => ICON_SYS_FLAG_OPTIONS - .get(index) - .map(|(_, label)| (*label).to_string()) - .unwrap_or_else(|| format!("Preset {index}")), - IconFlagSelection::Custom => { - format!("Custom (0x{:04X})", self.icon_sys_custom_flag) - } - } - } - - fn selected_icon_flag_value(&self) -> Result { - match self.icon_sys_flag_selection { - IconFlagSelection::Preset(index) => ICON_SYS_FLAG_OPTIONS - .get(index) - .map(|(value, _)| *value) - .ok_or_else(|| "Invalid icon.sys flag selection".to_string()), - IconFlagSelection::Custom => Ok(self.icon_sys_custom_flag), - } - } - - fn missing_include_files(&self, folder: &Path) -> Vec { - if self.include_files.is_empty() { - return Vec::new(); - } - - self.include_files - .iter() - .filter_map(|file| { - let candidate = folder.join(file); - if candidate.is_file() { - None - } else { - Some(file.clone()) - } - }) - .collect() - } - - fn handle_open_psu(&mut self) { - let Some(path) = rfd::FileDialog::new() - .add_filter("PSU", &["psu"]) - .pick_file() - else { - return; - }; - - let data = match std::fs::read(&path) { - Ok(bytes) => bytes, - Err(err) => { - self.set_error_message(format!("Failed to read {}: {err}", path.display())); - return; - } - }; - - let parsed = match std::panic::catch_unwind(|| PSU::new(data)) { - Ok(psu) => psu, - Err(_) => { - self.set_error_message(format!("Failed to parse PSU file {}", path.display())); - return; - } - }; - - let entries = parsed.entries(); - let mut root_name: Option = None; - let mut root_timestamp = None; - let mut files = Vec::new(); - - for entry in &entries { - match entry.kind { - PSUEntryKind::Directory => { - if entry.name != "." && entry.name != ".." && root_name.is_none() { - root_name = Some(entry.name.clone()); - root_timestamp = Some(entry.created); - } - } - PSUEntryKind::File => files.push(entry.name.clone()), - } - } - - let Some(name) = root_name else { - self.set_error_message(format!("{} does not contain PSU metadata", path.display())); - return; - }; - - self.name = name; - self.timestamp = root_timestamp - .map(|ts| ts.format(TIMESTAMP_FORMAT).to_string()) - .unwrap_or_default(); - self.loaded_psu_files = files; - self.loaded_psu_path = Some(path.clone()); - self.clear_error_message(); - self.status = format!("Loaded PSU from {}", path.display()); - self.folder = None; - self.include_files.clear(); - self.exclude_files.clear(); - self.selected_include = None; - self.selected_exclude = None; - self.reset_icon_sys_fields(); - - if self.output.trim().is_empty() { - self.output = path.display().to_string(); - } - } - - fn browse_output_destination(&mut self) { - if let Some(file) = rfd::FileDialog::new() - .set_file_name(&self.output) - .save_file() - { - self.output = file.display().to_string(); - } - } - - fn format_load_error(folder: &Path, err: psu_packer::Error) -> String { - match err { - psu_packer::Error::NameError => { - "Configuration contains an invalid PSU name.".to_string() - } - psu_packer::Error::ConfigError(message) => { - format!("The psu.toml file is invalid: {message}") - } - psu_packer::Error::IOError(io_err) => { - let config_path = folder.join("psu.toml"); - match io_err.kind() { - std::io::ErrorKind::NotFound => format!( - "Could not find {}. Create a psu.toml file in the selected folder.", - config_path.display() - ), - _ => format!("Failed to read {}: {}", config_path.display(), io_err), - } - } - } - } - - fn format_pack_error( - &self, - folder: &Path, - output_path: &Path, - err: psu_packer::Error, - ) -> String { - match err { - psu_packer::Error::NameError => { - "PSU name can only contain letters, numbers, spaces, underscores, and hyphens." - .to_string() - } - psu_packer::Error::ConfigError(message) => { - format!("Configuration error: {message}") - } - psu_packer::Error::IOError(io_err) => { - let missing_files = self.missing_include_files(folder); - if !missing_files.is_empty() { - let formatted = missing_files - .into_iter() - .map(|name| format!("• {name}")) - .collect::>() - .join("\n"); - return format!( - "The following files referenced in the configuration are missing from {}:\n{}", - folder.display(), - formatted - ); - } - - match io_err.kind() { - std::io::ErrorKind::NotFound => { - if let Some(parent) = output_path.parent() { - if !parent.exists() { - return format!( - "Cannot write the PSU file because the destination folder {} does not exist.", - parent.display() - ); - } - } - format!("A required file or folder could not be found: {io_err}") - } - std::io::ErrorKind::PermissionDenied => { - format!("Permission denied while accessing the file system: {io_err}") - } - _ => format!("File system error: {io_err}"), - } - } - } - } - - fn file_list_ui( - ui: &mut egui::Ui, - label: &str, - files: &mut Vec, - selected: &mut Option, - ) -> (bool, bool) { - let mut add_clicked = false; - let mut remove_clicked = false; - let has_selection = selected.is_some(); - - ui.horizontal(|ui| { - ui.label(label); - ui.add_space(ui.spacing().item_spacing.x); - - if ui - .add(egui::Button::new("➕").small()) - .on_hover_text("Add files from the selected folder to this list.") - .clicked() - { - add_clicked = true; - } - - if ui - .add_enabled(has_selection, egui::Button::new("➖").small()) - .on_hover_text("Remove the selected file from this list.") - .clicked() - { - remove_clicked = true; - } - }); - - egui::ScrollArea::vertical() - .max_height(150.0) - .show(ui, |ui| { - for (idx, file) in files.iter().enumerate() { - ui.horizontal(|ui| { - let is_selected = Some(idx) == *selected; - if ui.selectable_label(is_selected, file).clicked() { - *selected = Some(idx); - } - - ui.add_space(ui.spacing().item_spacing.x); - - if ui - .small_button("✖") - .on_hover_text("Remove this file from the list.") - .clicked() - { - *selected = Some(idx); - remove_clicked = true; - } - }); - } - }); - - (add_clicked, remove_clicked) - } - - fn build_config(&self) -> Result { - let timestamp = self.timestamp.trim(); - let timestamp = if timestamp.is_empty() { - None - } else { - Some( - NaiveDateTime::parse_from_str(timestamp, TIMESTAMP_FORMAT) - .map_err(|e| format!("Invalid timestamp: {e}"))?, - ) - }; - - let include = if self.include_files.is_empty() { - None - } else { - Some(self.include_files.clone()) - }; - - let exclude = if self.exclude_files.is_empty() { - None - } else { - Some(self.exclude_files.clone()) - }; - - let icon_sys = if self.icon_sys_enabled { - let title = self.icon_sys_title.trim(); - if title.is_empty() { - return Err("Icon.sys title cannot be empty when enabled".to_string()); - } - - let flag_value = self.selected_icon_flag_value()?; - - Some(psu_packer::IconSysConfig { - flags: psu_packer::IconSysFlags::new(flag_value), - title: title.to_string(), - background_transparency: None, - background_colors: None, - light_directions: None, - light_colors: None, - ambient_color: None, - }) - } else { - None - }; - - Ok(psu_packer::Config { - name: self.name.clone(), - timestamp, - include, - exclude, - icon_sys, - }) - } - - fn handle_add_file(&mut self, kind: ListKind) { - let Some(folder) = self.folder.clone() else { - self.set_error_message("Please select a folder before adding files"); - return; - }; - - let list_label = kind.label(); - let (files, selected) = self.list_mut(kind); - - let Some(paths) = rfd::FileDialog::new().set_directory(&folder).pick_files() else { - return; - }; - - if paths.is_empty() { - return; - } - - let mut invalid_entries = Vec::new(); - let mut last_added = None; - - for path in paths { - let Ok(relative) = path.strip_prefix(&folder) else { - invalid_entries.push(format!( - "{} (must be in the selected folder)", - path.display() - )); - continue; - }; - - if relative.components().count() != 1 { - invalid_entries.push(format!( - "{} (must be in the selected folder)", - path.display() - )); - continue; - } - - let Some(name) = path.file_name().and_then(|n| n.to_str()) else { - invalid_entries.push(format!("{} (invalid file name)", path.display())); - continue; - }; - - let name = name.to_string(); - - if files.iter().any(|entry| entry == &name) { - invalid_entries.push(format!("{name} (already listed)")); - continue; - } - - files.push(name); - last_added = Some(files.len() - 1); - } - - if let Some(index) = last_added { - *selected = Some(index); - } - - if invalid_entries.is_empty() { - if last_added.is_some() { - self.clear_error_message(); - self.status.clear(); - } - } else { - let message = format!("Some files could not be added to the {list_label} list"); - self.set_error_message((message, invalid_entries)); - } - } - - fn handle_remove_file(&mut self, kind: ListKind) { - let (files, selected) = self.list_mut(kind); - if let Some(idx) = selected.take() { - files.remove(idx); - if files.is_empty() { - *selected = None; - } else if idx >= files.len() { - *selected = Some(files.len() - 1); - } else { - *selected = Some(idx); - } - } - } -} - -impl eframe::App for PackerApp { - fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { - let source_present = self.folder.is_some() - || self.loaded_psu_path.is_some() - || !self.loaded_psu_files.is_empty(); - - if !source_present && self.source_present_last_frame { - self.reset_metadata_fields(); - } - - self.source_present_last_frame = source_present; - - egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { - egui::menu::bar(ui, |ui| { - ui.menu_button("File", |ui| { - if ui.button("Save PSU As...").clicked() { - self.browse_output_destination(); - ui.close_menu(); - } - - if ui.button("Open PSU...").clicked() { - self.handle_open_psu(); - ui.close_menu(); - } - - ui.separator(); - - if ui.button("Exit").clicked() { - self.show_exit_confirm = true; - ui.close_menu(); - } - }); - }); - }); - - egui::CentralPanel::default().show(ctx, |ui| { - egui::ScrollArea::vertical().show(ui, |ui| { - ui.group(|ui| { - ui.heading("Folder"); - ui.small("Select the PSU project folder containing psu.toml."); - ui.horizontal(|ui| { - if ui - .button("Select folder") - .on_hover_text( - "Pick the source directory to load configuration values.", - ) - .clicked() - { - if let Some(dir) = rfd::FileDialog::new().pick_folder() { - match psu_packer::load_config(&dir) { - Ok(config) => { - let psu_packer::Config { - name, - timestamp, - include, - exclude, - icon_sys, - } = config; - - self.output = format!("{}.psu", name); - self.name = name; - self.timestamp = timestamp - .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) - .unwrap_or_default(); - self.include_files = include.unwrap_or_default(); - self.exclude_files = exclude.unwrap_or_default(); - self.selected_include = None; - self.selected_exclude = None; - if let Some(icon_cfg) = icon_sys { - let psu_packer::IconSysConfig { flags, title, .. } = - icon_cfg; - let flag_value = flags.value(); - self.icon_sys_enabled = true; - self.icon_sys_title = title; - self.icon_sys_custom_flag = flag_value; - if let Some(index) = ICON_SYS_FLAG_OPTIONS - .iter() - .position(|(value, _)| *value == flag_value) - { - self.icon_sys_flag_selection = - IconFlagSelection::Preset(index); - } else { - self.icon_sys_flag_selection = - IconFlagSelection::Custom; - } - } else { - self.reset_icon_sys_fields(); - } - self.clear_error_message(); - self.status.clear(); - } - Err(err) => { - let message = PackerApp::format_load_error(&dir, err); - self.set_error_message(message); - self.output.clear(); - self.name.clear(); - self.timestamp.clear(); - self.include_files.clear(); - self.exclude_files.clear(); - self.selected_include = None; - self.selected_exclude = None; - self.reset_icon_sys_fields(); - } - } - self.loaded_psu_path = None; - self.loaded_psu_files.clear(); - self.folder = Some(dir); - } - } - }); - - if let Some(folder) = &self.folder { - ui.label(format!("Folder: {}", folder.display())); - } - }); - - let showing_psu = self.folder.is_none() - && (self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty()); - - if showing_psu { - ui.add_space(8.0); - ui.group(|ui| { - ui.heading("Loaded PSU"); - ui.small("Review the files discovered in the opened PSU archive."); - if let Some(path) = &self.loaded_psu_path { - ui.label(format!("File: {}", path.display())); - } - egui::ScrollArea::vertical() - .max_height(150.0) - .show(ui, |ui| { - if self.loaded_psu_files.is_empty() { - ui.label("The archive does not contain any files."); - } else { - for file in &self.loaded_psu_files { - ui.label(file); - } - } - }); - }); - } - - ui.add_space(8.0); - ui.group(|ui| { - ui.heading("Metadata"); - ui.small("Edit PSU metadata before or after selecting a folder."); - egui::Grid::new("metadata_grid") - .num_columns(2) - .spacing(egui::vec2(12.0, 6.0)) - .show(ui, |ui| { - ui.label("Name"); - ui.text_edit_singleline(&mut self.name); - ui.end_row(); - - ui.label("Timestamp"); - ui.add( - egui::TextEdit::singleline(&mut self.timestamp) - .hint_text(TIMESTAMP_FORMAT), - ); - ui.end_row(); - - ui.label("Icon.sys"); - let checkbox = ui - .checkbox(&mut self.icon_sys_enabled, "Generate icon.sys metadata"); - checkbox.on_hover_text( - "Automatically create or update icon.sys when packing.", - ); - ui.end_row(); - - ui.label("Icon title"); - ui.add_enabled( - self.icon_sys_enabled, - egui::TextEdit::singleline(&mut self.icon_sys_title), - ); - ui.end_row(); - - ui.label("Icon type"); - ui.add_enabled_ui(self.icon_sys_enabled, |ui| { - ui.horizontal(|ui| { - egui::ComboBox::from_id_source("icon_sys_flag_combo") - .selected_text(self.icon_flag_label()) - .show_ui(ui, |ui| { - for (idx, (_, label)) in - ICON_SYS_FLAG_OPTIONS.iter().enumerate() - { - ui.selectable_value( - &mut self.icon_sys_flag_selection, - IconFlagSelection::Preset(idx), - *label, - ); - } - ui.selectable_value( - &mut self.icon_sys_flag_selection, - IconFlagSelection::Custom, - "Custom…", - ); - }); - - if matches!( - self.icon_sys_flag_selection, - IconFlagSelection::Custom - ) { - ui.add( - egui::DragValue::new(&mut self.icon_sys_custom_flag) - .clamp_range(0.0..=u16::MAX as f64), - ); - ui.label(format!("0x{:04X}", self.icon_sys_custom_flag)); - } - }); - }); - ui.end_row(); - }); - }); - - if !showing_psu { - ui.add_space(8.0); - - ui.group(|ui| { - ui.heading("File filters"); - ui.small( - "Manage which files to include or exclude before creating the archive.", - ); - if self.folder.is_some() { - ui.columns(2, |columns| { - let (include_add, include_remove) = Self::file_list_ui( - &mut columns[0], - ListKind::Include.label(), - &mut self.include_files, - &mut self.selected_include, - ); - if include_add { - self.handle_add_file(ListKind::Include); - } - if include_remove { - self.handle_remove_file(ListKind::Include); - } - - let (exclude_add, exclude_remove) = Self::file_list_ui( - &mut columns[1], - ListKind::Exclude.label(), - &mut self.exclude_files, - &mut self.selected_exclude, - ); - if exclude_add { - self.handle_add_file(ListKind::Exclude); - } - if exclude_remove { - self.handle_remove_file(ListKind::Exclude); - } - }); - } else { - ui.label("Select a folder to configure file filters."); - } - }); - } - - ui.add_space(8.0); - - ui.group(|ui| { - ui.heading("Output"); - ui.small("Choose where the packed PSU file will be saved."); - egui::Grid::new("output_grid") - .num_columns(2) - .spacing(egui::vec2(12.0, 6.0)) - .show(ui, |ui| { - ui.label("File path"); - ui.text_edit_singleline(&mut self.output); - ui.end_row(); - - ui.label(""); - if ui - .button("Browse") - .on_hover_text("Set a custom destination for the PSU file.") - .clicked() - { - self.browse_output_destination(); - } - ui.end_row(); - }); - }); - - ui.add_space(8.0); - - ui.group(|ui| { - ui.heading("Packaging"); - ui.small("Validate the configuration and generate the PSU archive."); - if ui - .button("Pack") - .on_hover_text("Create the PSU archive using the settings above.") - .clicked() - { - if let Some(folder) = &self.folder { - if self.name.trim().is_empty() { - self.set_error_message("Please provide a PSU name"); - return; - } - - let config = match self.build_config() { - Ok(config) => config, - Err(err) => { - self.set_error_message(err); - return; - } - }; - - let output_path = PathBuf::from(&self.output); - match psu_packer::pack_with_config(folder, &output_path, config) { - Ok(_) => { - self.status = format!("Packed to {}", output_path.display()); - self.clear_error_message(); - } - Err(err) => { - let message = self.format_pack_error(folder, &output_path, err); - self.set_error_message(message); - } - } - } else { - self.set_error_message("Please select a folder"); - } - } - - if let Some(error) = &self.error_message { - ui.colored_label(egui::Color32::RED, error); - } - if !self.status.is_empty() { - ui.label(&self.status); - } - }); - }); - }); - - if self.show_exit_confirm { - egui::Window::new("Confirm Exit") - .collapsible(false) - .resizable(false) - .show(ctx, |ui| { - ui.label("Are you sure you want to exit?"); - ui.add_space(8.0); - ui.horizontal(|ui| { - let yes_clicked = ui.button("Yes").clicked(); - let no_clicked = ui.button("No").clicked(); - - if yes_clicked { - self.show_exit_confirm = false; - ctx.send_viewport_cmd(egui::ViewportCommand::Close); - } else if no_clicked { - self.show_exit_confirm = false; - } - }); - }); - } - } -} +use psu_packer_gui::PackerApp; fn main() -> eframe::Result<()> { let options = eframe::NativeOptions::default(); diff --git a/crates/psu-packer-gui/src/ui/dialogs.rs b/crates/psu-packer-gui/src/ui/dialogs.rs new file mode 100644 index 0000000..26f7bc9 --- /dev/null +++ b/crates/psu-packer-gui/src/ui/dialogs.rs @@ -0,0 +1,26 @@ +use eframe::egui; + +use crate::PackerApp; + +pub(crate) fn exit_confirmation(app: &mut PackerApp, ctx: &egui::Context) { + if app.show_exit_confirm { + egui::Window::new("Confirm Exit") + .collapsible(false) + .resizable(false) + .show(ctx, |ui| { + ui.label("Are you sure you want to exit?"); + ui.add_space(8.0); + ui.horizontal(|ui| { + let yes_clicked = ui.button("Yes").clicked(); + let no_clicked = ui.button("No").clicked(); + + if yes_clicked { + app.show_exit_confirm = false; + ctx.send_viewport_cmd(egui::ViewportCommand::Close); + } else if no_clicked { + app.show_exit_confirm = false; + } + }); + }); + } +} diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs new file mode 100644 index 0000000..1c29182 --- /dev/null +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -0,0 +1,211 @@ +use std::path::Path; + +use eframe::egui; +use ps2_filetypes::{PSUEntryKind, PSU}; + +use crate::{IconFlagSelection, PackerApp, ICON_SYS_FLAG_OPTIONS, TIMESTAMP_FORMAT}; + +pub(crate) fn file_menu(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.menu_button("File", |ui| { + if ui.button("Save PSU As...").clicked() { + app.browse_output_destination(); + ui.close_menu(); + } + + if ui.button("Open PSU...").clicked() { + app.handle_open_psu(); + ui.close_menu(); + } + + ui.separator(); + + if ui.button("Exit").clicked() { + app.show_exit_confirm = true; + ui.close_menu(); + } + }); +} + +pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Folder"); + ui.small("Select the PSU project folder containing psu.toml."); + ui.horizontal(|ui| { + if ui + .button("Select folder") + .on_hover_text("Pick the source directory to load configuration values.") + .clicked() + { + if let Some(dir) = rfd::FileDialog::new().pick_folder() { + match psu_packer::load_config(&dir) { + Ok(config) => { + let psu_packer::Config { + name, + timestamp, + include, + exclude, + icon_sys, + } = config; + + app.output = format!("{}.psu", name); + app.name = name; + app.timestamp = timestamp + .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) + .unwrap_or_default(); + app.include_files = include.unwrap_or_default(); + app.exclude_files = exclude.unwrap_or_default(); + app.selected_include = None; + app.selected_exclude = None; + if let Some(icon_cfg) = icon_sys { + let psu_packer::IconSysConfig { flags, title, .. } = icon_cfg; + let flag_value = flags.value(); + app.icon_sys_enabled = true; + app.icon_sys_title = title; + app.icon_sys_custom_flag = flag_value; + if let Some(index) = ICON_SYS_FLAG_OPTIONS + .iter() + .position(|(value, _)| *value == flag_value) + { + app.icon_sys_flag_selection = IconFlagSelection::Preset(index); + } else { + app.icon_sys_flag_selection = IconFlagSelection::Custom; + } + } else { + app.reset_icon_sys_fields(); + } + app.clear_error_message(); + app.status.clear(); + } + Err(err) => { + let message = format_load_error(&dir, err); + app.set_error_message(message); + app.output.clear(); + app.name.clear(); + app.timestamp.clear(); + app.include_files.clear(); + app.exclude_files.clear(); + app.selected_include = None; + app.selected_exclude = None; + app.reset_icon_sys_fields(); + } + } + app.loaded_psu_path = None; + app.loaded_psu_files.clear(); + app.folder = Some(dir); + } + } + }); + + if let Some(folder) = &app.folder { + ui.label(format!("Folder: {}", folder.display())); + } + }); +} + +pub(crate) fn loaded_psu_section(app: &PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Loaded PSU"); + ui.small("Review the files discovered in the opened PSU archive."); + if let Some(path) = &app.loaded_psu_path { + ui.label(format!("File: {}", path.display())); + } + egui::ScrollArea::vertical() + .max_height(150.0) + .show(ui, |ui| { + if app.loaded_psu_files.is_empty() { + ui.label("The archive does not contain any files."); + } else { + for file in &app.loaded_psu_files { + ui.label(file); + } + } + }); + }); +} + +impl PackerApp { + pub(crate) fn handle_open_psu(&mut self) { + let Some(path) = rfd::FileDialog::new() + .add_filter("PSU", &["psu"]) + .pick_file() + else { + return; + }; + + let data = match std::fs::read(&path) { + Ok(bytes) => bytes, + Err(err) => { + self.set_error_message(format!("Failed to read {}: {err}", path.display())); + return; + } + }; + + let parsed = match std::panic::catch_unwind(|| PSU::new(data)) { + Ok(psu) => psu, + Err(_) => { + self.set_error_message(format!("Failed to parse PSU file {}", path.display())); + return; + } + }; + + let entries = parsed.entries(); + let mut root_name: Option = None; + let mut root_timestamp = None; + let mut files = Vec::new(); + + for entry in &entries { + match entry.kind { + PSUEntryKind::Directory => { + if entry.name != "." && entry.name != ".." && root_name.is_none() { + root_name = Some(entry.name.clone()); + root_timestamp = Some(entry.created); + } + } + PSUEntryKind::File => files.push(entry.name.clone()), + } + } + + let Some(name) = root_name else { + self.set_error_message(format!("{} does not contain PSU metadata", path.display())); + return; + }; + + self.name = name; + self.timestamp = root_timestamp + .map(|ts| ts.format(TIMESTAMP_FORMAT).to_string()) + .unwrap_or_default(); + self.loaded_psu_files = files; + self.loaded_psu_path = Some(path.clone()); + self.clear_error_message(); + self.status = format!("Loaded PSU from {}", path.display()); + self.folder = None; + self.include_files.clear(); + self.exclude_files.clear(); + self.selected_include = None; + self.selected_exclude = None; + self.reset_icon_sys_fields(); + + if self.output.trim().is_empty() { + self.output = path.display().to_string(); + } + } +} + +fn format_load_error(folder: &Path, err: psu_packer::Error) -> String { + match err { + psu_packer::Error::NameError => "Configuration contains an invalid PSU name.".to_string(), + psu_packer::Error::ConfigError(message) => { + format!("The psu.toml file is invalid: {message}") + } + psu_packer::Error::IOError(io_err) => { + let config_path = folder.join("psu.toml"); + match io_err.kind() { + std::io::ErrorKind::NotFound => format!( + "Could not find {}. Create a psu.toml file in the selected folder.", + config_path.display() + ), + _ => format!("Failed to read {}: {}", config_path.display(), io_err), + } + } + } +} diff --git a/crates/psu-packer-gui/src/ui/mod.rs b/crates/psu-packer-gui/src/ui/mod.rs new file mode 100644 index 0000000..1dfeb78 --- /dev/null +++ b/crates/psu-packer-gui/src/ui/mod.rs @@ -0,0 +1,3 @@ +pub mod dialogs; +pub mod file_picker; +pub mod pack_controls; diff --git a/crates/psu-packer-gui/src/ui/pack_controls.rs b/crates/psu-packer-gui/src/ui/pack_controls.rs new file mode 100644 index 0000000..9d74d8c --- /dev/null +++ b/crates/psu-packer-gui/src/ui/pack_controls.rs @@ -0,0 +1,457 @@ +use std::path::{Path, PathBuf}; + +use chrono::NaiveDateTime; +use eframe::egui; + +use crate::{IconFlagSelection, PackerApp, TIMESTAMP_FORMAT}; + +pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Metadata"); + ui.small("Edit PSU metadata before or after selecting a folder."); + egui::Grid::new("metadata_grid") + .num_columns(2) + .spacing(egui::vec2(12.0, 6.0)) + .show(ui, |ui| { + ui.label("Name"); + ui.text_edit_singleline(&mut app.name); + ui.end_row(); + + ui.label("Timestamp"); + ui.add(egui::TextEdit::singleline(&mut app.timestamp).hint_text(TIMESTAMP_FORMAT)); + ui.end_row(); + + ui.label("Icon.sys"); + let checkbox = ui.checkbox(&mut app.icon_sys_enabled, "Generate icon.sys metadata"); + checkbox.on_hover_text("Automatically create or update icon.sys when packing."); + ui.end_row(); + + ui.label("Icon title"); + ui.add_enabled( + app.icon_sys_enabled, + egui::TextEdit::singleline(&mut app.icon_sys_title), + ); + ui.end_row(); + + ui.label("Icon type"); + ui.add_enabled_ui(app.icon_sys_enabled, |ui| { + ui.horizontal(|ui| { + egui::ComboBox::from_id_source("icon_sys_flag_combo") + .selected_text(app.icon_flag_label()) + .show_ui(ui, |ui| { + for (idx, (_, label)) in + crate::ICON_SYS_FLAG_OPTIONS.iter().enumerate() + { + ui.selectable_value( + &mut app.icon_sys_flag_selection, + IconFlagSelection::Preset(idx), + *label, + ); + } + ui.selectable_value( + &mut app.icon_sys_flag_selection, + IconFlagSelection::Custom, + "Custom…", + ); + }); + + if matches!(app.icon_sys_flag_selection, IconFlagSelection::Custom) { + ui.add( + egui::DragValue::new(&mut app.icon_sys_custom_flag) + .clamp_range(0.0..=u16::MAX as f64), + ); + ui.label(format!("0x{:04X}", app.icon_sys_custom_flag)); + } + }); + }); + ui.end_row(); + }); + }); +} + +pub(crate) fn file_filters_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("File filters"); + ui.small("Manage which files to include or exclude before creating the archive."); + if app.folder.is_some() { + ui.columns(2, |columns| { + let (include_add, include_remove) = file_list_ui( + &mut columns[0], + ListKind::Include.label(), + &mut app.include_files, + &mut app.selected_include, + ); + if include_add { + app.handle_add_file(ListKind::Include); + } + if include_remove { + app.handle_remove_file(ListKind::Include); + } + + let (exclude_add, exclude_remove) = file_list_ui( + &mut columns[1], + ListKind::Exclude.label(), + &mut app.exclude_files, + &mut app.selected_exclude, + ); + if exclude_add { + app.handle_add_file(ListKind::Exclude); + } + if exclude_remove { + app.handle_remove_file(ListKind::Exclude); + } + }); + } else { + ui.label("Select a folder to configure file filters."); + } + }); +} + +pub(crate) fn output_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Output"); + ui.small("Choose where the packed PSU file will be saved."); + egui::Grid::new("output_grid") + .num_columns(2) + .spacing(egui::vec2(12.0, 6.0)) + .show(ui, |ui| { + ui.label("File path"); + ui.text_edit_singleline(&mut app.output); + ui.end_row(); + + ui.label(""); + if ui + .button("Browse") + .on_hover_text("Set a custom destination for the PSU file.") + .clicked() + { + app.browse_output_destination(); + } + ui.end_row(); + }); + }); +} + +pub(crate) fn packaging_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Packaging"); + ui.small("Validate the configuration and generate the PSU archive."); + if ui + .button("Pack") + .on_hover_text("Create the PSU archive using the settings above.") + .clicked() + { + if let Some(folder) = &app.folder { + if app.name.trim().is_empty() { + app.set_error_message("Please provide a PSU name"); + return; + } + + let config = match app.build_config() { + Ok(config) => config, + Err(err) => { + app.set_error_message(err); + return; + } + }; + + let output_path = PathBuf::from(&app.output); + match psu_packer::pack_with_config(folder, &output_path, config) { + Ok(_) => { + app.status = format!("Packed to {}", output_path.display()); + app.clear_error_message(); + } + Err(err) => { + let message = app.format_pack_error(folder, &output_path, err); + app.set_error_message(message); + } + } + } else { + app.set_error_message("Please select a folder"); + } + } + + if let Some(error) = &app.error_message { + ui.colored_label(egui::Color32::RED, error); + } + if !app.status.is_empty() { + ui.label(&app.status); + } + }); +} + +#[derive(Copy, Clone)] +pub(crate) enum ListKind { + Include, + Exclude, +} + +impl ListKind { + fn label(self) -> &'static str { + match self { + ListKind::Include => "Include files", + ListKind::Exclude => "Exclude files", + } + } +} + +fn file_list_ui( + ui: &mut egui::Ui, + label: &str, + files: &mut Vec, + selected: &mut Option, +) -> (bool, bool) { + let mut add_clicked = false; + let mut remove_clicked = false; + let has_selection = selected.is_some(); + + ui.horizontal(|ui| { + ui.label(label); + ui.add_space(ui.spacing().item_spacing.x); + + if ui + .add(egui::Button::new("➕").small()) + .on_hover_text("Add files from the selected folder to this list.") + .clicked() + { + add_clicked = true; + } + + if ui + .add_enabled(has_selection, egui::Button::new("➖").small()) + .on_hover_text("Remove the selected file from this list.") + .clicked() + { + remove_clicked = true; + } + }); + + egui::ScrollArea::vertical() + .max_height(150.0) + .show(ui, |ui| { + for (idx, file) in files.iter().enumerate() { + ui.horizontal(|ui| { + let is_selected = Some(idx) == *selected; + if ui.selectable_label(is_selected, file).clicked() { + *selected = Some(idx); + } + + ui.add_space(ui.spacing().item_spacing.x); + + if ui + .small_button("✖") + .on_hover_text("Remove this file from the list.") + .clicked() + { + *selected = Some(idx); + remove_clicked = true; + } + }); + } + }); + + (add_clicked, remove_clicked) +} + +impl PackerApp { + pub(crate) fn browse_output_destination(&mut self) { + if let Some(file) = rfd::FileDialog::new() + .set_file_name(&self.output) + .save_file() + { + self.output = file.display().to_string(); + } + } + + pub(crate) fn build_config(&self) -> Result { + let timestamp = self.timestamp.trim(); + let timestamp = if timestamp.is_empty() { + None + } else { + Some( + NaiveDateTime::parse_from_str(timestamp, TIMESTAMP_FORMAT) + .map_err(|e| format!("Invalid timestamp: {e}"))?, + ) + }; + + let include = if self.include_files.is_empty() { + None + } else { + Some(self.include_files.clone()) + }; + + let exclude = if self.exclude_files.is_empty() { + None + } else { + Some(self.exclude_files.clone()) + }; + + let icon_sys = if self.icon_sys_enabled { + let title = self.icon_sys_title.trim(); + if title.is_empty() { + return Err("Icon.sys title cannot be empty when enabled".to_string()); + } + + let flag_value = self.selected_icon_flag_value()?; + + Some(psu_packer::IconSysConfig { + flags: psu_packer::IconSysFlags::new(flag_value), + title: title.to_string(), + background_transparency: None, + background_colors: None, + light_directions: None, + light_colors: None, + ambient_color: None, + }) + } else { + None + }; + + Ok(psu_packer::Config { + name: self.name.clone(), + timestamp, + include, + exclude, + icon_sys, + }) + } + + pub(crate) fn format_pack_error( + &self, + folder: &Path, + output_path: &Path, + err: psu_packer::Error, + ) -> String { + match err { + psu_packer::Error::NameError => { + "PSU name can only contain letters, numbers, spaces, underscores, and hyphens." + .to_string() + } + psu_packer::Error::ConfigError(message) => { + format!("Configuration error: {message}") + } + psu_packer::Error::IOError(io_err) => { + let missing_files = self.missing_include_files(folder); + if !missing_files.is_empty() { + let formatted = missing_files + .into_iter() + .map(|name| format!("• {name}")) + .collect::>() + .join("\n"); + return format!( + "The following files referenced in the configuration are missing from {}:\n{}", + folder.display(), + formatted + ); + } + + match io_err.kind() { + std::io::ErrorKind::NotFound => { + if let Some(parent) = output_path.parent() { + if !parent.exists() { + return format!( + "Cannot write the PSU file because the destination folder {} does not exist.", + parent.display() + ); + } + } + format!("A required file or folder could not be found: {io_err}") + } + std::io::ErrorKind::PermissionDenied => { + format!("Permission denied while accessing the file system: {io_err}") + } + _ => format!("File system error: {io_err}"), + } + } + } + } + + pub(crate) fn handle_add_file(&mut self, kind: ListKind) { + let Some(folder) = self.folder.clone() else { + self.set_error_message("Please select a folder before adding files"); + return; + }; + + let list_label = kind.label(); + let (files, selected) = self.list_mut(kind); + + let Some(paths) = rfd::FileDialog::new().set_directory(&folder).pick_files() else { + return; + }; + + if paths.is_empty() { + return; + } + + let mut invalid_entries = Vec::new(); + let mut last_added = None; + + for path in paths { + let Ok(relative) = path.strip_prefix(&folder) else { + invalid_entries.push(format!( + "{} (must be in the selected folder)", + path.display() + )); + continue; + }; + + if relative.components().count() != 1 { + invalid_entries.push(format!( + "{} (must be in the selected folder)", + path.display() + )); + continue; + } + + let Some(name) = path.file_name().and_then(|n| n.to_str()) else { + invalid_entries.push(format!("{} (invalid file name)", path.display())); + continue; + }; + + let name = name.to_string(); + + if files.iter().any(|entry| entry == &name) { + invalid_entries.push(format!("{name} (already listed)")); + continue; + } + + files.push(name); + last_added = Some(files.len() - 1); + } + + if let Some(index) = last_added { + *selected = Some(index); + } + + if invalid_entries.is_empty() { + if last_added.is_some() { + self.clear_error_message(); + self.status.clear(); + } + } else { + let message = format!("Some files could not be added to the {list_label} list"); + self.set_error_message((message, invalid_entries)); + } + } + + pub(crate) fn handle_remove_file(&mut self, kind: ListKind) { + let (files, selected) = self.list_mut(kind); + if let Some(idx) = selected.take() { + files.remove(idx); + if files.is_empty() { + *selected = None; + } else if idx >= files.len() { + *selected = Some(files.len() - 1); + } else { + *selected = Some(idx); + } + } + } + + fn list_mut(&mut self, kind: ListKind) -> (&mut Vec, &mut Option) { + match kind { + ListKind::Include => (&mut self.include_files, &mut self.selected_include), + ListKind::Exclude => (&mut self.exclude_files, &mut self.selected_exclude), + } + } +} From 7ed943166d9f30fd04f9ed954777d0fa7b197878 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 23:03:43 -0700 Subject: [PATCH 025/118] Ensure PSU extension when selecting output --- crates/psu-packer-gui/src/ui/pack_controls.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/psu-packer-gui/src/ui/pack_controls.rs b/crates/psu-packer-gui/src/ui/pack_controls.rs index 9d74d8c..6558afd 100644 --- a/crates/psu-packer-gui/src/ui/pack_controls.rs +++ b/crates/psu-packer-gui/src/ui/pack_controls.rs @@ -255,10 +255,21 @@ fn file_list_ui( impl PackerApp { pub(crate) fn browse_output_destination(&mut self) { - if let Some(file) = rfd::FileDialog::new() + if let Some(mut file) = rfd::FileDialog::new() + .add_filter("PSU", &["psu"]) .set_file_name(&self.output) .save_file() { + let has_psu_extension = file + .extension() + .and_then(|ext| ext.to_str()) + .map(|ext| ext.eq_ignore_ascii_case("psu")) + .unwrap_or(false); + + if !has_psu_extension { + file.set_extension("psu"); + } + self.output = file.display().to_string(); } } From 21a9af44b21a6ea7e1fcccd22f7f20209be31788 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 23:18:08 -0700 Subject: [PATCH 026/118] Run packer on background thread with progress UI --- crates/psu-packer-gui/src/lib.rs | 166 +++++++++++++++++- crates/psu-packer-gui/src/ui/pack_controls.rs | 26 ++- 2 files changed, 176 insertions(+), 16 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 36f7bfd..9409ab6 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -1,4 +1,8 @@ -use std::path::{Path, PathBuf}; +use std::{ + path::{Path, PathBuf}, + sync::{Arc, Mutex}, + thread, +}; use eframe::egui; @@ -22,6 +26,27 @@ pub(crate) enum IconFlagSelection { Custom, } +struct PackJob { + progress: Arc>, + handle: Option>, +} + +enum PackProgress { + InProgress, + Finished(PackOutcome), +} + +enum PackOutcome { + Success { + output_path: PathBuf, + }, + Error { + folder: PathBuf, + output_path: PathBuf, + error: psu_packer::Error, + }, +} + pub struct PackerApp { pub(crate) folder: Option, pub(crate) output: String, @@ -41,6 +66,7 @@ pub struct PackerApp { pub(crate) icon_sys_title: String, pub(crate) icon_sys_flag_selection: IconFlagSelection, pub(crate) icon_sys_custom_flag: u16, + pack_job: Option, } struct ErrorMessage { @@ -99,6 +125,7 @@ impl Default for PackerApp { icon_sys_title: String::new(), icon_sys_flag_selection: IconFlagSelection::Preset(0), icon_sys_custom_flag: ICON_SYS_FLAG_OPTIONS[0].0, + pack_job: None, } } } @@ -190,16 +217,153 @@ impl PackerApp { self.folder.is_none() && (self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty()) } + + pub(crate) fn is_pack_running(&self) -> bool { + self.pack_job.is_some() + } + + pub(crate) fn start_pack_job( + &mut self, + folder: PathBuf, + output_path: PathBuf, + config: psu_packer::Config, + ) { + if self.pack_job.is_some() { + return; + } + + let progress = Arc::new(Mutex::new(PackProgress::InProgress)); + let thread_progress = Arc::clone(&progress); + + let handle = thread::spawn(move || { + let result = + psu_packer::pack_with_config(folder.as_path(), output_path.as_path(), config); + + let outcome = match result { + Ok(_) => PackOutcome::Success { + output_path: output_path.clone(), + }, + Err(error) => PackOutcome::Error { + folder: folder.clone(), + output_path: output_path.clone(), + error, + }, + }; + + let mut guard = thread_progress + .lock() + .unwrap_or_else(|poison| poison.into_inner()); + *guard = PackProgress::Finished(outcome); + }); + + self.status = "Packing…".to_string(); + self.clear_error_message(); + self.pack_job = Some(PackJob { + progress, + handle: Some(handle), + }); + } + + fn pack_progress_value(&self) -> Option { + let job = self.pack_job.as_ref()?; + let guard = job.progress.lock().ok()?; + Some(match &*guard { + PackProgress::InProgress => 0.0, + PackProgress::Finished(_) => 1.0, + }) + } + + fn poll_pack_job(&mut self) { + let Some(mut job) = self.pack_job.take() else { + return; + }; + + let outcome = match job.progress.lock() { + Ok(mut guard) => { + if let PackProgress::Finished(_) = &*guard { + if let PackProgress::Finished(outcome) = + std::mem::replace(&mut *guard, PackProgress::InProgress) + { + Some(outcome) + } else { + None + } + } else { + None + } + } + Err(poison) => { + let mut guard = poison.into_inner(); + if let PackProgress::Finished(_) = &*guard { + if let PackProgress::Finished(outcome) = + std::mem::replace(&mut *guard, PackProgress::InProgress) + { + Some(outcome) + } else { + None + } + } else { + None + } + } + }; + + if let Some(outcome) = outcome { + if let Some(handle) = job.handle.take() { + let _ = handle.join(); + } + + match outcome { + PackOutcome::Success { output_path } => { + self.status = format!("Packed to {}", output_path.display()); + self.clear_error_message(); + } + PackOutcome::Error { + folder, + output_path, + error, + } => { + let message = self.format_pack_error(&folder, &output_path, error); + self.set_error_message(message); + } + } + } else { + self.pack_job = Some(job); + } + } } impl eframe::App for PackerApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { + self.poll_pack_job(); + let source_present = self.has_source(); if !source_present && self.source_present_last_frame { self.reset_metadata_fields(); } self.source_present_last_frame = source_present; + if let Some(progress) = self.pack_progress_value() { + ctx.request_repaint(); + egui::Window::new("packing_progress") + .title_bar(false) + .collapsible(false) + .resizable(false) + .anchor(egui::Align2::CENTER_CENTER, egui::Vec2::ZERO) + .frame(egui::Frame::popup(&ctx.style())) + .show(ctx, |ui| { + ui.vertical_centered(|ui| { + ui.heading("Packing PSU…"); + ui.add_space(8.0); + ui.add( + egui::ProgressBar::new(progress) + .desired_width(200.0) + .animate(true), + ); + }); + }); + } + egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { egui::menu::bar(ui, |ui| { ui::file_picker::file_menu(self, ui); diff --git a/crates/psu-packer-gui/src/ui/pack_controls.rs b/crates/psu-packer-gui/src/ui/pack_controls.rs index 6558afd..ad3d46f 100644 --- a/crates/psu-packer-gui/src/ui/pack_controls.rs +++ b/crates/psu-packer-gui/src/ui/pack_controls.rs @@ -136,11 +136,12 @@ pub(crate) fn packaging_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.group(|ui| { ui.heading("Packaging"); ui.small("Validate the configuration and generate the PSU archive."); - if ui - .button("Pack") - .on_hover_text("Create the PSU archive using the settings above.") - .clicked() - { + let pack_in_progress = app.is_pack_running(); + let pack_button = ui + .add_enabled(!pack_in_progress, egui::Button::new("Pack")) + .on_hover_text("Create the PSU archive using the settings above."); + + if pack_button.clicked() { if let Some(folder) = &app.folder { if app.name.trim().is_empty() { app.set_error_message("Please provide a PSU name"); @@ -156,21 +157,16 @@ pub(crate) fn packaging_section(app: &mut PackerApp, ui: &mut egui::Ui) { }; let output_path = PathBuf::from(&app.output); - match psu_packer::pack_with_config(folder, &output_path, config) { - Ok(_) => { - app.status = format!("Packed to {}", output_path.display()); - app.clear_error_message(); - } - Err(err) => { - let message = app.format_pack_error(folder, &output_path, err); - app.set_error_message(message); - } - } + app.start_pack_job(folder.clone(), output_path, config); } else { app.set_error_message("Please select a folder"); } } + if pack_in_progress { + ui.label("Packing in progress…"); + } + if let Some(error) = &app.error_message { ui.colored_label(egui::Color32::RED, error); } From 3fce63806c49a76b5e5e65dcf7055e5b2768c2c1 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 23:35:02 -0700 Subject: [PATCH 027/118] Use date and time pickers for PSU timestamp --- Cargo.lock | 25 +++++- crates/psu-packer-gui/Cargo.toml | 1 + crates/psu-packer-gui/src/lib.rs | 7 +- crates/psu-packer-gui/src/ui/file_picker.rs | 12 +-- crates/psu-packer-gui/src/ui/pack_controls.rs | 89 ++++++++++++++++--- 5 files changed, 111 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7d7af95..0bfa281 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,6 +23,10 @@ name = "accesskit" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74a4b14f3d99c1255dcba8f45621ab1a2e7540a0009652d33989005a4d0bfc6b" +dependencies = [ + "enumn", + "serde", +] [[package]] name = "accesskit" @@ -1467,6 +1471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20930a432bbd57a6d55e07976089708d4893f3d556cf42a0d79e9e321fa73b10" dependencies = [ "bytemuck", + "serde", ] [[package]] @@ -1564,6 +1569,7 @@ dependencies = [ "epaint 0.27.2", "log", "nohash-hasher", + "serde", ] [[package]] @@ -1671,6 +1677,20 @@ dependencies = [ "paste", ] +[[package]] +name = "egui_extras" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b78779f35ded1a853786c9ce0b43fe1053e10a21ea3b23ebea411805ce41593" +dependencies = [ + "chrono", + "egui 0.27.2", + "enum-map", + "log", + "mime_guess2", + "serde", +] + [[package]] name = "egui_extras" version = "0.31.1" @@ -1734,6 +1754,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e4c3a552cfca14630702449d35f41c84a0d15963273771c6059175a803620f3f" dependencies = [ "bytemuck", + "serde", ] [[package]] @@ -1819,6 +1840,7 @@ dependencies = [ "log", "nohash-hasher", "parking_lot", + "serde", ] [[package]] @@ -4090,6 +4112,7 @@ version = "0.1.0" dependencies = [ "chrono", "eframe 0.27.2", + "egui_extras 0.27.2", "ps2-filetypes", "psu-packer", "rfd 0.14.1", @@ -4830,7 +4853,7 @@ dependencies = [ "cgmath", "eframe 0.31.1", "egui_dock", - "egui_extras", + "egui_extras 0.31.1", "image 0.25.6", "macros", "notify", diff --git a/crates/psu-packer-gui/Cargo.toml b/crates/psu-packer-gui/Cargo.toml index 2ca4bbd..1c734c9 100644 --- a/crates/psu-packer-gui/Cargo.toml +++ b/crates/psu-packer-gui/Cargo.toml @@ -10,3 +10,4 @@ ps2-filetypes = { path = "../ps2-filetypes" } eframe = "0.27" rfd = "0.14" chrono = "0.4.42" +egui_extras = { version = "0.27", features = ["chrono"] } diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 9409ab6..dde43cb 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -4,6 +4,7 @@ use std::{ thread, }; +use chrono::NaiveDateTime; use eframe::egui; pub mod ui; @@ -53,7 +54,7 @@ pub struct PackerApp { pub(crate) status: String, pub(crate) error_message: Option, pub(crate) name: String, - pub(crate) timestamp: String, + pub(crate) timestamp: Option, pub(crate) include_files: Vec, pub(crate) exclude_files: Vec, pub(crate) selected_include: Option, @@ -112,7 +113,7 @@ impl Default for PackerApp { status: String::new(), error_message: None, name: String::new(), - timestamp: String::new(), + timestamp: None, include_files: Vec::new(), exclude_files: Vec::new(), selected_include: None, @@ -161,7 +162,7 @@ impl PackerApp { pub(crate) fn reset_metadata_fields(&mut self) { self.name.clear(); - self.timestamp.clear(); + self.timestamp = None; self.include_files.clear(); self.exclude_files.clear(); self.selected_include = None; diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index 1c29182..cf3e74d 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -3,7 +3,7 @@ use std::path::Path; use eframe::egui; use ps2_filetypes::{PSUEntryKind, PSU}; -use crate::{IconFlagSelection, PackerApp, ICON_SYS_FLAG_OPTIONS, TIMESTAMP_FORMAT}; +use crate::{IconFlagSelection, PackerApp, ICON_SYS_FLAG_OPTIONS}; pub(crate) fn file_menu(app: &mut PackerApp, ui: &mut egui::Ui) { ui.menu_button("File", |ui| { @@ -49,9 +49,7 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.output = format!("{}.psu", name); app.name = name; - app.timestamp = timestamp - .map(|t| t.format(TIMESTAMP_FORMAT).to_string()) - .unwrap_or_default(); + app.timestamp = timestamp; app.include_files = include.unwrap_or_default(); app.exclude_files = exclude.unwrap_or_default(); app.selected_include = None; @@ -81,7 +79,7 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.set_error_message(message); app.output.clear(); app.name.clear(); - app.timestamp.clear(); + app.timestamp = None; app.include_files.clear(); app.exclude_files.clear(); app.selected_include = None; @@ -171,9 +169,7 @@ impl PackerApp { }; self.name = name; - self.timestamp = root_timestamp - .map(|ts| ts.format(TIMESTAMP_FORMAT).to_string()) - .unwrap_or_default(); + self.timestamp = root_timestamp; self.loaded_psu_files = files; self.loaded_psu_path = Some(path.clone()); self.clear_error_message(); diff --git a/crates/psu-packer-gui/src/ui/pack_controls.rs b/crates/psu-packer-gui/src/ui/pack_controls.rs index ad3d46f..c8a75e9 100644 --- a/crates/psu-packer-gui/src/ui/pack_controls.rs +++ b/crates/psu-packer-gui/src/ui/pack_controls.rs @@ -1,7 +1,8 @@ use std::path::{Path, PathBuf}; -use chrono::NaiveDateTime; +use chrono::{Local, NaiveDate, NaiveDateTime, NaiveTime, Timelike}; use eframe::egui; +use egui_extras::DatePickerButton; use crate::{IconFlagSelection, PackerApp, TIMESTAMP_FORMAT}; @@ -18,7 +19,7 @@ pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.end_row(); ui.label("Timestamp"); - ui.add(egui::TextEdit::singleline(&mut app.timestamp).hint_text(TIMESTAMP_FORMAT)); + timestamp_picker_ui(app, ui); ui.end_row(); ui.label("Icon.sys"); @@ -69,6 +70,80 @@ pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { }); } +fn timestamp_picker_ui(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.vertical(|ui| { + let default_timestamp = default_timestamp(); + let mut has_timestamp = app.timestamp.is_some(); + + if ui.checkbox(&mut has_timestamp, "Set timestamp").changed() { + if has_timestamp { + app.timestamp = Some(app.timestamp.unwrap_or(default_timestamp)); + } else { + app.timestamp = None; + } + } + + if !has_timestamp { + ui.small("No timestamp will be saved."); + } else { + let mut timestamp = app.timestamp.unwrap_or(default_timestamp); + let mut date: NaiveDate = timestamp.date(); + let time = timestamp.time(); + let mut hour = time.hour(); + let mut minute = time.minute(); + let mut second = time.second(); + let mut changed = false; + + ui.horizontal(|ui| { + let date_response = ui.add( + DatePickerButton::new(&mut date).id_source("metadata_timestamp_date_picker"), + ); + changed |= date_response.changed(); + + ui.label("Time"); + changed |= ui + .add( + egui::DragValue::new(&mut hour) + .clamp_range(0..=23) + .suffix(" h"), + ) + .changed(); + changed |= ui + .add( + egui::DragValue::new(&mut minute) + .clamp_range(0..=59) + .suffix(" m"), + ) + .changed(); + changed |= ui + .add( + egui::DragValue::new(&mut second) + .clamp_range(0..=59) + .suffix(" s"), + ) + .changed(); + }); + + if changed { + if let Some(new_time) = NaiveTime::from_hms_opt(hour, minute, second) { + timestamp = NaiveDateTime::new(date, new_time); + } + } + + app.timestamp = Some(timestamp); + + if let Some(ts) = app.timestamp { + ui.small(format!("Selected: {}", ts.format(TIMESTAMP_FORMAT))); + } + } + }); +} + +fn default_timestamp() -> NaiveDateTime { + let now = Local::now().naive_local(); + now.with_nanosecond(0).unwrap_or(now) +} + pub(crate) fn file_filters_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.group(|ui| { ui.heading("File filters"); @@ -271,15 +346,7 @@ impl PackerApp { } pub(crate) fn build_config(&self) -> Result { - let timestamp = self.timestamp.trim(); - let timestamp = if timestamp.is_empty() { - None - } else { - Some( - NaiveDateTime::parse_from_str(timestamp, TIMESTAMP_FORMAT) - .map_err(|e| format!("Invalid timestamp: {e}"))?, - ) - }; + let timestamp = self.timestamp; let include = if self.include_files.is_empty() { None From 7ffdf6cf7b7b823d88455a678ba9883bab0466ee Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Mon, 15 Sep 2025 23:52:02 -0700 Subject: [PATCH 028/118] Update Readme.md --- Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 1e2d62d..69d195f 100644 --- a/Readme.md +++ b/Readme.md @@ -4,10 +4,10 @@ *This fork only addresses the PSU packer, and not the other featured programs of the repo. Only windows has been tested.* --------------------------------------------------------------------- -# ORIGINAL READMME BY https://github.com/ps2store/ps2suitcase & https://github.com/techwritescode & https://github.com/mcoirault +# ORIGINAL PROJECT BY https://github.com/ps2store/ps2suitcase & https://github.com/techwritescode & https://github.com/mcoirault # PS2 Rust -Monorepo of my Rust projects for PS2 homebrew. +Monorepo of [tech's] Rust projects for PS2 homebrew. ## Crates From 5851fbf20d80b8a67f0931cdc096928fc6ed5d9c Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 02:29:20 -0700 Subject: [PATCH 029/118] Wrap title.cfg editors in scroll area --- crates/suitcase/src/tabs/title_cfg_viewer.rs | 158 ++++++++++--------- 1 file changed, 81 insertions(+), 77 deletions(-) diff --git a/crates/suitcase/src/tabs/title_cfg_viewer.rs b/crates/suitcase/src/tabs/title_cfg_viewer.rs index a577f82..4218cb1 100644 --- a/crates/suitcase/src/tabs/title_cfg_viewer.rs +++ b/crates/suitcase/src/tabs/title_cfg_viewer.rs @@ -1,7 +1,9 @@ use crate::data::state::AppState; use crate::tabs::Tab; use crate::VirtualFile; -use eframe::egui::{menu, CornerRadius, Id, PopupCloseBehavior, Response, TextEdit, Ui}; +use eframe::egui::{ + menu, CornerRadius, Id, PopupCloseBehavior, Response, ScrollArea, TextEdit, Ui, +}; use ps2_filetypes::TitleCfg; use relative_path::PathExt; use std::ops::Add; @@ -51,93 +53,95 @@ impl TitleCfgViewer { }); ui.separator(); - if self.is_raw_editor { - eframe::egui::Grid::new(Id::from("TitleCfgEditor")) - .num_columns(1) - .min_col_width(ui.available_width()) - .show(ui, |ui| { - ui.add( - TextEdit::multiline(&mut self.title_cfg.contents) - .desired_width(ui.available_width()), - ) + ScrollArea::vertical().show(ui, |ui| { + if self.is_raw_editor { + eframe::egui::Grid::new(Id::from("TitleCfgEditor")) + .num_columns(1) + .min_col_width(ui.available_width()) + .show(ui, |ui| { + ui.add( + TextEdit::multiline(&mut self.title_cfg.contents) + .desired_width(ui.available_width()), + ) .changed() .then(|| self.modified = true); - }); - } else { - eframe::egui::Grid::new(Id::from("TitleCfgEditor")) - .num_columns(3) - .min_col_width(200.0) - .max_col_width(ui.available_width()) - .show(ui, |ui| { - if self.encoding_error { - ui.colored_label( - eframe::egui::Color32::RED, - "Encoding error, please use valid ASCII or UTF-8 encoding.", - ); - return; - } - - if !self.title_cfg.has_mandatory_fields() { - ui.colored_label( - eframe::egui::Color32::RED, - "Missing mandatory fields.", - ); - ui.button("Fix").clicked().then(|| { - self.title_cfg.add_missing_fields(); - self.modified = true; - }); - ui.end_row(); - } - - for (key, value) in self.title_cfg.index_map.iter_mut() { - let key_helper = self.title_cfg.helper.get(key); - - let mut tooltip_content = "".to_string(); - if key_helper.is_some_and(|key| key.get("tooltip").is_some()) { - tooltip_content = - key_helper.unwrap().get("tooltip").unwrap().to_string(); + }); + } else { + eframe::egui::Grid::new(Id::from("TitleCfgEditor")) + .num_columns(3) + .min_col_width(200.0) + .max_col_width(ui.available_width()) + .show(ui, |ui| { + if self.encoding_error { + ui.colored_label( + eframe::egui::Color32::RED, + "Encoding error, please use valid ASCII or UTF-8 encoding.", + ); + return; } - let key_label = ui.label(key.to_string()); - if !tooltip_content.is_empty() { - key_label.on_hover_ui(|ui| { - ui.label(tooltip_content); + if !self.title_cfg.has_mandatory_fields() { + ui.colored_label( + eframe::egui::Color32::RED, + "Missing mandatory fields.", + ); + ui.button("Fix").clicked().then(|| { + self.title_cfg.add_missing_fields(); + self.modified = true; }); + ui.end_row(); } - if key == "Description" { - ui.add(TextEdit::multiline(value).desired_rows(6)) - .changed() - .then(|| self.modified = true); - if value.len() > MAXIMUM_DESCRIPTION_LENGTH { - ui.colored_label( - eframe::egui::Color32::RED, - format!( - "Description too long, it will be truncated in OPL. {}/{}", - value.len(), - MAXIMUM_DESCRIPTION_LENGTH, - ), - ); + for (key, value) in self.title_cfg.index_map.iter_mut() { + let key_helper = self.title_cfg.helper.get(key); + + let mut tooltip_content = "".to_string(); + if key_helper.is_some_and(|key| key.get("tooltip").is_some()) { + tooltip_content = + key_helper.unwrap().get("tooltip").unwrap().to_string(); } - } else if key_helper.is_some_and(|key| key.get("values").is_some()) { - value_select( - ui, - key, - value, - key_helper.unwrap().get("values").unwrap(), - ) - .changed() - .then(|| self.modified = true); - } else { - ui.text_edit_singleline(value) + + let key_label = ui.label(key.to_string()); + if !tooltip_content.is_empty() { + key_label.on_hover_ui(|ui| { + ui.label(tooltip_content); + }); + } + + if key == "Description" { + ui.add(TextEdit::multiline(value).desired_rows(6)) + .changed() + .then(|| self.modified = true); + if value.len() > MAXIMUM_DESCRIPTION_LENGTH { + ui.colored_label( + eframe::egui::Color32::RED, + format!( + "Description too long, it will be truncated in OPL. {}/{}", + value.len(), + MAXIMUM_DESCRIPTION_LENGTH, + ), + ); + } + } else if key_helper.is_some_and(|key| key.get("values").is_some()) { + value_select( + ui, + key, + value, + key_helper.unwrap().get("values").unwrap(), + ) .changed() .then(|| self.modified = true); - } + } else { + ui.text_edit_singleline(value) + .changed() + .then(|| self.modified = true); + } - ui.end_row(); - } - }); - } + ui.end_row(); + } + }); + } + }); }); } From d6ecaba8bf4e43cdb0a84ca112572212660cb31a Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 08:48:36 -0700 Subject: [PATCH 030/118] Wrap title.cfg editor in scroll area --- crates/suitcase/src/tabs/title_cfg_viewer.rs | 161 +++++++++---------- 1 file changed, 79 insertions(+), 82 deletions(-) diff --git a/crates/suitcase/src/tabs/title_cfg_viewer.rs b/crates/suitcase/src/tabs/title_cfg_viewer.rs index 4218cb1..18f3375 100644 --- a/crates/suitcase/src/tabs/title_cfg_viewer.rs +++ b/crates/suitcase/src/tabs/title_cfg_viewer.rs @@ -1,9 +1,7 @@ use crate::data::state::AppState; use crate::tabs::Tab; use crate::VirtualFile; -use eframe::egui::{ - menu, CornerRadius, Id, PopupCloseBehavior, Response, ScrollArea, TextEdit, Ui, -}; +use eframe::egui::{self, menu, CornerRadius, Id, PopupCloseBehavior, Response, TextEdit, Ui}; use ps2_filetypes::TitleCfg; use relative_path::PathExt; use std::ops::Add; @@ -53,96 +51,95 @@ impl TitleCfgViewer { }); ui.separator(); - ScrollArea::vertical().show(ui, |ui| { + egui::ScrollArea::vertical().show(ui, |ui| { if self.is_raw_editor { - eframe::egui::Grid::new(Id::from("TitleCfgEditor")) - .num_columns(1) - .min_col_width(ui.available_width()) - .show(ui, |ui| { - ui.add( - TextEdit::multiline(&mut self.title_cfg.contents) - .desired_width(ui.available_width()), - ) - .changed() - .then(|| self.modified = true); - }); + self.show_raw_editor(ui); } else { - eframe::egui::Grid::new(Id::from("TitleCfgEditor")) - .num_columns(3) - .min_col_width(200.0) - .max_col_width(ui.available_width()) - .show(ui, |ui| { - if self.encoding_error { - ui.colored_label( - eframe::egui::Color32::RED, - "Encoding error, please use valid ASCII or UTF-8 encoding.", - ); - return; - } + self.show_structured_editor(ui); + } + }); + }); + } - if !self.title_cfg.has_mandatory_fields() { - ui.colored_label( - eframe::egui::Color32::RED, - "Missing mandatory fields.", - ); - ui.button("Fix").clicked().then(|| { - self.title_cfg.add_missing_fields(); - self.modified = true; - }); - ui.end_row(); - } + fn show_raw_editor(&mut self, ui: &mut Ui) { + eframe::egui::Grid::new(Id::from("TitleCfgEditor")) + .num_columns(1) + .min_col_width(ui.available_width()) + .show(ui, |ui| { + ui.add( + TextEdit::multiline(&mut self.title_cfg.contents) + .desired_width(ui.available_width()), + ) + .changed() + .then(|| self.modified = true); + }); + } - for (key, value) in self.title_cfg.index_map.iter_mut() { - let key_helper = self.title_cfg.helper.get(key); + fn show_structured_editor(&mut self, ui: &mut Ui) { + eframe::egui::Grid::new(Id::from("TitleCfgEditor")) + .num_columns(3) + .min_col_width(200.0) + .max_col_width(ui.available_width()) + .show(ui, |ui| { + if self.encoding_error { + ui.colored_label( + eframe::egui::Color32::RED, + "Encoding error, please use valid ASCII or UTF-8 encoding.", + ); + return; + } - let mut tooltip_content = "".to_string(); - if key_helper.is_some_and(|key| key.get("tooltip").is_some()) { - tooltip_content = - key_helper.unwrap().get("tooltip").unwrap().to_string(); - } + if !self.title_cfg.has_mandatory_fields() { + ui.colored_label(eframe::egui::Color32::RED, "Missing mandatory fields."); + ui.button("Fix").clicked().then(|| { + self.title_cfg.add_missing_fields(); + self.modified = true; + }); + ui.end_row(); + } - let key_label = ui.label(key.to_string()); - if !tooltip_content.is_empty() { - key_label.on_hover_ui(|ui| { - ui.label(tooltip_content); - }); - } + for (key, value) in self.title_cfg.index_map.iter_mut() { + let key_helper = self.title_cfg.helper.get(key); - if key == "Description" { - ui.add(TextEdit::multiline(value).desired_rows(6)) - .changed() - .then(|| self.modified = true); - if value.len() > MAXIMUM_DESCRIPTION_LENGTH { - ui.colored_label( - eframe::egui::Color32::RED, - format!( - "Description too long, it will be truncated in OPL. {}/{}", - value.len(), - MAXIMUM_DESCRIPTION_LENGTH, - ), - ); - } - } else if key_helper.is_some_and(|key| key.get("values").is_some()) { - value_select( - ui, - key, - value, - key_helper.unwrap().get("values").unwrap(), - ) - .changed() - .then(|| self.modified = true); - } else { - ui.text_edit_singleline(value) - .changed() - .then(|| self.modified = true); - } + let mut tooltip_content = "".to_string(); + if key_helper.is_some_and(|key| key.get("tooltip").is_some()) { + tooltip_content = key_helper.unwrap().get("tooltip").unwrap().to_string(); + } - ui.end_row(); - } + let key_label = ui.label(key.to_string()); + if !tooltip_content.is_empty() { + key_label.on_hover_ui(|ui| { + ui.label(tooltip_content); }); + } + + if key == "Description" { + ui.add(TextEdit::multiline(value).desired_rows(6)) + .changed() + .then(|| self.modified = true); + if value.len() > MAXIMUM_DESCRIPTION_LENGTH { + ui.colored_label( + eframe::egui::Color32::RED, + format!( + "Description too long, it will be truncated in OPL. {}/{}", + value.len(), + MAXIMUM_DESCRIPTION_LENGTH, + ), + ); + } + } else if key_helper.is_some_and(|key| key.get("values").is_some()) { + value_select(ui, key, value, key_helper.unwrap().get("values").unwrap()) + .changed() + .then(|| self.modified = true); + } else { + ui.text_edit_singleline(value) + .changed() + .then(|| self.modified = true); + } + + ui.end_row(); } }); - }); } pub fn toggle_editors(&mut self) { From dfd26543c517c5bcb728e9a644f6e9c6b064f7c0 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:10:44 -0700 Subject: [PATCH 031/118] Add PSU TOML viewer tab --- crates/suitcase/src/components/tab_viewer.rs | 15 +- crates/suitcase/src/main.rs | 6 +- crates/suitcase/src/tabs/mod.rs | 2 + crates/suitcase/src/tabs/psu_toml_viewer.rs | 272 +++++++++++++++++++ 4 files changed, 291 insertions(+), 4 deletions(-) create mode 100644 crates/suitcase/src/tabs/psu_toml_viewer.rs diff --git a/crates/suitcase/src/components/tab_viewer.rs b/crates/suitcase/src/components/tab_viewer.rs index b1f91b0..acda1aa 100644 --- a/crates/suitcase/src/components/tab_viewer.rs +++ b/crates/suitcase/src/components/tab_viewer.rs @@ -1,7 +1,7 @@ use crate::tabs::Tab; -use eframe::egui::{Id, Ui, WidgetText}; +use crate::tabs::{ICNViewer, IconSysViewer, PsuTomlViewer, TitleCfgViewer}; use crate::AppState; -use crate::tabs::{IconSysViewer, TitleCfgViewer, ICNViewer}; +use eframe::egui::{Id, Ui, WidgetText}; pub struct TabViewer<'a> { pub(crate) app: &'a mut AppState, @@ -11,6 +11,7 @@ pub enum TabType { IconSysViewer(IconSysViewer), TitleCfgViewer(TitleCfgViewer), ICNViewer(ICNViewer), + PsuTomlViewer(PsuTomlViewer), } impl TabType { @@ -19,6 +20,7 @@ impl TabType { TabType::IconSysViewer(tab) => tab.get_id(), TabType::TitleCfgViewer(tab) => tab.get_id(), TabType::ICNViewer(tab) => tab.get_id(), + TabType::PsuTomlViewer(tab) => tab.get_id(), } } @@ -27,6 +29,7 @@ impl TabType { TabType::IconSysViewer(tab) => tab.get_title(), TabType::TitleCfgViewer(tab) => tab.get_title(), TabType::ICNViewer(tab) => tab.get_title(), + TabType::PsuTomlViewer(tab) => tab.get_title(), } } @@ -35,6 +38,7 @@ impl TabType { TabType::IconSysViewer(tab) => tab.get_modified(), TabType::TitleCfgViewer(tab) => tab.get_modified(), TabType::ICNViewer(tab) => tab.get_modified(), + TabType::PsuTomlViewer(tab) => tab.get_modified(), } } @@ -43,6 +47,7 @@ impl TabType { TabType::IconSysViewer(tab) => tab.save(), TabType::TitleCfgViewer(tab) => tab.save(), TabType::ICNViewer(tab) => tab.save(), + TabType::PsuTomlViewer(tab) => tab.save(), } } } @@ -55,7 +60,8 @@ impl<'a> egui_dock::TabViewer for TabViewer<'a> { format!("* {}", tab.get_title()) } else { tab.get_title() - }.into() + } + .into() } fn ui(&mut self, ui: &mut Ui, tab: &mut Self::Tab) { @@ -69,6 +75,9 @@ impl<'a> egui_dock::TabViewer for TabViewer<'a> { TabType::TitleCfgViewer(tab) => { tab.show(ui); } + TabType::PsuTomlViewer(tab) => { + tab.show(ui); + } } } diff --git a/crates/suitcase/src/main.rs b/crates/suitcase/src/main.rs index 3626462..33430bf 100644 --- a/crates/suitcase/src/main.rs +++ b/crates/suitcase/src/main.rs @@ -21,7 +21,7 @@ use crate::{ io::export_psu::export_psu, io::file_watcher::FileWatcher, io::read_folder::read_folder, - tabs::{ICNViewer, IconSysViewer, TitleCfgViewer}, + tabs::{ICNViewer, IconSysViewer, PsuTomlViewer, TitleCfgViewer}, wizards::create_icn::create_icn_wizard, }; use eframe::egui::{Context, Frame, IconData, Margin, ViewportCommand}; @@ -219,6 +219,10 @@ impl PSUBuilderApp { "cfg" | "cnf" | "dat" | "txt" => Some(TabType::TitleCfgViewer( TitleCfgViewer::new(&file, &self.state), )), + "toml" => Some(TabType::PsuTomlViewer(PsuTomlViewer::new( + &file, + &self.state, + ))), _ => None, }; diff --git a/crates/suitcase/src/tabs/mod.rs b/crates/suitcase/src/tabs/mod.rs index ed61ad9..da8303c 100644 --- a/crates/suitcase/src/tabs/mod.rs +++ b/crates/suitcase/src/tabs/mod.rs @@ -1,9 +1,11 @@ pub mod icn_viewer; pub mod icon_sys_viewer; +pub mod psu_toml_viewer; pub mod tab; pub mod title_cfg_viewer; pub use icn_viewer::*; pub use icon_sys_viewer::*; +pub use psu_toml_viewer::*; pub use tab::*; pub use title_cfg_viewer::*; diff --git a/crates/suitcase/src/tabs/psu_toml_viewer.rs b/crates/suitcase/src/tabs/psu_toml_viewer.rs new file mode 100644 index 0000000..5138b2b --- /dev/null +++ b/crates/suitcase/src/tabs/psu_toml_viewer.rs @@ -0,0 +1,272 @@ +use crate::data::state::AppState; +use crate::tabs::Tab; +use crate::VirtualFile; +use eframe::egui::{self, menu, Color32, DragValue, ScrollArea, TextEdit, Ui}; +use relative_path::PathExt; +use std::path::PathBuf; +use toml::value::Table; +use toml::Value; + +pub struct PsuTomlViewer { + file: String, + file_path: PathBuf, + contents: String, + structured: Option, + parse_error: Option, + show_raw: bool, + modified: bool, +} + +impl PsuTomlViewer { + pub fn new(file: &VirtualFile, state: &AppState) -> Self { + let contents = std::fs::read_to_string(&file.file_path).unwrap_or_default(); + let file_path = file.file_path.clone(); + let file = file + .file_path + .relative_to(state.opened_folder.clone().unwrap()) + .unwrap() + .to_string(); + + Self { + file, + file_path, + contents, + structured: None, + parse_error: None, + show_raw: true, + modified: false, + } + } + + pub fn show(&mut self, ui: &mut Ui) { + ui.vertical(|ui| { + menu::bar(ui, |ui| { + ui.set_height(25.0); + if ui.button("Save").clicked() { + self.save(); + } + let toggle_label = if self.show_raw { + "Structured View" + } else { + "Raw View" + }; + if ui.button(toggle_label).clicked() { + self.toggle_view(); + } + }); + + if let Some(error) = &self.parse_error { + ui.colored_label(Color32::RED, format!("Failed to parse TOML: {error}")); + } + + ui.separator(); + + ScrollArea::vertical().show(ui, |ui| { + if self.show_raw { + self.show_raw_editor(ui); + } else { + self.show_structured_editor(ui); + } + }); + }); + } + + fn show_raw_editor(&mut self, ui: &mut Ui) { + let response = ui.add( + TextEdit::multiline(&mut self.contents) + .desired_width(ui.available_width()) + .code_editor(), + ); + + if response.changed() { + self.modified = true; + self.structured = None; + self.parse_error = None; + } + } + + fn show_structured_editor(&mut self, ui: &mut Ui) { + if let Some(value) = &mut self.structured { + let changed = match value { + Value::Table(table) => Self::render_table(ui, "", table), + Value::Array(array) => Self::render_array(ui, "", array), + _ => Self::render_entry(ui, "", "value", value), + }; + + if changed { + self.modified = true; + self.contents = Self::value_to_string(value); + } + } else { + ui.label("Switch back to the raw editor to resolve parsing issues."); + } + } + + fn toggle_view(&mut self) { + if self.show_raw { + match self.parse_contents() { + Ok(value) => { + self.structured = Some(value); + self.parse_error = None; + self.show_raw = false; + } + Err(err) => { + self.parse_error = Some(err); + } + } + } else { + if let Some(value) = &self.structured { + self.contents = Self::value_to_string(value); + } + self.show_raw = true; + self.structured = None; + self.parse_error = None; + } + } + + fn parse_contents(&self) -> Result { + self.contents + .parse::() + .map_err(|err| err.to_string()) + } + + fn render_table(ui: &mut Ui, path: &str, table: &mut Table) -> bool { + let mut changed = false; + for (key, value) in table.iter_mut() { + let child_path = Self::join_path(path, key); + if Self::render_entry(ui, &child_path, key, value) { + changed = true; + } + } + changed + } + + fn render_array(ui: &mut Ui, path: &str, array: &mut Vec) -> bool { + let mut changed = false; + for (index, value) in array.iter_mut().enumerate() { + let label = format!("[{index}]"); + let child_path = Self::join_index(path, index); + if Self::render_entry(ui, &child_path, &label, value) { + changed = true; + } + } + changed + } + + fn render_entry(ui: &mut Ui, path: &str, label: &str, value: &mut Value) -> bool { + match value { + Value::Table(table) => egui::CollapsingHeader::new(label) + .id_source(path.to_owned()) + .default_open(true) + .show(ui, |ui| Self::render_table(ui, path, table)) + .inner + .unwrap_or(false), + Value::Array(array) => egui::CollapsingHeader::new(label) + .id_source(path.to_owned()) + .default_open(true) + .show(ui, |ui| Self::render_array(ui, path, array)) + .inner + .unwrap_or(false), + Value::String(text) => { + ui.horizontal(|ui| { + ui.label(label); + ui.text_edit_singleline(text).changed() + }) + .inner + } + Value::Integer(integer) => { + ui.horizontal(|ui| { + ui.label(label); + let mut value = *integer; + let changed = ui.add(DragValue::new(&mut value)).changed(); + if changed { + *integer = value; + } + changed + }) + .inner + } + Value::Float(float) => { + ui.horizontal(|ui| { + ui.label(label); + let mut value = *float; + let changed = ui.add(DragValue::new(&mut value).speed(0.1)).changed(); + if changed { + *float = value; + } + changed + }) + .inner + } + Value::Boolean(boolean) => ui.checkbox(boolean, label).changed(), + Value::Datetime(datetime) => { + ui.horizontal(|ui| { + ui.label(label); + let mut text = datetime.to_string(); + let response = ui.text_edit_singleline(&mut text); + if response.changed() { + match text.parse() { + Ok(parsed) => { + *datetime = parsed; + true + } + Err(_) => { + ui.colored_label(Color32::RED, "Invalid datetime"); + false + } + } + } else { + false + } + }) + .inner + } + } + } + + fn join_path(path: &str, segment: &str) -> String { + if path.is_empty() { + segment.to_owned() + } else { + format!("{path}.{segment}") + } + } + + fn join_index(path: &str, index: usize) -> String { + if path.is_empty() { + format!("[{index}]") + } else { + format!("{path}[{index}]") + } + } + + fn value_to_string(value: &Value) -> String { + toml::to_string_pretty(value).unwrap_or_else(|_| value.to_string()) + } +} + +impl Tab for PsuTomlViewer { + fn get_id(&self) -> &str { + &self.file + } + + fn get_title(&self) -> String { + self.file.clone() + } + + fn get_modified(&self) -> bool { + self.modified + } + + fn save(&mut self) { + if !self.show_raw { + if let Some(value) = &self.structured { + self.contents = Self::value_to_string(value); + } + } + + std::fs::write(&self.file_path, self.contents.as_bytes()) + .expect("Failed to write psu.toml"); + self.modified = false; + } +} From 827dade584b2366530b1404ef7c7546a90651f43 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 09:44:34 -0700 Subject: [PATCH 032/118] Add editor tabs for PSU configuration files --- crates/psu-packer-gui/src/lib.rs | 252 ++++++++++++++++++-- crates/psu-packer-gui/src/ui/file_picker.rs | 24 +- 2 files changed, 254 insertions(+), 22 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index dde43cb..6d8cc26 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -1,4 +1,5 @@ use std::{ + fs, io, path::{Path, PathBuf}, sync::{Arc, Mutex}, thread, @@ -27,6 +28,40 @@ pub(crate) enum IconFlagSelection { Custom, } +#[derive(Clone, Copy, PartialEq, Eq)] +enum EditorTab { + PsuSettings, + PsuToml, + TitleCfg, +} + +#[derive(Default)] +struct TextFileEditor { + content: String, + modified: bool, + load_error: Option, +} + +impl TextFileEditor { + fn set_content(&mut self, content: String) { + self.content = content; + self.modified = false; + self.load_error = None; + } + + fn set_error_message(&mut self, message: String) { + self.content.clear(); + self.modified = false; + self.load_error = Some(message); + } + + fn clear(&mut self) { + self.content.clear(); + self.modified = false; + self.load_error = None; + } +} + struct PackJob { progress: Arc>, handle: Option>, @@ -68,6 +103,9 @@ pub struct PackerApp { pub(crate) icon_sys_flag_selection: IconFlagSelection, pub(crate) icon_sys_custom_flag: u16, pack_job: Option, + editor_tab: EditorTab, + psu_toml_editor: TextFileEditor, + title_cfg_editor: TextFileEditor, } struct ErrorMessage { @@ -127,6 +165,9 @@ impl Default for PackerApp { icon_sys_flag_selection: IconFlagSelection::Preset(0), icon_sys_custom_flag: ICON_SYS_FLAG_OPTIONS[0].0, pack_job: None, + editor_tab: EditorTab::PsuSettings, + psu_toml_editor: TextFileEditor::default(), + title_cfg_editor: TextFileEditor::default(), } } } @@ -210,6 +251,32 @@ impl PackerApp { .collect() } + pub(crate) fn reload_project_files(&mut self) { + if let Some(folder) = self.folder.clone() { + load_text_file_into_editor(folder.as_path(), "psu.toml", &mut self.psu_toml_editor); + load_text_file_into_editor(folder.as_path(), "title.cfg", &mut self.title_cfg_editor); + } else { + self.clear_text_editors(); + } + } + + fn clear_text_editors(&mut self) { + self.psu_toml_editor.clear(); + self.title_cfg_editor.clear(); + } + + pub(crate) fn open_psu_settings_tab(&mut self) { + self.editor_tab = EditorTab::PsuSettings; + } + + pub(crate) fn open_psu_toml_tab(&mut self) { + self.editor_tab = EditorTab::PsuToml; + } + + pub(crate) fn open_title_cfg_tab(&mut self) { + self.editor_tab = EditorTab::TitleCfg; + } + fn has_source(&self) -> bool { self.folder.is_some() || self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty() } @@ -334,6 +401,88 @@ impl PackerApp { } } +fn load_text_file_into_editor(folder: &Path, file_name: &str, editor: &mut TextFileEditor) { + let path = folder.join(file_name); + match fs::read_to_string(&path) { + Ok(content) => { + editor.set_content(content); + } + Err(err) => { + if err.kind() == io::ErrorKind::NotFound { + editor + .set_error_message(format!("{} not found in the selected folder.", file_name)); + } else { + editor.set_error_message(format!("Failed to read {}: {err}", file_name)); + } + } + } +} + +fn save_editor_to_disk( + folder: Option<&Path>, + file_name: &str, + editor: &mut TextFileEditor, +) -> Result { + let folder = + folder.ok_or_else(|| io::Error::new(io::ErrorKind::Other, "No folder selected"))?; + let path = folder.join(file_name); + fs::write(&path, editor.content.as_bytes())?; + editor.modified = false; + editor.load_error = None; + Ok(path) +} + +fn text_editor_ui( + ui: &mut egui::Ui, + file_name: &str, + folder_selected: bool, + editor: &mut TextFileEditor, +) -> bool { + if !folder_selected { + ui.label(format!("Select a folder to edit {file_name}.")); + return false; + } + + if let Some(message) = &editor.load_error { + ui.colored_label(egui::Color32::YELLOW, message); + ui.add_space(8.0); + } + + let response = egui::ScrollArea::vertical() + .id_source(format!("{file_name}_editor_scroll")) + .show(ui, |ui| { + ui.add( + egui::TextEdit::multiline(&mut editor.content) + .desired_rows(20) + .code_editor(), + ) + }) + .inner; + + if response.changed() { + editor.modified = true; + } + + ui.add_space(8.0); + + let mut save_clicked = false; + ui.horizontal(|ui| { + let button_label = format!("Save {file_name}"); + if ui + .add_enabled(editor.modified, egui::Button::new(button_label)) + .clicked() + { + save_clicked = true; + } + + if editor.modified { + ui.colored_label(egui::Color32::YELLOW, "Unsaved changes"); + } + }); + + save_clicked +} + impl eframe::App for PackerApp { fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { self.poll_pack_job(); @@ -372,29 +521,96 @@ impl eframe::App for PackerApp { }); egui::CentralPanel::default().show(ctx, |ui| { - egui::ScrollArea::vertical().show(ui, |ui| { - ui::file_picker::folder_section(self, ui); + ui.horizontal(|ui| { + ui.selectable_value(&mut self.editor_tab, EditorTab::PsuSettings, "PSU Settings"); + let psu_toml_label = if self.psu_toml_editor.modified { + "psu.toml*" + } else { + "psu.toml" + }; + ui.selectable_value(&mut self.editor_tab, EditorTab::PsuToml, psu_toml_label); + let title_cfg_label = if self.title_cfg_editor.modified { + "title.cfg*" + } else { + "title.cfg" + }; + ui.selectable_value(&mut self.editor_tab, EditorTab::TitleCfg, title_cfg_label); + }); + ui.separator(); - let showing_psu = self.showing_loaded_psu(); - if showing_psu { - ui.add_space(8.0); - ui::file_picker::loaded_psu_section(self, ui); - } + match self.editor_tab { + EditorTab::PsuSettings => { + egui::ScrollArea::vertical().show(ui, |ui| { + ui::file_picker::folder_section(self, ui); - ui.add_space(8.0); - ui::pack_controls::metadata_section(self, ui); + let showing_psu = self.showing_loaded_psu(); + if showing_psu { + ui.add_space(8.0); + ui::file_picker::loaded_psu_section(self, ui); + } - if !showing_psu { - ui.add_space(8.0); - ui::pack_controls::file_filters_section(self, ui); - } + ui.add_space(8.0); + ui::pack_controls::metadata_section(self, ui); - ui.add_space(8.0); - ui::pack_controls::output_section(self, ui); + if !showing_psu { + ui.add_space(8.0); + ui::pack_controls::file_filters_section(self, ui); + } - ui.add_space(8.0); - ui::pack_controls::packaging_section(self, ui); - }); + ui.add_space(8.0); + ui::pack_controls::output_section(self, ui); + + ui.add_space(8.0); + ui::pack_controls::packaging_section(self, ui); + }); + } + EditorTab::PsuToml => { + let save_clicked = text_editor_ui( + ui, + "psu.toml", + self.folder.is_some(), + &mut self.psu_toml_editor, + ); + if save_clicked { + match save_editor_to_disk( + self.folder.as_deref(), + "psu.toml", + &mut self.psu_toml_editor, + ) { + Ok(path) => { + self.status = format!("Saved {}", path.display()); + self.clear_error_message(); + } + Err(err) => { + self.set_error_message(format!("Failed to save psu.toml: {err}")); + } + } + } + } + EditorTab::TitleCfg => { + let save_clicked = text_editor_ui( + ui, + "title.cfg", + self.folder.is_some(), + &mut self.title_cfg_editor, + ); + if save_clicked { + match save_editor_to_disk( + self.folder.as_deref(), + "title.cfg", + &mut self.title_cfg_editor, + ) { + Ok(path) => { + self.status = format!("Saved {}", path.display()); + self.clear_error_message(); + } + Err(err) => { + self.set_error_message(format!("Failed to save title.cfg: {err}")); + } + } + } + } + } }); ui::dialogs::exit_confirmation(self, ctx); diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index cf3e74d..6b403be 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -17,6 +17,18 @@ pub(crate) fn file_menu(app: &mut PackerApp, ui: &mut egui::Ui) { ui.close_menu(); } + ui.add_enabled_ui(app.folder.is_some(), |ui| { + if ui.button("Edit psu.toml").clicked() { + app.open_psu_toml_tab(); + ui.close_menu(); + } + + if ui.button("Edit title.cfg").clicked() { + app.open_title_cfg_tab(); + ui.close_menu(); + } + }); + ui.separator(); if ui.button("Exit").clicked() { @@ -36,8 +48,8 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { .on_hover_text("Pick the source directory to load configuration values.") .clicked() { - if let Some(dir) = rfd::FileDialog::new().pick_folder() { - match psu_packer::load_config(&dir) { + if let Some(folder) = rfd::FileDialog::new().pick_folder() { + match psu_packer::load_config(&folder) { Ok(config) => { let psu_packer::Config { name, @@ -75,7 +87,7 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.status.clear(); } Err(err) => { - let message = format_load_error(&dir, err); + let message = format_load_error(&folder, err); app.set_error_message(message); app.output.clear(); app.name.clear(); @@ -89,7 +101,9 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { } app.loaded_psu_path = None; app.loaded_psu_files.clear(); - app.folder = Some(dir); + app.folder = Some(folder.clone()); + app.reload_project_files(); + app.open_psu_settings_tab(); } } }); @@ -180,6 +194,8 @@ impl PackerApp { self.selected_include = None; self.selected_exclude = None; self.reset_icon_sys_fields(); + self.reload_project_files(); + self.open_psu_settings_tab(); if self.output.trim().is_empty() { self.output = path.display().to_string(); From 42e3b694a16c82baa8aed60c17c5e5326a2935b2 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 10:31:48 -0700 Subject: [PATCH 033/118] Handle malformed title cfg lines --- crates/ps2-filetypes/src/parser/title_cfg.rs | 36 +++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/crates/ps2-filetypes/src/parser/title_cfg.rs b/crates/ps2-filetypes/src/parser/title_cfg.rs index b6d40e6..94131e8 100644 --- a/crates/ps2-filetypes/src/parser/title_cfg.rs +++ b/crates/ps2-filetypes/src/parser/title_cfg.rs @@ -44,7 +44,7 @@ impl TitleCfg { pub fn has_mandatory_fields(&self) -> bool { for (_, key) in MANDATORY_KEYS.iter().enumerate() { - if !self.index_map.contains_key(key.to_owned()) { + if !self.index_map.contains_key(*key) { return false; } } @@ -53,7 +53,7 @@ impl TitleCfg { pub fn add_missing_fields(&mut self) -> &Self { for (_, key) in MANDATORY_KEYS.iter().enumerate() { - if !self.index_map.contains_key(key.to_owned()) { + if !self.index_map.contains_key(*key) { self.index_map.insert(key.to_string(), "".to_string()); } } @@ -76,9 +76,37 @@ fn string_to_index_map(contents: String) -> IndexMap { let lines = contents.lines(); for line in lines { - let pair = line.split('=').collect::>(); - index_map.insert(pair[0].to_string(), pair[1].to_string()); + if let Some((key, value)) = line.split_once('=') { + index_map.insert(key.to_string(), value.to_string()); + } } index_map } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn string_to_index_map_skips_lines_without_delimiter() { + let contents = "title=Example Game\ninvalid_line\ndeveloper=Example Dev"; + + let map = string_to_index_map(contents.to_string()); + + assert_eq!(map.get("title"), Some(&"Example Game".to_string())); + assert_eq!(map.get("developer"), Some(&"Example Dev".to_string())); + assert!(!map.contains_key("invalid_line")); + } + + #[test] + fn title_cfg_handles_malformed_lines_gracefully() { + let contents = "title=Another Game\njust_text\nboot=cdrom0:\\SLUS_123.45"; + + let cfg = TitleCfg::new(contents.to_string()); + + assert_eq!(cfg.index_map.get("title"), Some(&"Another Game".to_string())); + assert_eq!(cfg.index_map.get("boot"), Some(&"cdrom0:\\SLUS_123.45".to_string())); + assert!(!cfg.index_map.contains_key("just_text")); + } +} From 16e42aa0db2a357a99057f6bc1970ddf9157f5a9 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:24:43 +0000 Subject: [PATCH 034/118] Track and validate shader uniform metadata --- crates/suitcase/src/rendering/program.rs | 164 +++++++++++++++++++++-- 1 file changed, 151 insertions(+), 13 deletions(-) diff --git a/crates/suitcase/src/rendering/program.rs b/crates/suitcase/src/rendering/program.rs index 708a80d..fa83d04 100644 --- a/crates/suitcase/src/rendering/program.rs +++ b/crates/suitcase/src/rendering/program.rs @@ -1,5 +1,7 @@ use eframe::glow; use eframe::glow::HasContext; +use std::collections::HashMap; +use std::fmt; pub enum UniformValueInternal { Int(i32), @@ -10,6 +12,73 @@ pub enum UniformValueInternal { Vector4f(cgmath::Vector4), } +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +enum UniformType { + Int, + Float, + Matrix4, + Vector2, + Vector3, + Vector4, + Sampler2D, + Unknown(u32), +} + +impl UniformType { + fn from_gl_type(gl_type: u32) -> Self { + match gl_type { + glow::FLOAT => UniformType::Float, + glow::FLOAT_MAT4 => UniformType::Matrix4, + glow::FLOAT_VEC2 => UniformType::Vector2, + glow::FLOAT_VEC3 => UniformType::Vector3, + glow::FLOAT_VEC4 => UniformType::Vector4, + glow::INT => UniformType::Int, + glow::SAMPLER_2D => UniformType::Sampler2D, + _ => UniformType::Unknown(gl_type), + } + } + + fn from_uniform_value(value: &UniformValueInternal) -> Self { + match value { + UniformValueInternal::Int(_) => UniformType::Int, + UniformValueInternal::Float(_) => UniformType::Float, + UniformValueInternal::Matrix4f(_) => UniformType::Matrix4, + UniformValueInternal::Vector2f(_) => UniformType::Vector2, + UniformValueInternal::Vector3f(_) => UniformType::Vector3, + UniformValueInternal::Vector4f(_) => UniformType::Vector4, + } + } + + fn accepts(self, actual: UniformType) -> bool { + match self { + UniformType::Sampler2D => matches!(actual, UniformType::Int), + UniformType::Unknown(_) => true, + _ => self == actual, + } + } +} + +impl fmt::Display for UniformType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + UniformType::Int => write!(f, "int"), + UniformType::Float => write!(f, "float"), + UniformType::Matrix4 => write!(f, "mat4"), + UniformType::Vector2 => write!(f, "vec2"), + UniformType::Vector3 => write!(f, "vec3"), + UniformType::Vector4 => write!(f, "vec4"), + UniformType::Sampler2D => write!(f, "sampler2D"), + UniformType::Unknown(gl_type) => write!(f, "unknown(0x{gl_type:04X})"), + } + } +} + +#[derive(Clone, Debug)] +struct UniformMetadata { + name: String, + uniform_type: UniformType, +} + pub trait UniformValue { fn uniform_value(&self) -> UniformValueInternal; } @@ -53,6 +122,7 @@ impl UniformValue for cgmath::Vector2 { #[derive(Clone, Debug)] pub struct Program { program: glow::Program, + uniforms: HashMap, } impl Program { @@ -98,16 +168,22 @@ impl Program { gl.delete_shader(shader); } - // TODO: Determine if we need type checking - // let active_uniforms = gl.get_active_uniforms(program); - // - // for i in 0..active_uniforms { - // let ActiveUniform{name, size, utype} = gl.get_active_uniform(program, i).unwrap(); - // println!("{} {} {}", name, size, utype); - // } + let mut uniforms = HashMap::new(); + let active_uniforms = gl.get_active_uniforms(program); + for index in 0..active_uniforms { + if let Some(active_uniform) = gl.get_active_uniform(program, index) { + let name = active_uniform.name; + let uniform_type = UniformType::from_gl_type(active_uniform.utype); + let metadata = UniformMetadata { + name: name.clone(), + uniform_type, + }; + uniforms.insert(name, metadata); + } + } - Self { program } + Self { program, uniforms } } pub fn gl(&self) -> glow::Program { @@ -121,10 +197,29 @@ impl Program { pub fn set(&self, gl: &glow::Context, name: &str, value: impl UniformValue) { unsafe { let program = self.program; - let location = gl.get_uniform_location(self.program, name).expect(format!("Failed to get location {}", name).as_str()); + let uniform_value = value.uniform_value(); + + let Some(metadata) = self.uniform_metadata(name) else { + eprintln!("Attempted to set unknown uniform `{name}`"); + return; + }; + + let actual_type = UniformType::from_uniform_value(&uniform_value); + if !metadata.uniform_type.accepts(actual_type) { + eprintln!( + "Type mismatch for uniform `{}` (requested as `{name}`): expected {}, found {}", + metadata.name, metadata.uniform_type, actual_type, + ); + return; + } + + let Some(location) = gl.get_uniform_location(self.program, name) else { + eprintln!("Failed to get location `{name}`"); + return; + }; let location = Some(&location); - match value.uniform_value() { + match uniform_value { UniformValueInternal::Int(i) => { gl.program_uniform_1_i32(program, location, i); } @@ -132,7 +227,12 @@ impl Program { gl.program_uniform_1_f32(program, location, f); } UniformValueInternal::Matrix4f(mat4) => { - gl.program_uniform_matrix_4_f32_slice(program, location, false, &convert_matrix(mat4)); + gl.program_uniform_matrix_4_f32_slice( + program, + location, + false, + &convert_matrix(mat4), + ); } UniformValueInternal::Vector2f(vec2) => { gl.program_uniform_2_f32(program, location, vec2[0], vec2[1]); @@ -142,11 +242,17 @@ impl Program { } UniformValueInternal::Vector4f(vec4) => { gl.program_uniform_4_f32(program, location, vec4[0], vec4[1], vec4[2], vec4[3]); - }, + } } } } + fn uniform_metadata(&self, name: &str) -> Option<&UniformMetadata> { + self.uniforms.get(name).or_else(|| { + canonical_uniform_name(name).and_then(|canonical| self.uniforms.get(&canonical)) + }) + } + pub fn drop(&self, gl: &glow::Context) { unsafe { gl.delete_program(self.program); @@ -159,4 +265,36 @@ fn convert_matrix(mat: cgmath::Matrix4) -> Vec { mat.x.x, mat.x.y, mat.x.z, mat.x.w, mat.y.x, mat.y.y, mat.y.z, mat.y.w, mat.z.x, mat.z.y, mat.z.z, mat.z.w, mat.w.x, mat.w.y, mat.w.z, mat.w.w, ] -} \ No newline at end of file +} + +fn canonical_uniform_name(name: &str) -> Option { + if !name.contains('[') { + return None; + } + + let mut canonical = String::with_capacity(name.len()); + let mut chars = name.chars().peekable(); + + while let Some(ch) = chars.next() { + canonical.push(ch); + + if ch == '[' { + while let Some(next_ch) = chars.peek() { + if *next_ch == ']' { + break; + } + chars.next(); + } + + canonical.push('0'); + + match chars.next() { + Some(']') => canonical.push(']'), + Some(other) => canonical.push(other), + None => return None, + } + } + } + + Some(canonical) +} From 0333667d28db229e77ab51fd90b85bf2edee65c9 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 18:50:31 +0000 Subject: [PATCH 035/118] Fix Shift-JIS newline decoding --- crates/ps2-filetypes/src/common/sjis.rs | 80 ++++++++++++++++--------- 1 file changed, 52 insertions(+), 28 deletions(-) diff --git a/crates/ps2-filetypes/src/common/sjis.rs b/crates/ps2-filetypes/src/common/sjis.rs index d4c6300..90698ee 100644 --- a/crates/ps2-filetypes/src/common/sjis.rs +++ b/crates/ps2-filetypes/src/common/sjis.rs @@ -20,46 +20,70 @@ pub fn encode_sjis(input: &str) -> Vec { } pub fn decode_sjis(input: &[u8]) -> String { - let mut str_out = vec![0u8; input.len()]; + let mut str_out = Vec::with_capacity(input.len()); - for (i, pair) in input.chunks_exact(2).enumerate() { - str_out[i] = match pair[0] { + for pair in input.chunks_exact(2) { + match pair[0] { 0x00 => { if pair[1] == 0x00 { - b'\0' + str_out.push(b'\0'); } else { - b'?' - } - } - 0x0D => { - if pair[1] == 0x0A { - // TODO: Technically this should be \r\n, but for now it works - b'\n' - } else { - b'?' + str_out.push(b'?'); } } + 0x0D => match pair[1] { + 0x0A => str_out.extend_from_slice(b"\r\n"), + 0x00 => str_out.push(b'\r'), + _ => str_out.push(b'?'), + }, + 0x0A => match pair[1] { + 0x00 => str_out.push(b'\n'), + _ => str_out.push(b'?'), + }, 0x81 => match pair[1] { - 0x40 => b' ', - 0x46 => b':', - 0x5E => b'/', - 0x69 => b'(', - 0x6A => b')', - 0x6D => b'[', - 0x6E => b']', - 0x6F => b'{', - 0x70 => b'}', - _ => b'?', + 0x40 => str_out.push(b' '), + 0x46 => str_out.push(b':'), + 0x5E => str_out.push(b'/'), + 0x69 => str_out.push(b'('), + 0x6A => str_out.push(b')'), + 0x6D => str_out.push(b'['), + 0x6E => str_out.push(b']'), + 0x6F => str_out.push(b'{'), + 0x70 => str_out.push(b'}'), + _ => str_out.push(b'?'), }, 0x82 => match pair[1] { - 0x4f..=0x7A => pair[1] - 31, - 0x81..=0x99 => pair[1] - 32, - 0x3F => b' ', - _ => b'?', + 0x4f..=0x7A => str_out.push(pair[1] - 31), + 0x81..=0x99 => str_out.push(pair[1] - 32), + 0x3F => str_out.push(b' '), + _ => str_out.push(b'?'), }, - _ => b'?', + _ => str_out.push(b'?'), }; } String::from_utf8_lossy(&str_out).to_string() } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn decode_crlf_preserves_both_characters() { + let input = [0x0D, 0x0A]; + assert_eq!(decode_sjis(&input), "\r\n"); + } + + #[test] + fn decode_cr_only() { + let input = [0x0D, 0x00]; + assert_eq!(decode_sjis(&input), "\r"); + } + + #[test] + fn decode_lf_only() { + let input = [0x0A, 0x00]; + assert_eq!(decode_sjis(&input), "\n"); + } +} From 992e3d6ae74d3d18fd102f24a7f4fc1dd66b8fa1 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 19:14:25 +0000 Subject: [PATCH 036/118] Add configuration templates and integrate into GUI --- Readme.md | 4 ++ assets/templates/psu.toml | 4 ++ assets/templates/title.cfg | 7 +++ crates/ps2-filetypes/src/lib.rs | 1 + crates/ps2-filetypes/src/templates.rs | 7 +++ crates/psu-packer-gui/src/lib.rs | 49 ++++++++++++++++++ crates/psu-packer-gui/src/ui/file_picker.rs | 10 ++++ crates/suitcase/src/components/menu_bar.rs | 8 +++ crates/suitcase/src/components/toolbar.rs | 2 +- crates/suitcase/src/data/state.rs | 4 ++ crates/suitcase/src/main.rs | 55 ++++++++++++++++----- 11 files changed, 137 insertions(+), 14 deletions(-) create mode 100644 assets/templates/psu.toml create mode 100644 assets/templates/title.cfg create mode 100644 crates/ps2-filetypes/src/templates.rs diff --git a/Readme.md b/Readme.md index 69d195f..f47b552 100644 --- a/Readme.md +++ b/Readme.md @@ -66,6 +66,10 @@ ambient_color = { r = 0.2, g = 0.2, b = 0.2, a = 1.0 } * `background_colors` must contain exactly four entries; `light_directions` and `light_colors` expect three entries each. Omit these arrays to keep the defaults. * `ambient_color` and `background_transparency` are optional—leave them out to rely on the standard lighting values bundled with the packer. +### Templates + +Starter templates for both configuration files live in `assets/templates/psu.toml` and `assets/templates/title.cfg`. The GUI `File` menu offers "Create … from template" actions so you can drop these starting points straight into a project before editing. + The GUI mirrors the same settings so you can preview and persist changes without touching the TOML by hand. ## Credits diff --git a/assets/templates/psu.toml b/assets/templates/psu.toml new file mode 100644 index 0000000..69da22b --- /dev/null +++ b/assets/templates/psu.toml @@ -0,0 +1,4 @@ +[config] +name = "Example Save" +timestamp = "2024-01-01 00:00:00" +include = ["BOOT.ELF"] diff --git a/assets/templates/title.cfg b/assets/templates/title.cfg new file mode 100644 index 0000000..7f532ec --- /dev/null +++ b/assets/templates/title.cfg @@ -0,0 +1,7 @@ +title=Example Game +Description=Starter description for your save +boot=cdrom0:\SLUS_123.45 +Release=2024 +Developer=Example Studio +source=OPL +Version=1.00 diff --git a/crates/ps2-filetypes/src/lib.rs b/crates/ps2-filetypes/src/lib.rs index b662d6f..9058f45 100644 --- a/crates/ps2-filetypes/src/lib.rs +++ b/crates/ps2-filetypes/src/lib.rs @@ -2,6 +2,7 @@ mod util; mod writer; mod parser; mod common; +pub mod templates; pub use util::*; pub use parser::*; diff --git a/crates/ps2-filetypes/src/templates.rs b/crates/ps2-filetypes/src/templates.rs new file mode 100644 index 0000000..5120bcf --- /dev/null +++ b/crates/ps2-filetypes/src/templates.rs @@ -0,0 +1,7 @@ +//! Shared configuration templates bundled with the workspace. + +/// Template `title.cfg` file with the mandatory keys pre-populated. +pub const TITLE_CFG_TEMPLATE: &str = include_str!("../../../assets/templates/title.cfg"); + +/// Template `psu.toml` file with minimal project metadata. +pub const PSU_TOML_TEMPLATE: &str = include_str!("../../../assets/templates/psu.toml"); diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 6d8cc26..fa4c043 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -7,6 +7,7 @@ use std::{ use chrono::NaiveDateTime; use eframe::egui; +use ps2_filetypes::templates; pub mod ui; @@ -265,6 +266,54 @@ impl PackerApp { self.title_cfg_editor.clear(); } + pub(crate) fn create_psu_toml_from_template(&mut self) { + self.create_file_from_template( + "psu.toml", + templates::PSU_TOML_TEMPLATE, + EditorTab::PsuToml, + ); + } + + pub(crate) fn create_title_cfg_from_template(&mut self) { + self.create_file_from_template( + "title.cfg", + templates::TITLE_CFG_TEMPLATE, + EditorTab::TitleCfg, + ); + } + + fn create_file_from_template(&mut self, file_name: &str, template: &str, tab: EditorTab) { + let Some(folder) = self.folder.clone() else { + self.set_error_message(format!( + "Select a folder before creating {file_name} from the template." + )); + return; + }; + + let path = folder.join(file_name); + if path.exists() { + self.set_error_message(format!( + "{} already exists in the selected folder.", + path.display() + )); + return; + } + + if let Err(err) = fs::write(&path, template) { + self.set_error_message(format!("Failed to create {}: {}", path.display(), err)); + return; + } + + self.status = format!("Created {} from template.", path.display()); + self.clear_error_message(); + self.reload_project_files(); + match tab { + EditorTab::PsuSettings => self.open_psu_settings_tab(), + EditorTab::PsuToml => self.open_psu_toml_tab(), + EditorTab::TitleCfg => self.open_title_cfg_tab(), + } + } + pub(crate) fn open_psu_settings_tab(&mut self) { self.editor_tab = EditorTab::PsuSettings; } diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index 6b403be..1d007cc 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -27,6 +27,16 @@ pub(crate) fn file_menu(app: &mut PackerApp, ui: &mut egui::Ui) { app.open_title_cfg_tab(); ui.close_menu(); } + + if ui.button("Create psu.toml from template").clicked() { + app.create_psu_toml_from_template(); + ui.close_menu(); + } + + if ui.button("Create title.cfg from template").clicked() { + app.create_title_cfg_from_template(); + ui.close_menu(); + } }); ui.separator(); diff --git a/crates/suitcase/src/components/menu_bar.rs b/crates/suitcase/src/components/menu_bar.rs index e8b2ea7..305c04d 100644 --- a/crates/suitcase/src/components/menu_bar.rs +++ b/crates/suitcase/src/components/menu_bar.rs @@ -66,6 +66,14 @@ pub fn menu_bar(ui: &mut Ui, app: &mut AppState) { app.save_file(); ui.close_menu(); } + if ui.menu_item("Create psu.toml from template").clicked() { + app.create_psu_toml(); + ui.close_menu(); + } + if ui.menu_item("Create title.cfg from template").clicked() { + app.create_title_cfg(); + ui.close_menu(); + } // ui.separator(); // if ui // .menu_item_shortcut("Create ICN", &CREATE_ICN_KEYBOARD_SHORTCUT) diff --git a/crates/suitcase/src/components/toolbar.rs b/crates/suitcase/src/components/toolbar.rs index 27e81b3..03a6ffa 100644 --- a/crates/suitcase/src/components/toolbar.rs +++ b/crates/suitcase/src/components/toolbar.rs @@ -39,7 +39,7 @@ pub fn toolbar(ui: &mut Ui, app: &mut AppState) -> Response { toolbar_item( ui, include_image!("../../assets/hidpi/main_mk_titlecfg.png"), - "Make title configuration", + "Create title.cfg from template", ) .clicked() .then(|| app.create_title_cfg()); diff --git a/crates/suitcase/src/data/state.rs b/crates/suitcase/src/data/state.rs index 0d0cbc7..d2d41bc 100644 --- a/crates/suitcase/src/data/state.rs +++ b/crates/suitcase/src/data/state.rs @@ -12,6 +12,7 @@ pub enum AppEvent { SaveFile, OpenSave, CreateICN, + CreatePsuToml, CreateTitleCfg, OpenSettings, StartPCSX2, @@ -53,6 +54,9 @@ impl AppState { pub fn create_icn(&mut self) { self.events.push(AppEvent::CreateICN); } + pub fn create_psu_toml(&mut self) { + self.events.push(AppEvent::CreatePsuToml); + } pub fn create_title_cfg(&mut self) { self.events.push(AppEvent::CreateTitleCfg); } diff --git a/crates/suitcase/src/main.rs b/crates/suitcase/src/main.rs index 33430bf..b16a7bd 100644 --- a/crates/suitcase/src/main.rs +++ b/crates/suitcase/src/main.rs @@ -27,7 +27,7 @@ use crate::{ use eframe::egui::{Context, Frame, IconData, Margin, ViewportCommand}; use eframe::{egui, NativeOptions, Storage}; use egui_dock::{AllowedSplits, DockArea, DockState, NodeIndex, SurfaceIndex, TabIndex}; -use ps2_filetypes::TitleCfg; +use ps2_filetypes::templates::{PSU_TOML_TEMPLATE, TITLE_CFG_TEMPLATE}; use std::path::PathBuf; use std::process::Command; @@ -142,6 +142,9 @@ impl PSUBuilderApp { AppEvent::CreateICN => { self.show_create_icn = true; } + AppEvent::CreatePsuToml => { + self.create_psu_toml(); + } AppEvent::CreateTitleCfg => { self.create_title_cfg(); } @@ -286,28 +289,54 @@ impl PSUBuilderApp { } fn create_title_cfg(&mut self) { + let Some(directory) = self.state.opened_folder.clone() else { + return; + }; + if let Some(filepath) = rfd::FileDialog::new() .set_title("Select a folder to create title.cfg in") .set_file_name("title.cfg") .add_filter("title.cfg", &["cfg"]) - .set_directory(self.state.opened_folder.clone().unwrap()) + .set_directory(directory) .save_file() { - std::fs::write( - filepath.clone(), - TitleCfg::new("".to_string()) - .add_missing_fields() - .to_string() - .into_bytes(), - ) - .expect("Failed to title.cfg"); + std::fs::write(&filepath, TITLE_CFG_TEMPLATE) + .expect("Failed to write title.cfg template"); + let file_name = filepath.file_name().unwrap().to_str().unwrap().to_string(); self.handle_open(VirtualFile { - name: filepath.file_name().unwrap().to_str().unwrap().to_string(), + name: file_name, size: 0, file_path: filepath, }); - self.file_tree - .index_folder(&self.state.opened_folder.clone().unwrap()); + if let Some(folder) = &self.state.opened_folder { + self.file_tree.index_folder(folder); + } + } + } + + fn create_psu_toml(&mut self) { + let Some(directory) = self.state.opened_folder.clone() else { + return; + }; + + if let Some(filepath) = rfd::FileDialog::new() + .set_title("Select a folder to create psu.toml in") + .set_file_name("psu.toml") + .add_filter("psu.toml", &["toml"]) + .set_directory(directory) + .save_file() + { + std::fs::write(&filepath, PSU_TOML_TEMPLATE) + .expect("Failed to write psu.toml template"); + let file_name = filepath.file_name().unwrap().to_str().unwrap().to_string(); + self.handle_open(VirtualFile { + name: file_name, + size: 0, + file_path: filepath, + }); + if let Some(folder) = &self.state.opened_folder { + self.file_tree.index_folder(folder); + } } } } From fd5f456ebfde7d00368ade2e0613f564290c3ce5 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 19:20:16 +0000 Subject: [PATCH 037/118] Preserve CRLF pairs when decoding SJIS --- crates/ps2-filetypes/src/common/sjis.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/crates/ps2-filetypes/src/common/sjis.rs b/crates/ps2-filetypes/src/common/sjis.rs index 90698ee..55ef405 100644 --- a/crates/ps2-filetypes/src/common/sjis.rs +++ b/crates/ps2-filetypes/src/common/sjis.rs @@ -32,7 +32,10 @@ pub fn decode_sjis(input: &[u8]) -> String { } } 0x0D => match pair[1] { - 0x0A => str_out.extend_from_slice(b"\r\n"), + 0x0A => { + str_out.push(b'\r'); + str_out.push(b'\n'); + } 0x00 => str_out.push(b'\r'), _ => str_out.push(b'?'), }, @@ -69,21 +72,22 @@ pub fn decode_sjis(input: &[u8]) -> String { mod tests { use super::*; + fn assert_decodes_to(input: [u8; 2], expected: &str) { + assert_eq!(decode_sjis(&input), expected); + } + #[test] fn decode_crlf_preserves_both_characters() { - let input = [0x0D, 0x0A]; - assert_eq!(decode_sjis(&input), "\r\n"); + assert_decodes_to([0x0D, 0x0A], "\r\n"); } #[test] fn decode_cr_only() { - let input = [0x0D, 0x00]; - assert_eq!(decode_sjis(&input), "\r"); + assert_decodes_to([0x0D, 0x00], "\r"); } #[test] fn decode_lf_only() { - let input = [0x0A, 0x00]; - assert_eq!(decode_sjis(&input), "\n"); + assert_decodes_to([0x0A, 0x00], "\n"); } } From 0c30a831d9c9ddf2220eba2023c5e0f73319fbc7 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 20:07:23 +0000 Subject: [PATCH 038/118] Add icon.sys editor tab and presets --- crates/psu-packer-gui/src/lib.rs | 81 ++- crates/psu-packer-gui/src/ui/file_picker.rs | 27 +- crates/psu-packer-gui/src/ui/icon_sys.rs | 531 ++++++++++++++++++ crates/psu-packer-gui/src/ui/mod.rs | 1 + crates/psu-packer-gui/src/ui/pack_controls.rs | 94 ++-- crates/psu-packer/src/lib.rs | 148 ++++- 6 files changed, 809 insertions(+), 73 deletions(-) create mode 100644 crates/psu-packer-gui/src/ui/icon_sys.rs diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index fa4c043..76fc892 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -8,6 +8,7 @@ use std::{ use chrono::NaiveDateTime; use eframe::egui; use ps2_filetypes::templates; +use psu_packer::{ColorConfig, ColorFConfig, IconSysConfig, VectorConfig}; pub mod ui; @@ -34,6 +35,7 @@ enum EditorTab { PsuSettings, PsuToml, TitleCfg, + IconSys, } #[derive(Default)] @@ -100,9 +102,16 @@ pub struct PackerApp { pub(crate) show_exit_confirm: bool, pub(crate) source_present_last_frame: bool, pub(crate) icon_sys_enabled: bool, - pub(crate) icon_sys_title: String, + pub(crate) icon_sys_title_line1: String, + pub(crate) icon_sys_title_line2: String, pub(crate) icon_sys_flag_selection: IconFlagSelection, pub(crate) icon_sys_custom_flag: u16, + pub(crate) icon_sys_background_transparency: u32, + pub(crate) icon_sys_background_colors: [ColorConfig; 4], + pub(crate) icon_sys_light_directions: [VectorConfig; 3], + pub(crate) icon_sys_light_colors: [ColorFConfig; 3], + pub(crate) icon_sys_ambient_color: ColorFConfig, + pub(crate) icon_sys_selected_preset: Option, pack_job: Option, editor_tab: EditorTab, psu_toml_editor: TextFileEditor, @@ -162,9 +171,16 @@ impl Default for PackerApp { show_exit_confirm: false, source_present_last_frame: false, icon_sys_enabled: false, - icon_sys_title: String::new(), + icon_sys_title_line1: String::new(), + icon_sys_title_line2: String::new(), icon_sys_flag_selection: IconFlagSelection::Preset(0), icon_sys_custom_flag: ICON_SYS_FLAG_OPTIONS[0].0, + icon_sys_background_transparency: IconSysConfig::default_background_transparency(), + icon_sys_background_colors: IconSysConfig::default_background_colors(), + icon_sys_light_directions: IconSysConfig::default_light_directions(), + icon_sys_light_colors: IconSysConfig::default_light_colors(), + icon_sys_ambient_color: IconSysConfig::default_ambient_color(), + icon_sys_selected_preset: None, pack_job: None, editor_tab: EditorTab::PsuSettings, psu_toml_editor: TextFileEditor::default(), @@ -197,9 +213,57 @@ impl PackerApp { pub(crate) fn reset_icon_sys_fields(&mut self) { self.icon_sys_enabled = false; - self.icon_sys_title.clear(); + self.icon_sys_title_line1.clear(); + self.icon_sys_title_line2.clear(); self.icon_sys_flag_selection = IconFlagSelection::Preset(0); self.icon_sys_custom_flag = ICON_SYS_FLAG_OPTIONS[0].0; + self.icon_sys_background_transparency = IconSysConfig::default_background_transparency(); + self.icon_sys_background_colors = IconSysConfig::default_background_colors(); + self.icon_sys_light_directions = IconSysConfig::default_light_directions(); + self.icon_sys_light_colors = IconSysConfig::default_light_colors(); + self.icon_sys_ambient_color = IconSysConfig::default_ambient_color(); + self.icon_sys_selected_preset = None; + } + + pub(crate) fn apply_icon_sys_config(&mut self, icon_cfg: psu_packer::IconSysConfig) { + let flag_value = icon_cfg.flags.value(); + self.icon_sys_enabled = true; + self.icon_sys_custom_flag = flag_value; + if let Some(index) = ICON_SYS_FLAG_OPTIONS + .iter() + .position(|(value, _)| *value == flag_value) + { + self.icon_sys_flag_selection = IconFlagSelection::Preset(index); + } else { + self.icon_sys_flag_selection = IconFlagSelection::Custom; + } + + let ascii_chars: Vec = icon_cfg + .title + .chars() + .filter(|c| c.is_ascii() && *c != '\n' && *c != '\r') + .collect(); + let break_index = icon_cfg.linebreak_position() as usize; + let break_index = break_index.min(ascii_chars.len()); + let line1_count = break_index.min(10); + self.icon_sys_title_line1 = ascii_chars.iter().take(line1_count).copied().collect(); + self.icon_sys_title_line2 = ascii_chars + .iter() + .skip(break_index) + .take(10) + .copied() + .collect(); + + self.icon_sys_background_transparency = icon_cfg.background_transparency_value(); + self.icon_sys_background_colors = icon_cfg.background_colors_array(); + self.icon_sys_light_directions = icon_cfg.light_directions_array(); + self.icon_sys_light_colors = icon_cfg.light_colors_array(); + self.icon_sys_ambient_color = icon_cfg.ambient_color_value(); + self.icon_sys_selected_preset = icon_cfg.preset.clone(); + } + + pub(crate) fn clear_icon_sys_preset(&mut self) { + self.icon_sys_selected_preset = None; } pub(crate) fn reset_metadata_fields(&mut self) { @@ -311,6 +375,7 @@ impl PackerApp { EditorTab::PsuSettings => self.open_psu_settings_tab(), EditorTab::PsuToml => self.open_psu_toml_tab(), EditorTab::TitleCfg => self.open_title_cfg_tab(), + EditorTab::IconSys => self.open_icon_sys_tab(), } } @@ -326,6 +391,10 @@ impl PackerApp { self.editor_tab = EditorTab::TitleCfg; } + pub(crate) fn open_icon_sys_tab(&mut self) { + self.editor_tab = EditorTab::IconSys; + } + fn has_source(&self) -> bool { self.folder.is_some() || self.loaded_psu_path.is_some() || !self.loaded_psu_files.is_empty() } @@ -584,6 +653,7 @@ impl eframe::App for PackerApp { "title.cfg" }; ui.selectable_value(&mut self.editor_tab, EditorTab::TitleCfg, title_cfg_label); + ui.selectable_value(&mut self.editor_tab, EditorTab::IconSys, "icon.sys"); }); ui.separator(); @@ -659,6 +729,11 @@ impl eframe::App for PackerApp { } } } + EditorTab::IconSys => { + egui::ScrollArea::vertical().show(ui, |ui| { + ui::icon_sys::icon_sys_editor(self, ui); + }); + } } }); diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index 1d007cc..8295a3e 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -3,7 +3,7 @@ use std::path::Path; use eframe::egui; use ps2_filetypes::{PSUEntryKind, PSU}; -use crate::{IconFlagSelection, PackerApp, ICON_SYS_FLAG_OPTIONS}; +use crate::PackerApp; pub(crate) fn file_menu(app: &mut PackerApp, ui: &mut egui::Ui) { ui.menu_button("File", |ui| { @@ -28,6 +28,11 @@ pub(crate) fn file_menu(app: &mut PackerApp, ui: &mut egui::Ui) { ui.close_menu(); } + if ui.button("Edit icon.sys").clicked() { + app.open_icon_sys_tab(); + ui.close_menu(); + } + if ui.button("Create psu.toml from template").clicked() { app.create_psu_toml_from_template(); ui.close_menu(); @@ -77,19 +82,7 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.selected_include = None; app.selected_exclude = None; if let Some(icon_cfg) = icon_sys { - let psu_packer::IconSysConfig { flags, title, .. } = icon_cfg; - let flag_value = flags.value(); - app.icon_sys_enabled = true; - app.icon_sys_title = title; - app.icon_sys_custom_flag = flag_value; - if let Some(index) = ICON_SYS_FLAG_OPTIONS - .iter() - .position(|(value, _)| *value == flag_value) - { - app.icon_sys_flag_selection = IconFlagSelection::Preset(index); - } else { - app.icon_sys_flag_selection = IconFlagSelection::Custom; - } + app.apply_icon_sys_config(icon_cfg); } else { app.reset_icon_sys_fields(); } @@ -113,7 +106,11 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.loaded_psu_files.clear(); app.folder = Some(folder.clone()); app.reload_project_files(); - app.open_psu_settings_tab(); + if app.icon_sys_enabled { + app.open_icon_sys_tab(); + } else { + app.open_psu_settings_tab(); + } } } }); diff --git a/crates/psu-packer-gui/src/ui/icon_sys.rs b/crates/psu-packer-gui/src/ui/icon_sys.rs new file mode 100644 index 0000000..29ec253 --- /dev/null +++ b/crates/psu-packer-gui/src/ui/icon_sys.rs @@ -0,0 +1,531 @@ +use eframe::egui::{self, Color32}; + +use crate::{IconFlagSelection, PackerApp, ICON_SYS_FLAG_OPTIONS}; +use psu_packer::{ColorConfig, ColorFConfig, IconSysConfig, VectorConfig}; + +const TITLE_CHAR_LIMIT: usize = 10; + +#[derive(Clone, Copy)] +struct IconSysPreset { + id: &'static str, + label: &'static str, + background_transparency: u32, + background_colors: [ColorConfig; 4], + light_directions: [VectorConfig; 3], + light_colors: [ColorFConfig; 3], + ambient_color: ColorFConfig, +} + +const ICON_SYS_PRESETS: &[IconSysPreset] = &[ + IconSysPreset { + id: "default", + label: "Standard (PS2)", + background_transparency: IconSysConfig::default_background_transparency(), + background_colors: IconSysConfig::default_background_colors(), + light_directions: IconSysConfig::default_light_directions(), + light_colors: IconSysConfig::default_light_colors(), + ambient_color: IconSysConfig::default_ambient_color(), + }, + IconSysPreset { + id: "cool_blue", + label: "Cool Blue", + background_transparency: 0, + background_colors: [ + ColorConfig { + r: 0, + g: 32, + b: 96, + a: 0, + }, + ColorConfig { + r: 0, + g: 48, + b: 128, + a: 0, + }, + ColorConfig { + r: 0, + g: 64, + b: 160, + a: 0, + }, + ColorConfig { + r: 0, + g: 16, + b: 48, + a: 0, + }, + ], + light_directions: [ + VectorConfig { + x: 0.0, + y: 0.0, + z: 1.0, + w: 0.0, + }, + VectorConfig { + x: -0.5, + y: -0.5, + z: 0.5, + w: 0.0, + }, + VectorConfig { + x: 0.5, + y: -0.5, + z: 0.5, + w: 0.0, + }, + ], + light_colors: [ + ColorFConfig { + r: 1.0, + g: 1.0, + b: 1.0, + a: 1.0, + }, + ColorFConfig { + r: 0.5, + g: 0.5, + b: 0.6, + a: 1.0, + }, + ColorFConfig { + r: 0.3, + g: 0.3, + b: 0.4, + a: 1.0, + }, + ], + ambient_color: ColorFConfig { + r: 0.2, + g: 0.2, + b: 0.2, + a: 1.0, + }, + }, + IconSysPreset { + id: "warm_sunset", + label: "Warm Sunset", + background_transparency: 0, + background_colors: [ + ColorConfig { + r: 128, + g: 48, + b: 16, + a: 0, + }, + ColorConfig { + r: 176, + g: 72, + b: 32, + a: 0, + }, + ColorConfig { + r: 208, + g: 112, + b: 48, + a: 0, + }, + ColorConfig { + r: 96, + g: 32, + b: 16, + a: 0, + }, + ], + light_directions: [ + VectorConfig { + x: -0.2, + y: -0.4, + z: 0.8, + w: 0.0, + }, + VectorConfig { + x: 0.0, + y: -0.6, + z: 0.6, + w: 0.0, + }, + VectorConfig { + x: 0.3, + y: -0.5, + z: 0.7, + w: 0.0, + }, + ], + light_colors: [ + ColorFConfig { + r: 1.0, + g: 0.9, + b: 0.75, + a: 1.0, + }, + ColorFConfig { + r: 0.9, + g: 0.6, + b: 0.3, + a: 1.0, + }, + ColorFConfig { + r: 0.6, + g: 0.3, + b: 0.2, + a: 1.0, + }, + ], + ambient_color: ColorFConfig { + r: 0.25, + g: 0.18, + b: 0.12, + a: 1.0, + }, + }, +]; + +pub(crate) fn icon_sys_editor(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.heading("icon.sys metadata"); + ui.small("Configure the save icon title, flags, and lighting."); + ui.add_space(8.0); + + let checkbox = ui.checkbox(&mut app.icon_sys_enabled, "Generate icon.sys metadata"); + checkbox.on_hover_text("Automatically creates or updates icon.sys when packing the PSU."); + + ui.add_space(8.0); + + ui.add_enabled_ui(app.icon_sys_enabled, |ui| { + title_section(app, ui); + ui.add_space(12.0); + flag_section(app, ui); + ui.add_space(12.0); + presets_section(app, ui); + ui.add_space(12.0); + background_section(app, ui); + ui.add_space(12.0); + lighting_section(app, ui); + }); +} + +fn title_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Title"); + ui.small("Each line supports up to 10 ASCII characters."); + ui.add_space(4.0); + + egui::Grid::new("icon_sys_title_grid") + .num_columns(2) + .spacing(egui::vec2(8.0, 4.0)) + .show(ui, |ui| { + ui.label("Line 1"); + title_input( + ui, + egui::Id::new("icon_sys_title_line1"), + &mut app.icon_sys_title_line1, + ); + ui.end_row(); + + ui.label("Line 2"); + title_input( + ui, + egui::Id::new("icon_sys_title_line2"), + &mut app.icon_sys_title_line2, + ); + ui.end_row(); + + ui.label("Preview"); + ui.vertical(|ui| { + ui.monospace(format!("{:<10}", app.icon_sys_title_line1)); + ui.monospace(format!("{:<10}", app.icon_sys_title_line2)); + let break_pos = app.icon_sys_title_line1.chars().count(); + ui.small(format!("Line break position: {break_pos}")); + }); + ui.end_row(); + }); + }); +} + +fn title_input(ui: &mut egui::Ui, id: egui::Id, value: &mut String) { + let mut edit = egui::TextEdit::singleline(value) + .char_limit(TITLE_CHAR_LIMIT) + .desired_width(120.0); + edit = edit.id_source(id); + + let response = ui.add(edit); + if response.changed() { + let mut sanitized = value + .chars() + .filter(|c| c.is_ascii() && !c.is_control()) + .collect::(); + if sanitized.len() > TITLE_CHAR_LIMIT { + sanitized.truncate(TITLE_CHAR_LIMIT); + } + if *value != sanitized { + *value = sanitized; + } + } + + ui.small(format!("{} / {TITLE_CHAR_LIMIT}", value.chars().count())); +} + +fn flag_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Flags"); + ui.add_space(4.0); + egui::Grid::new("icon_sys_flag_grid") + .num_columns(2) + .spacing(egui::vec2(8.0, 4.0)) + .show(ui, |ui| { + ui.label("Icon type"); + ui.horizontal(|ui| { + egui::ComboBox::from_id_source("icon_sys_flag_combo") + .selected_text(app.icon_flag_label()) + .show_ui(ui, |ui| { + for (idx, (_, label)) in ICON_SYS_FLAG_OPTIONS.iter().enumerate() { + ui.selectable_value( + &mut app.icon_sys_flag_selection, + IconFlagSelection::Preset(idx), + *label, + ); + } + ui.selectable_value( + &mut app.icon_sys_flag_selection, + IconFlagSelection::Custom, + "Custom…", + ); + }); + + if matches!(app.icon_sys_flag_selection, IconFlagSelection::Custom) { + let response = ui.add( + egui::DragValue::new(&mut app.icon_sys_custom_flag) + .clamp_range(0.0..=u16::MAX as f64) + .speed(1), + ); + response.on_hover_text("Enter the raw flag value (0-65535)."); + ui.label(format!("0x{:04X}", app.icon_sys_custom_flag)); + } + }); + ui.end_row(); + }); + }); +} + +fn presets_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Presets"); + ui.small("Choose a preset to populate the colors and lights automatically."); + ui.add_space(4.0); + + let selected_label = match app.icon_sys_selected_preset.as_deref() { + Some(id) => find_preset(id) + .map(|preset| preset.label.to_string()) + .unwrap_or_else(|| format!("Custom ({id})")), + None => "Manual".to_string(), + }; + + egui::ComboBox::from_id_source("icon_sys_preset_combo") + .selected_text(selected_label) + .show_ui(ui, |ui| { + if ui + .selectable_label(app.icon_sys_selected_preset.is_none(), "Manual") + .clicked() + { + app.clear_icon_sys_preset(); + } + for preset in ICON_SYS_PRESETS { + let selected = app + .icon_sys_selected_preset + .as_deref() + .map(|id| id == preset.id) + .unwrap_or(false); + if ui.selectable_label(selected, preset.label).clicked() { + apply_preset(app, preset); + } + } + }); + + ui.add_space(6.0); + preset_preview(app, ui); + }); +} + +fn preset_preview(app: &PackerApp, ui: &mut egui::Ui) { + ui.vertical(|ui| { + ui.label("Background gradient"); + ui.horizontal(|ui| { + for color in app.icon_sys_background_colors { + draw_color_swatch(ui, color32_from_color_config(color)); + } + }); + + ui.label("Light colors"); + ui.horizontal(|ui| { + for color in app.icon_sys_light_colors { + draw_color_swatch(ui, color32_from_color_f_config(color)); + } + }); + + ui.label("Ambient"); + draw_color_swatch(ui, color32_from_color_f_config(app.icon_sys_ambient_color)); + }); +} + +fn draw_color_swatch(ui: &mut egui::Ui, color: Color32) { + let (rect, _) = ui.allocate_exact_size(egui::vec2(20.0, 14.0), egui::Sense::hover()); + ui.painter().rect_filled(rect, 3.0, color); +} + +fn background_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Background"); + ui.small("Adjust the gradient colors and alpha layer."); + ui.add_space(4.0); + + if ui + .add( + egui::DragValue::new(&mut app.icon_sys_background_transparency) + .clamp_range(0.0..=255.0) + .speed(1) + .suffix(" α"), + ) + .changed() + { + app.clear_icon_sys_preset(); + } + + ui.add_space(4.0); + let mut background_changed = false; + egui::Grid::new("icon_sys_background_grid") + .num_columns(2) + .spacing(egui::vec2(8.0, 4.0)) + .show(ui, |ui| { + for (index, color) in app.icon_sys_background_colors.iter_mut().enumerate() { + ui.label(format!("Color {}", index + 1)); + let mut display = color32_from_color_config(*color); + if ui.color_edit_button_srgba(&mut display).changed() { + *color = color_config_from_color32(display); + background_changed = true; + } + ui.end_row(); + } + }); + if background_changed { + app.clear_icon_sys_preset(); + } + }); +} + +fn lighting_section(app: &mut PackerApp, ui: &mut egui::Ui) { + ui.group(|ui| { + ui.heading("Lighting"); + ui.small("Tweak light directions, colors, and the ambient glow."); + ui.add_space(4.0); + + let mut lighting_changed = false; + + for (index, (color, direction)) in app + .icon_sys_light_colors + .iter_mut() + .zip(app.icon_sys_light_directions.iter_mut()) + .enumerate() + { + let mut light_dirty = false; + ui.collapsing(format!("Light {}", index + 1), |ui| { + ui.label("Color"); + let mut rgba = color_f_config_to_array(*color); + if ui.color_edit_button_rgba_unmultiplied(&mut rgba).changed() { + *color = array_to_color_f_config(rgba); + light_dirty = true; + } + + ui.add_space(4.0); + ui.label("Direction"); + for (label, component) in [ + ("x", &mut direction.x), + ("y", &mut direction.y), + ("z", &mut direction.z), + ("w", &mut direction.w), + ] { + ui.horizontal(|ui| { + ui.label(label); + if ui + .add( + egui::DragValue::new(component) + .clamp_range(-1.0..=1.0) + .speed(0.01), + ) + .changed() + { + light_dirty = true; + } + }); + } + }); + if light_dirty { + lighting_changed = true; + } + ui.add_space(4.0); + } + + ui.label("Ambient color"); + let mut ambient = color_f_config_to_array(app.icon_sys_ambient_color); + if ui + .color_edit_button_rgba_unmultiplied(&mut ambient) + .changed() + { + app.icon_sys_ambient_color = array_to_color_f_config(ambient); + lighting_changed = true; + } + + if lighting_changed { + app.clear_icon_sys_preset(); + } + }); +} + +fn apply_preset(app: &mut PackerApp, preset: &IconSysPreset) { + app.icon_sys_background_transparency = preset.background_transparency; + app.icon_sys_background_colors = preset.background_colors; + app.icon_sys_light_directions = preset.light_directions; + app.icon_sys_light_colors = preset.light_colors; + app.icon_sys_ambient_color = preset.ambient_color; + app.icon_sys_selected_preset = Some(preset.id.to_string()); +} + +fn find_preset(id: &str) -> Option<&'static IconSysPreset> { + ICON_SYS_PRESETS.iter().find(|preset| preset.id == id) +} + +fn color32_from_color_config(color: ColorConfig) -> Color32 { + Color32::from_rgba_unmultiplied(color.r, color.g, color.b, color.a) +} + +fn color32_from_color_f_config(color: ColorFConfig) -> Color32 { + let clamp = |value: f32| -> u8 { (value.clamp(0.0, 1.0) * 255.0).round() as u8 }; + Color32::from_rgba_unmultiplied( + clamp(color.r), + clamp(color.g), + clamp(color.b), + clamp(color.a), + ) +} + +fn color_config_from_color32(color: Color32) -> ColorConfig { + ColorConfig { + r: color.r(), + g: color.g(), + b: color.b(), + a: color.a(), + } +} + +fn color_f_config_to_array(color: ColorFConfig) -> [f32; 4] { + [color.r, color.g, color.b, color.a] +} + +fn array_to_color_f_config(color: [f32; 4]) -> ColorFConfig { + ColorFConfig { + r: color[0], + g: color[1], + b: color[2], + a: color[3], + } +} diff --git a/crates/psu-packer-gui/src/ui/mod.rs b/crates/psu-packer-gui/src/ui/mod.rs index 1dfeb78..eefbd5a 100644 --- a/crates/psu-packer-gui/src/ui/mod.rs +++ b/crates/psu-packer-gui/src/ui/mod.rs @@ -1,3 +1,4 @@ pub mod dialogs; pub mod file_picker; +pub mod icon_sys; pub mod pack_controls; diff --git a/crates/psu-packer-gui/src/ui/pack_controls.rs b/crates/psu-packer-gui/src/ui/pack_controls.rs index c8a75e9..e57065e 100644 --- a/crates/psu-packer-gui/src/ui/pack_controls.rs +++ b/crates/psu-packer-gui/src/ui/pack_controls.rs @@ -4,7 +4,7 @@ use chrono::{Local, NaiveDate, NaiveDateTime, NaiveTime, Timelike}; use eframe::egui; use egui_extras::DatePickerButton; -use crate::{IconFlagSelection, PackerApp, TIMESTAMP_FORMAT}; +use crate::{PackerApp, TIMESTAMP_FORMAT}; pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.group(|ui| { @@ -22,49 +22,12 @@ pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { timestamp_picker_ui(app, ui); ui.end_row(); - ui.label("Icon.sys"); - let checkbox = ui.checkbox(&mut app.icon_sys_enabled, "Generate icon.sys metadata"); - checkbox.on_hover_text("Automatically create or update icon.sys when packing."); - ui.end_row(); - - ui.label("Icon title"); - ui.add_enabled( - app.icon_sys_enabled, - egui::TextEdit::singleline(&mut app.icon_sys_title), - ); - ui.end_row(); - - ui.label("Icon type"); - ui.add_enabled_ui(app.icon_sys_enabled, |ui| { - ui.horizontal(|ui| { - egui::ComboBox::from_id_source("icon_sys_flag_combo") - .selected_text(app.icon_flag_label()) - .show_ui(ui, |ui| { - for (idx, (_, label)) in - crate::ICON_SYS_FLAG_OPTIONS.iter().enumerate() - { - ui.selectable_value( - &mut app.icon_sys_flag_selection, - IconFlagSelection::Preset(idx), - *label, - ); - } - ui.selectable_value( - &mut app.icon_sys_flag_selection, - IconFlagSelection::Custom, - "Custom…", - ); - }); - - if matches!(app.icon_sys_flag_selection, IconFlagSelection::Custom) { - ui.add( - egui::DragValue::new(&mut app.icon_sys_custom_flag) - .clamp_range(0.0..=u16::MAX as f64), - ); - ui.label(format!("0x{:04X}", app.icon_sys_custom_flag)); - } - }); - }); + ui.label("icon.sys"); + let mut label = "Configure icon.sys metadata in the dedicated tab.".to_string(); + if app.icon_sys_enabled { + label.push_str(" Generation is currently enabled."); + } + ui.small(label); ui.end_row(); }); }); @@ -361,21 +324,46 @@ impl PackerApp { }; let icon_sys = if self.icon_sys_enabled { - let title = self.icon_sys_title.trim(); - if title.is_empty() { - return Err("Icon.sys title cannot be empty when enabled".to_string()); + let line1 = self.icon_sys_title_line1.clone(); + let line2 = self.icon_sys_title_line2.clone(); + + if line1.chars().count() > 10 { + return Err("Icon.sys line 1 cannot exceed 10 characters".to_string()); + } + if line2.chars().count() > 10 { + return Err("Icon.sys line 2 cannot exceed 10 characters".to_string()); + } + let title_is_valid = |value: &str| { + value + .chars() + .all(|c| c.is_ascii() && (!c.is_ascii_control() || c == ' ')) + }; + if !title_is_valid(&line1) || !title_is_valid(&line2) { + return Err("Icon.sys titles only support printable ASCII characters".to_string()); + } + + let has_content = line1.chars().any(|c| !c.is_whitespace()) + || line2.chars().any(|c| !c.is_whitespace()); + if !has_content { + return Err( + "Provide at least one non-space character for the icon.sys title".to_string(), + ); } + let combined_title = format!("{line1}{line2}"); + let linebreak_pos = line1.chars().count() as u16; let flag_value = self.selected_icon_flag_value()?; Some(psu_packer::IconSysConfig { flags: psu_packer::IconSysFlags::new(flag_value), - title: title.to_string(), - background_transparency: None, - background_colors: None, - light_directions: None, - light_colors: None, - ambient_color: None, + title: combined_title, + linebreak_pos: Some(linebreak_pos), + preset: self.icon_sys_selected_preset.clone(), + background_transparency: Some(self.icon_sys_background_transparency), + background_colors: Some(self.icon_sys_background_colors.to_vec()), + light_directions: Some(self.icon_sys_light_directions.to_vec()), + light_colors: Some(self.icon_sys_light_colors.to_vec()), + ambient_color: Some(self.icon_sys_ambient_color), }) } else { None diff --git a/crates/psu-packer/src/lib.rs b/crates/psu-packer/src/lib.rs index 67970d1..4137361 100644 --- a/crates/psu-packer/src/lib.rs +++ b/crates/psu-packer/src/lib.rs @@ -67,11 +67,15 @@ impl From for Config { } } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Clone)] pub struct IconSysConfig { pub flags: IconSysFlags, pub title: String, #[serde(default)] + pub linebreak_pos: Option, + #[serde(default)] + pub preset: Option, + #[serde(default)] pub background_transparency: Option, #[serde(default)] pub background_colors: Option>, @@ -143,9 +147,11 @@ impl IconSysConfig { .background_transparency .unwrap_or(DEFAULT_BACKGROUND_TRANSPARENCY); + let linebreak_pos = self.linebreak_pos.unwrap_or(DEFAULT_LINEBREAK_POS); + Ok(IconSys { flags: self.flags.value(), - linebreak_pos: DEFAULT_LINEBREAK_POS, + linebreak_pos, background_transparency, background_colors, light_directions, @@ -159,6 +165,144 @@ impl IconSysConfig { } } +impl IconSysConfig { + pub const fn default_linebreak_pos() -> u16 { + DEFAULT_LINEBREAK_POS + } + + pub const fn default_background_transparency() -> u32 { + DEFAULT_BACKGROUND_TRANSPARENCY + } + + pub const fn default_background_colors() -> [ColorConfig; 4] { + [ + ColorConfig { + r: DEFAULT_BACKGROUND_COLORS[0].r, + g: DEFAULT_BACKGROUND_COLORS[0].g, + b: DEFAULT_BACKGROUND_COLORS[0].b, + a: DEFAULT_BACKGROUND_COLORS[0].a, + }, + ColorConfig { + r: DEFAULT_BACKGROUND_COLORS[1].r, + g: DEFAULT_BACKGROUND_COLORS[1].g, + b: DEFAULT_BACKGROUND_COLORS[1].b, + a: DEFAULT_BACKGROUND_COLORS[1].a, + }, + ColorConfig { + r: DEFAULT_BACKGROUND_COLORS[2].r, + g: DEFAULT_BACKGROUND_COLORS[2].g, + b: DEFAULT_BACKGROUND_COLORS[2].b, + a: DEFAULT_BACKGROUND_COLORS[2].a, + }, + ColorConfig { + r: DEFAULT_BACKGROUND_COLORS[3].r, + g: DEFAULT_BACKGROUND_COLORS[3].g, + b: DEFAULT_BACKGROUND_COLORS[3].b, + a: DEFAULT_BACKGROUND_COLORS[3].a, + }, + ] + } + + pub const fn default_light_directions() -> [VectorConfig; 3] { + [ + VectorConfig { + x: DEFAULT_LIGHT_DIRECTIONS[0].x, + y: DEFAULT_LIGHT_DIRECTIONS[0].y, + z: DEFAULT_LIGHT_DIRECTIONS[0].z, + w: DEFAULT_LIGHT_DIRECTIONS[0].w, + }, + VectorConfig { + x: DEFAULT_LIGHT_DIRECTIONS[1].x, + y: DEFAULT_LIGHT_DIRECTIONS[1].y, + z: DEFAULT_LIGHT_DIRECTIONS[1].z, + w: DEFAULT_LIGHT_DIRECTIONS[1].w, + }, + VectorConfig { + x: DEFAULT_LIGHT_DIRECTIONS[2].x, + y: DEFAULT_LIGHT_DIRECTIONS[2].y, + z: DEFAULT_LIGHT_DIRECTIONS[2].z, + w: DEFAULT_LIGHT_DIRECTIONS[2].w, + }, + ] + } + + pub const fn default_light_colors() -> [ColorFConfig; 3] { + [ + ColorFConfig { + r: DEFAULT_LIGHT_COLORS[0].r, + g: DEFAULT_LIGHT_COLORS[0].g, + b: DEFAULT_LIGHT_COLORS[0].b, + a: DEFAULT_LIGHT_COLORS[0].a, + }, + ColorFConfig { + r: DEFAULT_LIGHT_COLORS[1].r, + g: DEFAULT_LIGHT_COLORS[1].g, + b: DEFAULT_LIGHT_COLORS[1].b, + a: DEFAULT_LIGHT_COLORS[1].a, + }, + ColorFConfig { + r: DEFAULT_LIGHT_COLORS[2].r, + g: DEFAULT_LIGHT_COLORS[2].g, + b: DEFAULT_LIGHT_COLORS[2].b, + a: DEFAULT_LIGHT_COLORS[2].a, + }, + ] + } + + pub const fn default_ambient_color() -> ColorFConfig { + ColorFConfig { + r: DEFAULT_AMBIENT_COLOR.r, + g: DEFAULT_AMBIENT_COLOR.g, + b: DEFAULT_AMBIENT_COLOR.b, + a: DEFAULT_AMBIENT_COLOR.a, + } + } + + pub fn background_transparency_value(&self) -> u32 { + self.background_transparency + .unwrap_or(Self::default_background_transparency()) + } + + pub fn background_colors_array(&self) -> [ColorConfig; 4] { + let mut colors = Self::default_background_colors(); + if let Some(values) = &self.background_colors { + for (target, value) in colors.iter_mut().zip(values.iter()) { + *target = *value; + } + } + colors + } + + pub fn light_directions_array(&self) -> [VectorConfig; 3] { + let mut directions = Self::default_light_directions(); + if let Some(values) = &self.light_directions { + for (target, value) in directions.iter_mut().zip(values.iter()) { + *target = *value; + } + } + directions + } + + pub fn light_colors_array(&self) -> [ColorFConfig; 3] { + let mut colors = Self::default_light_colors(); + if let Some(values) = &self.light_colors { + for (target, value) in colors.iter_mut().zip(values.iter()) { + *target = *value; + } + } + colors + } + + pub fn ambient_color_value(&self) -> ColorFConfig { + self.ambient_color + .unwrap_or_else(Self::default_ambient_color) + } + + pub fn linebreak_position(&self) -> u16 { + self.linebreak_pos.unwrap_or(Self::default_linebreak_pos()) + } +} + #[derive(Debug, Deserialize, Clone, Copy)] pub struct ColorConfig { pub r: u8, From 297c10a8f73270a5e18c6fe2c866733efc008619 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 20:24:05 +0000 Subject: [PATCH 039/118] Configure GUI window size and centering --- crates/psu-packer-gui/src/main.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/crates/psu-packer-gui/src/main.rs b/crates/psu-packer-gui/src/main.rs index 329c592..3cf3849 100644 --- a/crates/psu-packer-gui/src/main.rs +++ b/crates/psu-packer-gui/src/main.rs @@ -1,9 +1,26 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] +use eframe::egui; use psu_packer_gui::PackerApp; +trait NativeOptionsExt { + fn with_centered(self, centered: bool) -> Self; +} + +impl NativeOptionsExt for eframe::NativeOptions { + fn with_centered(mut self, centered: bool) -> Self { + self.centered = centered; + self + } +} + fn main() -> eframe::Result<()> { - let options = eframe::NativeOptions::default(); + let options = eframe::NativeOptions { + viewport: egui::ViewportBuilder::default().with_inner_size([1024.0, 768.0]), + ..Default::default() + } + .with_centered(true); + eframe::run_native( "PSU Packer", options, From 664c59905695a3ec09107aec7d907257f80fb189 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 21:01:27 +0000 Subject: [PATCH 040/118] Support reusing existing icon.sys files --- crates/psu-packer-gui/src/lib.rs | 88 +++++++++++++++++- crates/psu-packer-gui/src/ui/file_picker.rs | 44 ++++++++- crates/psu-packer-gui/src/ui/icon_sys.rs | 43 ++++++++- crates/psu-packer-gui/src/ui/pack_controls.rs | 89 +++++++++++-------- 4 files changed, 217 insertions(+), 47 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 76fc892..4d68a71 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -7,7 +7,7 @@ use std::{ use chrono::NaiveDateTime; use eframe::egui; -use ps2_filetypes::templates; +use ps2_filetypes::{templates, IconSys}; use psu_packer::{ColorConfig, ColorFConfig, IconSysConfig, VectorConfig}; pub mod ui; @@ -112,6 +112,8 @@ pub struct PackerApp { pub(crate) icon_sys_light_colors: [ColorFConfig; 3], pub(crate) icon_sys_ambient_color: ColorFConfig, pub(crate) icon_sys_selected_preset: Option, + pub(crate) icon_sys_use_existing: bool, + pub(crate) icon_sys_existing: Option, pack_job: Option, editor_tab: EditorTab, psu_toml_editor: TextFileEditor, @@ -181,6 +183,8 @@ impl Default for PackerApp { icon_sys_light_colors: IconSysConfig::default_light_colors(), icon_sys_ambient_color: IconSysConfig::default_ambient_color(), icon_sys_selected_preset: None, + icon_sys_use_existing: false, + icon_sys_existing: None, pack_job: None, editor_tab: EditorTab::PsuSettings, psu_toml_editor: TextFileEditor::default(), @@ -213,6 +217,8 @@ impl PackerApp { pub(crate) fn reset_icon_sys_fields(&mut self) { self.icon_sys_enabled = false; + self.icon_sys_use_existing = false; + self.icon_sys_existing = None; self.icon_sys_title_line1.clear(); self.icon_sys_title_line2.clear(); self.icon_sys_flag_selection = IconFlagSelection::Preset(0); @@ -228,6 +234,7 @@ impl PackerApp { pub(crate) fn apply_icon_sys_config(&mut self, icon_cfg: psu_packer::IconSysConfig) { let flag_value = icon_cfg.flags.value(); self.icon_sys_enabled = true; + self.icon_sys_use_existing = false; self.icon_sys_custom_flag = flag_value; if let Some(index) = ICON_SYS_FLAG_OPTIONS .iter() @@ -262,6 +269,85 @@ impl PackerApp { self.icon_sys_selected_preset = icon_cfg.preset.clone(); } + pub(crate) fn apply_icon_sys_file(&mut self, icon_sys: &IconSys) { + let flag_value = icon_sys.flags; + self.icon_sys_enabled = true; + self.icon_sys_use_existing = true; + self.icon_sys_existing = Some(icon_sys.clone()); + self.icon_sys_custom_flag = flag_value; + if let Some(index) = ICON_SYS_FLAG_OPTIONS + .iter() + .position(|(value, _)| *value == flag_value) + { + self.icon_sys_flag_selection = IconFlagSelection::Preset(index); + } else { + self.icon_sys_flag_selection = IconFlagSelection::Custom; + } + + let ascii_chars: Vec = icon_sys + .title + .chars() + .filter(|c| c.is_ascii() && *c != '\n' && *c != '\r') + .collect(); + let break_index = (icon_sys.linebreak_pos as usize).min(ascii_chars.len()); + let line1_count = break_index.min(10); + self.icon_sys_title_line1 = ascii_chars.iter().take(line1_count).copied().collect(); + self.icon_sys_title_line2 = ascii_chars + .iter() + .skip(break_index) + .take(10) + .copied() + .collect(); + + self.icon_sys_background_transparency = icon_sys.background_transparency; + for (target, color) in self + .icon_sys_background_colors + .iter_mut() + .zip(icon_sys.background_colors.iter()) + { + *target = ColorConfig { + r: color.r, + g: color.g, + b: color.b, + a: color.a, + }; + } + + for (target, direction) in self + .icon_sys_light_directions + .iter_mut() + .zip(icon_sys.light_directions.iter()) + { + *target = VectorConfig { + x: direction.x, + y: direction.y, + z: direction.z, + w: direction.w, + }; + } + + for (target, color) in self + .icon_sys_light_colors + .iter_mut() + .zip(icon_sys.light_colors.iter()) + { + *target = ColorFConfig { + r: color.r, + g: color.g, + b: color.b, + a: color.a, + }; + } + + self.icon_sys_ambient_color = ColorFConfig { + r: icon_sys.ambient_color.r, + g: icon_sys.ambient_color.g, + b: icon_sys.ambient_color.b, + a: icon_sys.ambient_color.a, + }; + self.icon_sys_selected_preset = None; + } + pub(crate) fn clear_icon_sys_preset(&mut self) { self.icon_sys_selected_preset = None; } diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index 8295a3e..5410a5a 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -1,7 +1,7 @@ -use std::path::Path; +use std::{fs, path::Path}; use eframe::egui; -use ps2_filetypes::{PSUEntryKind, PSU}; +use ps2_filetypes::{IconSys, PSUEntryKind, PSU}; use crate::PackerApp; @@ -81,13 +81,49 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.exclude_files = exclude.unwrap_or_default(); app.selected_include = None; app.selected_exclude = None; + app.clear_error_message(); + app.status.clear(); + + let has_icon_sys_config = icon_sys.is_some(); if let Some(icon_cfg) = icon_sys { app.apply_icon_sys_config(icon_cfg); } else { app.reset_icon_sys_fields(); } - app.clear_error_message(); - app.status.clear(); + + let icon_sys_path = folder.join("icon.sys"); + if icon_sys_path.is_file() { + match fs::read(&icon_sys_path) { + Ok(bytes) => { + match std::panic::catch_unwind(|| IconSys::new(bytes)) { + Ok(parsed_icon_sys) => { + if has_icon_sys_config { + app.icon_sys_existing = Some(parsed_icon_sys); + } else { + app.apply_icon_sys_file(&parsed_icon_sys); + } + } + Err(_) => { + app.icon_sys_existing = None; + app.set_error_message(format!( + "Failed to parse {} as an icon.sys file.", + icon_sys_path.display() + )); + } + } + } + Err(err) => { + app.icon_sys_existing = None; + app.set_error_message(format!( + "Failed to read {}: {}", + icon_sys_path.display(), + err + )); + } + } + } else if has_icon_sys_config { + app.icon_sys_existing = None; + } } Err(err) => { let message = format_load_error(&folder, err); diff --git a/crates/psu-packer-gui/src/ui/icon_sys.rs b/crates/psu-packer-gui/src/ui/icon_sys.rs index 29ec253..7af2f8a 100644 --- a/crates/psu-packer-gui/src/ui/icon_sys.rs +++ b/crates/psu-packer-gui/src/ui/icon_sys.rs @@ -187,12 +187,49 @@ pub(crate) fn icon_sys_editor(app: &mut PackerApp, ui: &mut egui::Ui) { ui.small("Configure the save icon title, flags, and lighting."); ui.add_space(8.0); - let checkbox = ui.checkbox(&mut app.icon_sys_enabled, "Generate icon.sys metadata"); - checkbox.on_hover_text("Automatically creates or updates icon.sys when packing the PSU."); + let checkbox = ui.checkbox(&mut app.icon_sys_enabled, "Enable icon.sys metadata"); + checkbox + .on_hover_text("Use an existing icon.sys file or generate a new one when packing the PSU."); + + if !app.icon_sys_enabled { + app.icon_sys_use_existing = false; + } else if app.icon_sys_existing.is_none() { + app.icon_sys_use_existing = false; + } + + if app.icon_sys_enabled { + if let Some(existing_icon) = app.icon_sys_existing.clone() { + let previous = app.icon_sys_use_existing; + ui.horizontal(|ui| { + ui.label("Mode:"); + ui.selectable_value( + &mut app.icon_sys_use_existing, + true, + "Use existing icon.sys", + ); + ui.selectable_value( + &mut app.icon_sys_use_existing, + false, + "Generate new icon.sys", + ); + }); + + if app.icon_sys_use_existing && !previous { + app.apply_icon_sys_file(&existing_icon); + } + + if app.icon_sys_use_existing { + ui.small(concat!( + "The existing icon.sys file will be packed without modification. ", + "Switch to \"Generate new icon.sys\" to edit metadata.", + )); + } + } + } ui.add_space(8.0); - ui.add_enabled_ui(app.icon_sys_enabled, |ui| { + ui.add_enabled_ui(app.icon_sys_enabled && !app.icon_sys_use_existing, |ui| { title_section(app, ui); ui.add_space(12.0); flag_section(app, ui); diff --git a/crates/psu-packer-gui/src/ui/pack_controls.rs b/crates/psu-packer-gui/src/ui/pack_controls.rs index e57065e..3459af6 100644 --- a/crates/psu-packer-gui/src/ui/pack_controls.rs +++ b/crates/psu-packer-gui/src/ui/pack_controls.rs @@ -25,7 +25,11 @@ pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.label("icon.sys"); let mut label = "Configure icon.sys metadata in the dedicated tab.".to_string(); if app.icon_sys_enabled { - label.push_str(" Generation is currently enabled."); + if app.icon_sys_use_existing { + label.push_str(" Existing icon.sys file will be reused."); + } else { + label.push_str(" A new icon.sys will be generated."); + } } ui.small(label); ui.end_row(); @@ -324,47 +328,54 @@ impl PackerApp { }; let icon_sys = if self.icon_sys_enabled { - let line1 = self.icon_sys_title_line1.clone(); - let line2 = self.icon_sys_title_line2.clone(); + if self.icon_sys_use_existing { + None + } else { + let line1 = self.icon_sys_title_line1.clone(); + let line2 = self.icon_sys_title_line2.clone(); - if line1.chars().count() > 10 { - return Err("Icon.sys line 1 cannot exceed 10 characters".to_string()); - } - if line2.chars().count() > 10 { - return Err("Icon.sys line 2 cannot exceed 10 characters".to_string()); - } - let title_is_valid = |value: &str| { - value - .chars() - .all(|c| c.is_ascii() && (!c.is_ascii_control() || c == ' ')) - }; - if !title_is_valid(&line1) || !title_is_valid(&line2) { - return Err("Icon.sys titles only support printable ASCII characters".to_string()); - } + if line1.chars().count() > 10 { + return Err("Icon.sys line 1 cannot exceed 10 characters".to_string()); + } + if line2.chars().count() > 10 { + return Err("Icon.sys line 2 cannot exceed 10 characters".to_string()); + } + let title_is_valid = |value: &str| { + value + .chars() + .all(|c| c.is_ascii() && (!c.is_ascii_control() || c == ' ')) + }; + if !title_is_valid(&line1) || !title_is_valid(&line2) { + return Err( + "Icon.sys titles only support printable ASCII characters".to_string() + ); + } - let has_content = line1.chars().any(|c| !c.is_whitespace()) - || line2.chars().any(|c| !c.is_whitespace()); - if !has_content { - return Err( - "Provide at least one non-space character for the icon.sys title".to_string(), - ); - } + let has_content = line1.chars().any(|c| !c.is_whitespace()) + || line2.chars().any(|c| !c.is_whitespace()); + if !has_content { + return Err( + "Provide at least one non-space character for the icon.sys title" + .to_string(), + ); + } - let combined_title = format!("{line1}{line2}"); - let linebreak_pos = line1.chars().count() as u16; - let flag_value = self.selected_icon_flag_value()?; - - Some(psu_packer::IconSysConfig { - flags: psu_packer::IconSysFlags::new(flag_value), - title: combined_title, - linebreak_pos: Some(linebreak_pos), - preset: self.icon_sys_selected_preset.clone(), - background_transparency: Some(self.icon_sys_background_transparency), - background_colors: Some(self.icon_sys_background_colors.to_vec()), - light_directions: Some(self.icon_sys_light_directions.to_vec()), - light_colors: Some(self.icon_sys_light_colors.to_vec()), - ambient_color: Some(self.icon_sys_ambient_color), - }) + let combined_title = format!("{line1}{line2}"); + let linebreak_pos = line1.chars().count() as u16; + let flag_value = self.selected_icon_flag_value()?; + + Some(psu_packer::IconSysConfig { + flags: psu_packer::IconSysFlags::new(flag_value), + title: combined_title, + linebreak_pos: Some(linebreak_pos), + preset: self.icon_sys_selected_preset.clone(), + background_transparency: Some(self.icon_sys_background_transparency), + background_colors: Some(self.icon_sys_background_colors.to_vec()), + light_directions: Some(self.icon_sys_light_directions.to_vec()), + light_colors: Some(self.icon_sys_light_colors.to_vec()), + ambient_color: Some(self.icon_sys_ambient_color), + }) + } } else { None }; From 67e92956721208fe6c7a422e8e592c19edfe19db Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 21:09:45 +0000 Subject: [PATCH 041/118] Add Load PSU button to folder picker --- crates/psu-packer-gui/src/ui/file_picker.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index 5410a5a..1b750ea 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -58,6 +58,9 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.heading("Folder"); ui.small("Select the PSU project folder containing psu.toml."); ui.horizontal(|ui| { + let spacing = ui.spacing().item_spacing.x; + ui.spacing_mut().item_spacing.x = spacing.max(8.0); + if ui .button("Select folder") .on_hover_text("Pick the source directory to load configuration values.") @@ -149,6 +152,14 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { } } } + + if ui + .button("Load PSU...") + .on_hover_text("Open an existing PSU archive to populate the editor from its metadata.") + .clicked() + { + app.handle_open_psu(); + } }); if let Some(folder) = &app.folder { From 9feed49ef35b859d70bd808c79ace5b05bb11208 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 21:40:48 +0000 Subject: [PATCH 042/118] Add psu.toml auto-refresh helper and sync warnings --- crates/psu-packer-gui/src/lib.rs | 4 + crates/psu-packer-gui/src/ui/icon_sys.rs | 96 +++++-- crates/psu-packer-gui/src/ui/pack_controls.rs | 248 +++++++++++------- crates/psu-packer/src/lib.rs | 78 ++++-- 4 files changed, 294 insertions(+), 132 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 4d68a71..66a08c3 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -118,6 +118,7 @@ pub struct PackerApp { editor_tab: EditorTab, psu_toml_editor: TextFileEditor, title_cfg_editor: TextFileEditor, + psu_toml_sync_blocked: bool, } struct ErrorMessage { @@ -189,6 +190,7 @@ impl Default for PackerApp { editor_tab: EditorTab::PsuSettings, psu_toml_editor: TextFileEditor::default(), title_cfg_editor: TextFileEditor::default(), + psu_toml_sync_blocked: false, } } } @@ -406,6 +408,7 @@ impl PackerApp { if let Some(folder) = self.folder.clone() { load_text_file_into_editor(folder.as_path(), "psu.toml", &mut self.psu_toml_editor); load_text_file_into_editor(folder.as_path(), "title.cfg", &mut self.title_cfg_editor); + self.psu_toml_sync_blocked = false; } else { self.clear_text_editors(); } @@ -414,6 +417,7 @@ impl PackerApp { fn clear_text_editors(&mut self) { self.psu_toml_editor.clear(); self.title_cfg_editor.clear(); + self.psu_toml_sync_blocked = false; } pub(crate) fn create_psu_toml_from_template(&mut self) { diff --git a/crates/psu-packer-gui/src/ui/icon_sys.rs b/crates/psu-packer-gui/src/ui/icon_sys.rs index 7af2f8a..48b2917 100644 --- a/crates/psu-packer-gui/src/ui/icon_sys.rs +++ b/crates/psu-packer-gui/src/ui/icon_sys.rs @@ -187,10 +187,17 @@ pub(crate) fn icon_sys_editor(app: &mut PackerApp, ui: &mut egui::Ui) { ui.small("Configure the save icon title, flags, and lighting."); ui.add_space(8.0); + let mut config_changed = false; + let checkbox = ui.checkbox(&mut app.icon_sys_enabled, "Enable icon.sys metadata"); + let checkbox_changed = checkbox.changed(); checkbox .on_hover_text("Use an existing icon.sys file or generate a new one when packing the PSU."); + if checkbox_changed { + config_changed = true; + } + if !app.icon_sys_enabled { app.icon_sys_use_existing = false; } else if app.icon_sys_existing.is_none() { @@ -202,20 +209,27 @@ pub(crate) fn icon_sys_editor(app: &mut PackerApp, ui: &mut egui::Ui) { let previous = app.icon_sys_use_existing; ui.horizontal(|ui| { ui.label("Mode:"); - ui.selectable_value( + let use_existing = ui.selectable_value( &mut app.icon_sys_use_existing, true, "Use existing icon.sys", ); - ui.selectable_value( + if use_existing.changed() { + config_changed = true; + } + let generate_new = ui.selectable_value( &mut app.icon_sys_use_existing, false, "Generate new icon.sys", ); + if generate_new.changed() { + config_changed = true; + } }); if app.icon_sys_use_existing && !previous { app.apply_icon_sys_file(&existing_icon); + config_changed = true; } if app.icon_sys_use_existing { @@ -229,20 +243,32 @@ pub(crate) fn icon_sys_editor(app: &mut PackerApp, ui: &mut egui::Ui) { ui.add_space(8.0); - ui.add_enabled_ui(app.icon_sys_enabled && !app.icon_sys_use_existing, |ui| { - title_section(app, ui); + let enabled = app.icon_sys_enabled && !app.icon_sys_use_existing; + let inner_response = ui.add_enabled_ui(enabled, |ui| { + let mut inner_changed = false; + inner_changed |= title_section(app, ui); ui.add_space(12.0); - flag_section(app, ui); + inner_changed |= flag_section(app, ui); ui.add_space(12.0); - presets_section(app, ui); + inner_changed |= presets_section(app, ui); ui.add_space(12.0); - background_section(app, ui); + inner_changed |= background_section(app, ui); ui.add_space(12.0); - lighting_section(app, ui); + inner_changed |= lighting_section(app, ui); + inner_changed }); + + if inner_response.inner { + config_changed = true; + } + + if config_changed { + app.refresh_psu_toml_editor(); + } } -fn title_section(app: &mut PackerApp, ui: &mut egui::Ui) { +fn title_section(app: &mut PackerApp, ui: &mut egui::Ui) -> bool { + let mut changed = false; ui.group(|ui| { ui.heading("Title"); ui.small("Each line supports up to 10 ASCII characters."); @@ -253,19 +279,23 @@ fn title_section(app: &mut PackerApp, ui: &mut egui::Ui) { .spacing(egui::vec2(8.0, 4.0)) .show(ui, |ui| { ui.label("Line 1"); - title_input( + if title_input( ui, egui::Id::new("icon_sys_title_line1"), &mut app.icon_sys_title_line1, - ); + ) { + changed = true; + } ui.end_row(); ui.label("Line 2"); - title_input( + if title_input( ui, egui::Id::new("icon_sys_title_line2"), &mut app.icon_sys_title_line2, - ); + ) { + changed = true; + } ui.end_row(); ui.label("Preview"); @@ -278,15 +308,17 @@ fn title_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.end_row(); }); }); + changed } -fn title_input(ui: &mut egui::Ui, id: egui::Id, value: &mut String) { +fn title_input(ui: &mut egui::Ui, id: egui::Id, value: &mut String) -> bool { let mut edit = egui::TextEdit::singleline(value) .char_limit(TITLE_CHAR_LIMIT) .desired_width(120.0); edit = edit.id_source(id); let response = ui.add(edit); + let mut changed = false; if response.changed() { let mut sanitized = value .chars() @@ -298,12 +330,15 @@ fn title_input(ui: &mut egui::Ui, id: egui::Id, value: &mut String) { if *value != sanitized { *value = sanitized; } + changed = true; } ui.small(format!("{} / {TITLE_CHAR_LIMIT}", value.chars().count())); + changed } -fn flag_section(app: &mut PackerApp, ui: &mut egui::Ui) { +fn flag_section(app: &mut PackerApp, ui: &mut egui::Ui) -> bool { + let mut changed = false; ui.group(|ui| { ui.heading("Flags"); ui.add_space(4.0); @@ -317,17 +352,23 @@ fn flag_section(app: &mut PackerApp, ui: &mut egui::Ui) { .selected_text(app.icon_flag_label()) .show_ui(ui, |ui| { for (idx, (_, label)) in ICON_SYS_FLAG_OPTIONS.iter().enumerate() { - ui.selectable_value( + let response = ui.selectable_value( &mut app.icon_sys_flag_selection, IconFlagSelection::Preset(idx), *label, ); + if response.changed() { + changed = true; + } } - ui.selectable_value( + let response = ui.selectable_value( &mut app.icon_sys_flag_selection, IconFlagSelection::Custom, "Custom…", ); + if response.changed() { + changed = true; + } }); if matches!(app.icon_sys_flag_selection, IconFlagSelection::Custom) { @@ -336,6 +377,9 @@ fn flag_section(app: &mut PackerApp, ui: &mut egui::Ui) { .clamp_range(0.0..=u16::MAX as f64) .speed(1), ); + if response.changed() { + changed = true; + } response.on_hover_text("Enter the raw flag value (0-65535)."); ui.label(format!("0x{:04X}", app.icon_sys_custom_flag)); } @@ -343,9 +387,11 @@ fn flag_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.end_row(); }); }); + changed } -fn presets_section(app: &mut PackerApp, ui: &mut egui::Ui) { +fn presets_section(app: &mut PackerApp, ui: &mut egui::Ui) -> bool { + let mut changed = false; ui.group(|ui| { ui.heading("Presets"); ui.small("Choose a preset to populate the colors and lights automatically."); @@ -366,6 +412,7 @@ fn presets_section(app: &mut PackerApp, ui: &mut egui::Ui) { .clicked() { app.clear_icon_sys_preset(); + changed = true; } for preset in ICON_SYS_PRESETS { let selected = app @@ -375,6 +422,7 @@ fn presets_section(app: &mut PackerApp, ui: &mut egui::Ui) { .unwrap_or(false); if ui.selectable_label(selected, preset.label).clicked() { apply_preset(app, preset); + changed = true; } } }); @@ -382,6 +430,7 @@ fn presets_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.add_space(6.0); preset_preview(app, ui); }); + changed } fn preset_preview(app: &PackerApp, ui: &mut egui::Ui) { @@ -410,7 +459,8 @@ fn draw_color_swatch(ui: &mut egui::Ui, color: Color32) { ui.painter().rect_filled(rect, 3.0, color); } -fn background_section(app: &mut PackerApp, ui: &mut egui::Ui) { +fn background_section(app: &mut PackerApp, ui: &mut egui::Ui) -> bool { + let mut changed = false; ui.group(|ui| { ui.heading("Background"); ui.small("Adjust the gradient colors and alpha layer."); @@ -426,6 +476,7 @@ fn background_section(app: &mut PackerApp, ui: &mut egui::Ui) { .changed() { app.clear_icon_sys_preset(); + changed = true; } ui.add_space(4.0); @@ -446,11 +497,14 @@ fn background_section(app: &mut PackerApp, ui: &mut egui::Ui) { }); if background_changed { app.clear_icon_sys_preset(); + changed = true; } }); + changed } -fn lighting_section(app: &mut PackerApp, ui: &mut egui::Ui) { +fn lighting_section(app: &mut PackerApp, ui: &mut egui::Ui) -> bool { + let mut changed = false; ui.group(|ui| { ui.heading("Lighting"); ui.small("Tweak light directions, colors, and the ambient glow."); @@ -514,8 +568,10 @@ fn lighting_section(app: &mut PackerApp, ui: &mut egui::Ui) { if lighting_changed { app.clear_icon_sys_preset(); + changed = true; } }); + changed } fn apply_preset(app: &mut PackerApp, preset: &IconSysPreset) { diff --git a/crates/psu-packer-gui/src/ui/pack_controls.rs b/crates/psu-packer-gui/src/ui/pack_controls.rs index 3459af6..9e860b9 100644 --- a/crates/psu-packer-gui/src/ui/pack_controls.rs +++ b/crates/psu-packer-gui/src/ui/pack_controls.rs @@ -15,7 +15,9 @@ pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { .spacing(egui::vec2(12.0, 6.0)) .show(ui, |ui| { ui.label("Name"); - ui.text_edit_singleline(&mut app.name); + if ui.text_edit_singleline(&mut app.name).changed() { + app.refresh_psu_toml_editor(); + } ui.end_row(); ui.label("Timestamp"); @@ -34,26 +36,38 @@ pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.small(label); ui.end_row(); }); + + if app.folder.is_some() && app.psu_toml_sync_blocked { + ui.add_space(6.0); + ui.colored_label( + egui::Color32::YELLOW, + "psu.toml has manual edits; automatic metadata syncing is paused.", + ); + } }); } fn timestamp_picker_ui(app: &mut PackerApp, ui: &mut egui::Ui) { ui.vertical(|ui| { + let previous_timestamp = app.timestamp; let default_timestamp = default_timestamp(); let mut has_timestamp = app.timestamp.is_some(); + let mut new_timestamp = app.timestamp; + if ui.checkbox(&mut has_timestamp, "Set timestamp").changed() { if has_timestamp { - app.timestamp = Some(app.timestamp.unwrap_or(default_timestamp)); + new_timestamp = Some(new_timestamp.unwrap_or(default_timestamp)); } else { - app.timestamp = None; + new_timestamp = None; } } if !has_timestamp { ui.small("No timestamp will be saved."); + new_timestamp = None; } else { - let mut timestamp = app.timestamp.unwrap_or(default_timestamp); + let mut timestamp = new_timestamp.unwrap_or(default_timestamp); let mut date: NaiveDate = timestamp.date(); let time = timestamp.time(); let mut hour = time.hour(); @@ -97,12 +111,18 @@ fn timestamp_picker_ui(app: &mut PackerApp, ui: &mut egui::Ui) { } } - app.timestamp = Some(timestamp); + new_timestamp = Some(timestamp); - if let Some(ts) = app.timestamp { + if let Some(ts) = new_timestamp { ui.small(format!("Selected: {}", ts.format(TIMESTAMP_FORMAT))); } } + + app.timestamp = new_timestamp; + + if app.timestamp != previous_timestamp { + app.refresh_psu_toml_editor(); + } }); } @@ -123,11 +143,11 @@ pub(crate) fn file_filters_section(app: &mut PackerApp, ui: &mut egui::Ui) { &mut app.include_files, &mut app.selected_include, ); - if include_add { - app.handle_add_file(ListKind::Include); + if include_add && app.handle_add_file(ListKind::Include) { + app.refresh_psu_toml_editor(); } - if include_remove { - app.handle_remove_file(ListKind::Include); + if include_remove && app.handle_remove_file(ListKind::Include) { + app.refresh_psu_toml_editor(); } let (exclude_add, exclude_remove) = file_list_ui( @@ -136,11 +156,11 @@ pub(crate) fn file_filters_section(app: &mut PackerApp, ui: &mut egui::Ui) { &mut app.exclude_files, &mut app.selected_exclude, ); - if exclude_add { - app.handle_add_file(ListKind::Exclude); + if exclude_add && app.handle_add_file(ListKind::Exclude) { + app.refresh_psu_toml_editor(); } - if exclude_remove { - app.handle_remove_file(ListKind::Exclude); + if exclude_remove && app.handle_remove_file(ListKind::Exclude) { + app.refresh_psu_toml_editor(); } }); } else { @@ -313,80 +333,8 @@ impl PackerApp { } pub(crate) fn build_config(&self) -> Result { - let timestamp = self.timestamp; - - let include = if self.include_files.is_empty() { - None - } else { - Some(self.include_files.clone()) - }; - - let exclude = if self.exclude_files.is_empty() { - None - } else { - Some(self.exclude_files.clone()) - }; - - let icon_sys = if self.icon_sys_enabled { - if self.icon_sys_use_existing { - None - } else { - let line1 = self.icon_sys_title_line1.clone(); - let line2 = self.icon_sys_title_line2.clone(); - - if line1.chars().count() > 10 { - return Err("Icon.sys line 1 cannot exceed 10 characters".to_string()); - } - if line2.chars().count() > 10 { - return Err("Icon.sys line 2 cannot exceed 10 characters".to_string()); - } - let title_is_valid = |value: &str| { - value - .chars() - .all(|c| c.is_ascii() && (!c.is_ascii_control() || c == ' ')) - }; - if !title_is_valid(&line1) || !title_is_valid(&line2) { - return Err( - "Icon.sys titles only support printable ASCII characters".to_string() - ); - } - - let has_content = line1.chars().any(|c| !c.is_whitespace()) - || line2.chars().any(|c| !c.is_whitespace()); - if !has_content { - return Err( - "Provide at least one non-space character for the icon.sys title" - .to_string(), - ); - } - - let combined_title = format!("{line1}{line2}"); - let linebreak_pos = line1.chars().count() as u16; - let flag_value = self.selected_icon_flag_value()?; - - Some(psu_packer::IconSysConfig { - flags: psu_packer::IconSysFlags::new(flag_value), - title: combined_title, - linebreak_pos: Some(linebreak_pos), - preset: self.icon_sys_selected_preset.clone(), - background_transparency: Some(self.icon_sys_background_transparency), - background_colors: Some(self.icon_sys_background_colors.to_vec()), - light_directions: Some(self.icon_sys_light_directions.to_vec()), - light_colors: Some(self.icon_sys_light_colors.to_vec()), - ambient_color: Some(self.icon_sys_ambient_color), - }) - } - } else { - None - }; - - Ok(psu_packer::Config { - name: self.name.clone(), - timestamp, - include, - exclude, - icon_sys, - }) + self.validate_icon_sys_settings()?; + self.config_from_state() } pub(crate) fn format_pack_error( @@ -439,25 +387,26 @@ impl PackerApp { } } - pub(crate) fn handle_add_file(&mut self, kind: ListKind) { + pub(crate) fn handle_add_file(&mut self, kind: ListKind) -> bool { let Some(folder) = self.folder.clone() else { self.set_error_message("Please select a folder before adding files"); - return; + return false; }; let list_label = kind.label(); let (files, selected) = self.list_mut(kind); let Some(paths) = rfd::FileDialog::new().set_directory(&folder).pick_files() else { - return; + return false; }; if paths.is_empty() { - return; + return false; } let mut invalid_entries = Vec::new(); let mut last_added = None; + let mut added_any = false; for path in paths { let Ok(relative) = path.strip_prefix(&folder) else { @@ -490,6 +439,7 @@ impl PackerApp { files.push(name); last_added = Some(files.len() - 1); + added_any = true; } if let Some(index) = last_added { @@ -505,12 +455,16 @@ impl PackerApp { let message = format!("Some files could not be added to the {list_label} list"); self.set_error_message((message, invalid_entries)); } + + added_any } - pub(crate) fn handle_remove_file(&mut self, kind: ListKind) { + pub(crate) fn handle_remove_file(&mut self, kind: ListKind) -> bool { let (files, selected) = self.list_mut(kind); + let mut removed = false; if let Some(idx) = selected.take() { files.remove(idx); + removed = true; if files.is_empty() { *selected = None; } else if idx >= files.len() { @@ -519,6 +473,7 @@ impl PackerApp { *selected = Some(idx); } } + removed } fn list_mut(&mut self, kind: ListKind) -> (&mut Vec, &mut Option) { @@ -527,4 +482,111 @@ impl PackerApp { ListKind::Exclude => (&mut self.exclude_files, &mut self.selected_exclude), } } + + fn validate_icon_sys_settings(&self) -> Result<(), String> { + if self.icon_sys_enabled && !self.icon_sys_use_existing { + let line1 = &self.icon_sys_title_line1; + let line2 = &self.icon_sys_title_line2; + + if line1.chars().count() > 10 { + return Err("Icon.sys line 1 cannot exceed 10 characters".to_string()); + } + if line2.chars().count() > 10 { + return Err("Icon.sys line 2 cannot exceed 10 characters".to_string()); + } + let title_is_valid = |value: &str| { + value + .chars() + .all(|c| c.is_ascii() && (!c.is_ascii_control() || c == ' ')) + }; + if !title_is_valid(line1) || !title_is_valid(line2) { + return Err("Icon.sys titles only support printable ASCII characters".to_string()); + } + + let has_content = line1.chars().any(|c| !c.is_whitespace()) + || line2.chars().any(|c| !c.is_whitespace()); + if !has_content { + return Err( + "Provide at least one non-space character for the icon.sys title".to_string(), + ); + } + + self.selected_icon_flag_value()?; + } + + Ok(()) + } + + fn config_from_state(&self) -> Result { + let include = if self.include_files.is_empty() { + None + } else { + Some(self.include_files.clone()) + }; + + let exclude = if self.exclude_files.is_empty() { + None + } else { + Some(self.exclude_files.clone()) + }; + + let icon_sys = if self.icon_sys_enabled && !self.icon_sys_use_existing { + let linebreak_pos = self.icon_sys_title_line1.chars().count() as u16; + let combined_title = + format!("{}{}", self.icon_sys_title_line1, self.icon_sys_title_line2); + let flag_value = self.selected_icon_flag_value()?; + + Some(psu_packer::IconSysConfig { + flags: psu_packer::IconSysFlags::new(flag_value), + title: combined_title, + linebreak_pos: Some(linebreak_pos), + preset: self.icon_sys_selected_preset.clone(), + background_transparency: Some(self.icon_sys_background_transparency), + background_colors: Some(self.icon_sys_background_colors.to_vec()), + light_directions: Some(self.icon_sys_light_directions.to_vec()), + light_colors: Some(self.icon_sys_light_colors.to_vec()), + ambient_color: Some(self.icon_sys_ambient_color), + }) + } else { + None + }; + + Ok(psu_packer::Config { + name: self.name.clone(), + timestamp: self.timestamp, + include, + exclude, + icon_sys, + }) + } + + pub(crate) fn refresh_psu_toml_editor(&mut self) { + if self.folder.is_none() { + self.psu_toml_sync_blocked = false; + return; + } + + if self.psu_toml_editor.modified { + self.psu_toml_sync_blocked = true; + return; + } + + let config = match self.config_from_state() { + Ok(config) => config, + Err(_) => { + self.psu_toml_sync_blocked = true; + return; + } + }; + + match config.to_toml_string() { + Ok(serialized) => { + self.psu_toml_editor.set_content(serialized); + self.psu_toml_sync_blocked = false; + } + Err(_) => { + self.psu_toml_sync_blocked = true; + } + } + } } diff --git a/crates/psu-packer/src/lib.rs b/crates/psu-packer/src/lib.rs index 4137361..8e84efe 100644 --- a/crates/psu-packer/src/lib.rs +++ b/crates/psu-packer/src/lib.rs @@ -4,7 +4,7 @@ use ps2_filetypes::color::Color; use ps2_filetypes::{ ColorF, IconSys, PSUEntry, PSUEntryKind, PSUWriter, Vector, DIR_ID, FILE_ID, PSU, }; -use serde::{Deserialize, Deserializer}; +use serde::{Deserialize, Deserializer, Serialize, Serializer}; use std::collections::HashSet; use std::path::{Path, PathBuf}; use std::time::{SystemTime, UNIX_EPOCH}; @@ -20,7 +20,19 @@ pub struct Config { mod date_format { use chrono::NaiveDateTime; - use serde::{self, Deserialize, Deserializer}; + use serde::{self, Deserialize, Deserializer, Serializer}; + + const FORMAT: &str = "%Y-%m-%d %H:%M:%S"; + + pub fn serialize(value: &Option, serializer: S) -> Result + where + S: Serializer, + { + match value { + Some(value) => serializer.serialize_some(&value.format(FORMAT).to_string()), + None => serializer.serialize_none(), + } + } pub fn deserialize<'de, D>(deserialize: D) -> Result, D::Error> where @@ -29,8 +41,7 @@ mod date_format { let s: Option = Option::deserialize(deserialize)?; if let Some(s) = s { Ok(Some( - NaiveDateTime::parse_from_str(&s, "%Y-%m-%d %H:%M:%S") - .map_err(serde::de::Error::custom)?, + NaiveDateTime::parse_from_str(&s, FORMAT).map_err(serde::de::Error::custom)?, )) } else { Ok(None) @@ -38,19 +49,21 @@ mod date_format { } } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] struct ConfigFile { config: ConfigSection, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] icon_sys: Option, } -#[derive(Debug, Deserialize)] +#[derive(Debug, Deserialize, Serialize)] struct ConfigSection { name: String, - #[serde(default, with = "date_format")] + #[serde(default, with = "date_format", skip_serializing_if = "Option::is_none")] timestamp: Option, + #[serde(skip_serializing_if = "Option::is_none")] include: Option>, + #[serde(skip_serializing_if = "Option::is_none")] exclude: Option>, } @@ -67,23 +80,41 @@ impl From for Config { } } -#[derive(Debug, Deserialize, Clone)] +impl Config { + pub fn to_toml_string(&self) -> Result { + let config_section = ConfigSection { + name: self.name.clone(), + timestamp: self.timestamp, + include: self.include.clone(), + exclude: self.exclude.clone(), + }; + + let config_file = ConfigFile { + config: config_section, + icon_sys: self.icon_sys.clone(), + }; + + toml::to_string_pretty(&config_file) + } +} + +#[derive(Debug, Deserialize, Serialize, Clone)] pub struct IconSysConfig { pub flags: IconSysFlags, pub title: String, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub linebreak_pos: Option, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub preset: Option, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub background_transparency: Option, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub background_colors: Option>, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub light_directions: Option>, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub light_colors: Option>, - #[serde(default)] + #[serde(default, skip_serializing_if = "Option::is_none")] pub ambient_color: Option, } @@ -303,7 +334,7 @@ impl IconSysConfig { } } -#[derive(Debug, Deserialize, Clone, Copy)] +#[derive(Debug, Deserialize, Serialize, Clone, Copy)] pub struct ColorConfig { pub r: u8, pub g: u8, @@ -322,7 +353,7 @@ impl From for Color { } } -#[derive(Debug, Deserialize, Clone, Copy)] +#[derive(Debug, Deserialize, Serialize, Clone, Copy)] pub struct ColorFConfig { pub r: f32, pub g: f32, @@ -341,7 +372,7 @@ impl From for ColorF { } } -#[derive(Debug, Deserialize, Clone, Copy)] +#[derive(Debug, Deserialize, Serialize, Clone, Copy)] pub struct VectorConfig { pub x: f32, pub y: f32, @@ -440,6 +471,15 @@ impl<'de> Deserialize<'de> for IconSysFlags { } } +impl Serialize for IconSysFlags { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + serializer.serialize_u16(self.value()) + } +} + fn parse_flag_string(value: &str) -> Result { let trimmed = value.trim(); if let Some(mapped) = parse_named_flag(trimmed) { From 15244c91f2ce02b3ef111e06a031f5cf77a2fefa Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 22:08:15 +0000 Subject: [PATCH 043/118] Trim icon.sys flag presets to supported options --- crates/psu-packer-gui/src/lib.rs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 66a08c3..815cb37 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -16,12 +16,9 @@ pub use ui::{dialogs, file_picker, pack_controls}; pub(crate) const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; pub(crate) const ICON_SYS_FLAG_OPTIONS: &[(u16, &str)] = &[ - (0, "PS2 Save File"), - (1, "Software (PS2)"), - (2, "Unrecognized (0x02)"), - (3, "Software (Pocketstation)"), - (4, "Settings (PS2)"), - (5, "System Driver"), + (0, "Save Data"), + (1, "System Software"), + (4, "Settings"), ]; #[derive(Clone, Copy, PartialEq, Eq)] From cd8712ce4487c6054f637fdea66390d7c3211a77 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 22:47:29 +0000 Subject: [PATCH 044/118] Add SAS prefix selection and split PSU metadata names --- crates/psu-packer-gui/src/lib.rs | 158 +++++++++++++++++- crates/psu-packer-gui/src/ui/file_picker.rs | 22 ++- crates/psu-packer-gui/src/ui/pack_controls.rs | 65 ++++++- 3 files changed, 225 insertions(+), 20 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 815cb37..4918305 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -15,12 +15,80 @@ pub mod ui; pub use ui::{dialogs, file_picker, pack_controls}; pub(crate) const TIMESTAMP_FORMAT: &str = "%Y-%m-%d %H:%M:%S"; -pub(crate) const ICON_SYS_FLAG_OPTIONS: &[(u16, &str)] = &[ - (0, "Save Data"), - (1, "System Software"), - (4, "Settings"), +pub(crate) const ICON_SYS_FLAG_OPTIONS: &[(u16, &str)] = + &[(0, "Save Data"), (1, "System Software"), (4, "Settings")]; + +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub(crate) enum SasPrefix { + None, + App, + Apps, + Ps1, + Ps2, + Ps3, + Ps4, + Ps5, + Psp, + Psv, +} + +pub(crate) const SAS_PREFIXES: [SasPrefix; 9] = [ + SasPrefix::App, + SasPrefix::Apps, + SasPrefix::Ps1, + SasPrefix::Ps2, + SasPrefix::Ps3, + SasPrefix::Ps4, + SasPrefix::Ps5, + SasPrefix::Psp, + SasPrefix::Psv, ]; +impl Default for SasPrefix { + fn default() -> Self { + SasPrefix::App + } +} + +impl SasPrefix { + pub const fn as_str(self) -> &'static str { + match self { + SasPrefix::None => "", + SasPrefix::App => "APP_", + SasPrefix::Apps => "APPS", + SasPrefix::Ps1 => "PS1_", + SasPrefix::Ps2 => "PS2_", + SasPrefix::Ps3 => "PS3_", + SasPrefix::Ps4 => "PS4_", + SasPrefix::Ps5 => "PS5_", + SasPrefix::Psp => "PSP_", + SasPrefix::Psv => "PSV_", + } + } + + pub const fn label(self) -> &'static str { + match self { + SasPrefix::None => "(none)", + _ => self.as_str(), + } + } + + pub(crate) fn iter_all() -> impl Iterator { + std::iter::once(SasPrefix::None).chain(SAS_PREFIXES.iter().copied()) + } + + pub(crate) fn split_from_name(name: &str) -> (SasPrefix, &str) { + for prefix in SAS_PREFIXES { + let value = prefix.as_str(); + if name.starts_with(value) { + let remainder = &name[value.len()..]; + return (prefix, remainder); + } + } + (SasPrefix::None, name) + } +} + #[derive(Clone, Copy, PartialEq, Eq)] pub(crate) enum IconFlagSelection { Preset(usize), @@ -88,7 +156,9 @@ pub struct PackerApp { pub(crate) output: String, pub(crate) status: String, pub(crate) error_message: Option, - pub(crate) name: String, + pub(crate) selected_prefix: SasPrefix, + pub(crate) folder_base_name: String, + pub(crate) psu_file_base_name: String, pub(crate) timestamp: Option, pub(crate) include_files: Vec, pub(crate) exclude_files: Vec, @@ -160,7 +230,9 @@ impl Default for PackerApp { output: String::new(), status: String::new(), error_message: None, - name: String::new(), + selected_prefix: SasPrefix::default(), + folder_base_name: String::new(), + psu_file_base_name: String::new(), timestamp: None, include_files: Vec::new(), exclude_files: Vec::new(), @@ -352,7 +424,9 @@ impl PackerApp { } pub(crate) fn reset_metadata_fields(&mut self) { - self.name.clear(); + self.selected_prefix = SasPrefix::default(); + self.folder_base_name.clear(); + self.psu_file_base_name.clear(); self.timestamp = None; self.include_files.clear(); self.exclude_files.clear(); @@ -361,6 +435,76 @@ impl PackerApp { self.reset_icon_sys_fields(); } + pub(crate) fn folder_name(&self) -> String { + let mut name = String::from(self.selected_prefix.as_str()); + name.push_str(&self.folder_base_name); + name + } + + pub(crate) fn psu_file_stem(&self) -> String { + let mut stem = String::from(self.selected_prefix.as_str()); + stem.push_str(&self.psu_file_base_name); + stem + } + + pub(crate) fn default_output_file_name(&self) -> Option { + let stem = self.psu_file_stem(); + if stem.is_empty() { + None + } else { + Some(format!("{stem}.psu")) + } + } + + fn update_output_if_matches_default(&mut self, previous_default_output: Option) { + let should_update = if self.output.trim().is_empty() { + true + } else if let Some(previous_default) = previous_default_output { + Path::new(&self.output) + .file_name() + .and_then(|name| name.to_str()) + .map(|name| name == previous_default) + .unwrap_or(false) + } else { + false + }; + + if should_update { + match self.default_output_file_name() { + Some(file_name) => { + if let Some(parent) = Path::new(&self.output).parent() { + if !parent.as_os_str().is_empty() { + self.output = parent.join(&file_name).display().to_string(); + return; + } + } + self.output = file_name; + } + None => self.output.clear(), + } + } + } + + pub(crate) fn metadata_inputs_changed(&mut self, previous_default_output: Option) { + self.update_output_if_matches_default(previous_default_output); + self.refresh_psu_toml_editor(); + } + + pub(crate) fn set_folder_name_from_full(&mut self, name: &str) { + let (prefix, remainder) = SasPrefix::split_from_name(name); + self.selected_prefix = prefix; + self.folder_base_name = remainder.to_string(); + } + + pub(crate) fn set_psu_file_base_from_full(&mut self, file_stem: &str) { + let (prefix, remainder) = SasPrefix::split_from_name(file_stem); + if prefix == SasPrefix::None || prefix == self.selected_prefix { + self.psu_file_base_name = remainder.to_string(); + } else { + self.psu_file_base_name = file_stem.to_string(); + } + } + pub(crate) fn icon_flag_label(&self) -> String { match self.icon_sys_flag_selection { IconFlagSelection::Preset(index) => ICON_SYS_FLAG_OPTIONS diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index 1b750ea..596281c 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -3,7 +3,7 @@ use std::{fs, path::Path}; use eframe::egui; use ps2_filetypes::{IconSys, PSUEntryKind, PSU}; -use crate::PackerApp; +use crate::{PackerApp, SasPrefix}; pub(crate) fn file_menu(app: &mut PackerApp, ui: &mut egui::Ui) { ui.menu_button("File", |ui| { @@ -77,8 +77,9 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { icon_sys, } = config; - app.output = format!("{}.psu", name); - app.name = name; + app.set_folder_name_from_full(&name); + app.psu_file_base_name = app.folder_base_name.clone(); + app.output = app.default_output_file_name().unwrap_or_default(); app.timestamp = timestamp; app.include_files = include.unwrap_or_default(); app.exclude_files = exclude.unwrap_or_default(); @@ -132,7 +133,9 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { let message = format_load_error(&folder, err); app.set_error_message(message); app.output.clear(); - app.name.clear(); + app.selected_prefix = SasPrefix::default(); + app.folder_base_name.clear(); + app.psu_file_base_name.clear(); app.timestamp = None; app.include_files.clear(); app.exclude_files.clear(); @@ -155,7 +158,9 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { if ui .button("Load PSU...") - .on_hover_text("Open an existing PSU archive to populate the editor from its metadata.") + .on_hover_text( + "Open an existing PSU archive to populate the editor from its metadata.", + ) .clicked() { app.handle_open_psu(); @@ -236,7 +241,12 @@ impl PackerApp { return; }; - self.name = name; + self.set_folder_name_from_full(&name); + if let Some(stem) = path.file_stem().and_then(|stem| stem.to_str()) { + self.set_psu_file_base_from_full(stem); + } else { + self.psu_file_base_name = self.folder_base_name.clone(); + } self.timestamp = root_timestamp; self.loaded_psu_files = files; self.loaded_psu_path = Some(path.clone()); diff --git a/crates/psu-packer-gui/src/ui/pack_controls.rs b/crates/psu-packer-gui/src/ui/pack_controls.rs index 9e860b9..ef2bce2 100644 --- a/crates/psu-packer-gui/src/ui/pack_controls.rs +++ b/crates/psu-packer-gui/src/ui/pack_controls.rs @@ -4,19 +4,55 @@ use chrono::{Local, NaiveDate, NaiveDateTime, NaiveTime, Timelike}; use eframe::egui; use egui_extras::DatePickerButton; -use crate::{PackerApp, TIMESTAMP_FORMAT}; +use crate::{PackerApp, SasPrefix, TIMESTAMP_FORMAT}; pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.group(|ui| { ui.heading("Metadata"); ui.small("Edit PSU metadata before or after selecting a folder."); + let previous_default_output = app.default_output_file_name(); + let mut metadata_changed = false; + egui::Grid::new("metadata_grid") .num_columns(2) .spacing(egui::vec2(12.0, 6.0)) .show(ui, |ui| { - ui.label("Name"); - if ui.text_edit_singleline(&mut app.name).changed() { - app.refresh_psu_toml_editor(); + ui.label("SAS prefix"); + let prefix_changed = egui::ComboBox::from_id_source("metadata_prefix_combo") + .selected_text(app.selected_prefix.label()) + .show_ui(ui, |ui| { + let mut changed = false; + for prefix in SasPrefix::iter_all() { + let response = ui.selectable_value( + &mut app.selected_prefix, + prefix, + prefix.label(), + ); + if response.changed() { + changed = true; + } + } + changed + }) + .inner + .unwrap_or(false); + if prefix_changed { + metadata_changed = true; + } + ui.end_row(); + + ui.label("Folder name"); + if ui.text_edit_singleline(&mut app.folder_base_name).changed() { + metadata_changed = true; + } + ui.end_row(); + + ui.label("PSU filename"); + if ui + .text_edit_singleline(&mut app.psu_file_base_name) + .changed() + { + metadata_changed = true; } ui.end_row(); @@ -37,6 +73,10 @@ pub(crate) fn metadata_section(app: &mut PackerApp, ui: &mut egui::Ui) { ui.end_row(); }); + if metadata_changed { + app.metadata_inputs_changed(previous_default_output); + } + if app.folder.is_some() && app.psu_toml_sync_blocked { ui.add_space(6.0); ui.colored_label( @@ -205,8 +245,13 @@ pub(crate) fn packaging_section(app: &mut PackerApp, ui: &mut egui::Ui) { if pack_button.clicked() { if let Some(folder) = &app.folder { - if app.name.trim().is_empty() { - app.set_error_message("Please provide a PSU name"); + if app.folder_base_name.trim().is_empty() { + app.set_error_message("Please provide a folder name"); + return; + } + + if app.psu_file_base_name.trim().is_empty() { + app.set_error_message("Please provide a PSU filename"); return; } @@ -551,8 +596,14 @@ impl PackerApp { None }; + if self.folder_base_name.trim().is_empty() { + return Err("PSU name cannot be empty".to_string()); + } + + let name = self.folder_name(); + Ok(psu_packer::Config { - name: self.name.clone(), + name, timestamp: self.timestamp, include, exclude, From 6433284fbc769d69f5b7f93a26136dcc542cc0af Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 23:37:10 +0000 Subject: [PATCH 045/118] external python tool modded from R3Z3N's. --- timestampdiscrepancyfixtest1.py | 395 ++++++++++++++++++++++++++++++++ 1 file changed, 395 insertions(+) create mode 100644 timestampdiscrepancyfixtest1.py diff --git a/timestampdiscrepancyfixtest1.py b/timestampdiscrepancyfixtest1.py new file mode 100644 index 0000000..6dcb5b4 --- /dev/null +++ b/timestampdiscrepancyfixtest1.py @@ -0,0 +1,395 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" +SAS-TIMESTAMPS (FAT-safe ordering, free-form PS2 bias, dash-ignoring, slots-per-category config) + +Windows-only utility: deterministically set creation/modified/access times so root-level +folders (and everything inside them) are ordered newest→oldest by a stable mapping from +folder name → timestamp. Timestamps are accurate to FAT/VFAT realities. + +Key behavior: +- Base time = 12/31/2098 23:59:59 (LOCAL). We subtract a deterministic offset per folder. +- Newest → oldest category blocks in this order: + APP_* → APPS → PS1_* → EMU_* → GME_* → DST_* → DBG_* → RAA_* → RTE_* → DEFAULT → SYS_* → ZZY_* → ZZZ_* +- Unprefixed special names are mapped to an **effective**, prefixed name (e.g., BOOT → SYS_BOOT) + and that **effective** name is used both for: + (1) category selection, + (2) within-category alphabetical ordering. +- **Dashes ('-') are ignored for ordering** (removed before lex ordering). +- **FAT-safe mode** (`--fat-safe`): snaps all timestamps to **even seconds** (microseconds=0) and uses **2 s spacing**, + matching FAT/VFAT mtime precision and preventing copy/rounding drift. +- **PS2 bias** (`--ps2-bias-seconds`): applies an additional signed seconds offset so the PS2 browser's displayed times + match Windows Explorer display exactly, even if the PS2 reader/RTC applies a nonstandard skew. +- Dry-run (`--dry-run`) writes SAS-TIMESTAMPS-dryrun.tsv (newest→oldest) in the current working directory. + +NOTE: Requires Windows (uses SetFileTime via ctypes). +""" + +import argparse +import ctypes +import os +import sys +from datetime import datetime, timezone, timedelta + +# ========================= +# ===== USER CONFIG ======= +# ========================= +# FAT-safe default spacing: 2 seconds (FAT mtime has 2-second granularity) +SECONDS_BETWEEN_ITEMS = 2 + +# Big slot budget so each name gets a unique second within its category, even with many items. +# 86_400 seconds ≈ 1 day per category. Nice for viewing in file browser as each category will be a different day. +SLOTS_PER_CATEGORY = 86_400 + +# Comma-separated lists of names (no prefixes) to be treated as if they belong to these categories. +# Edit these to add your own folder names (case-insensitive). Whitespace is ignored. +UNPREFIXED_IN_CATEGORY_CSV = { + "APP_": "OSDXMB, XEBPLUS", + "APPS": "", # exact "APPS" is its own name + "PS1_": "", + "EMU_": "", + "GME_": "", + "DST_": "", + "DBG_": "", + "RAA_": "RESTART, POWEROFF", + "RTE_": "NEUTRINO", + "SYS_": "BOOT", + "ZZY_": "EXPLOITS", + "ZZZ_": "BM, MATRIXTEAM, OPL", +} + +# Category order (newest → oldest). +CATEGORY_ORDER = [ + "APP_", + "APPS", + "PS1_", + "EMU_", + "GME_", + "DST_", + "DBG_", + "RAA_", + "RTE_", + "DEFAULT", # non-matching fallbacks + "SYS_", + "ZZY_", + "ZZZ_", +] + +# ========================= +# ===== END CONFIG ======= +# ========================= + +# --- Build quick-lookup from CSV config --- +def _parse_csv(s: str): + return {x.strip().upper() for x in s.split(",") if x.strip()} if s else set() + +UNPREFIXED_MAP = {k: _parse_csv(v) for k, v in UNPREFIXED_IN_CATEGORY_CSV.items()} + +# --- Windows FILETIME helpers (ctypes) --- +_EPOCH_AS_FILETIME = 11644473600 +_HUNDREDS_OF_NS = 10_000_000 + +kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) + +CreateFileW = kernel32.CreateFileW +CreateFileW.argtypes = [ + ctypes.c_wchar_p, + ctypes.c_uint32, + ctypes.c_uint32, + ctypes.c_void_p, + ctypes.c_uint32, + ctypes.c_uint32, + ctypes.c_void_p +] +CreateFileW.restype = ctypes.c_void_p + +SetFileTime = kernel32.SetFileTime +SetFileTime.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p] +SetFileTime.restype = ctypes.c_int + +CloseHandle = kernel32.CloseHandle +CloseHandle.argtypes = [ctypes.c_void_p] +CloseHandle.restype = ctypes.c_int + +GENERIC_WRITE = 0x40000000 +FILE_SHARE_READ = 0x00000001 +FILE_SHARE_WRITE = 0x00000002 +FILE_SHARE_DELETE = 0x00000004 +OPEN_EXISTING = 3 +FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 # needed to open directories + +class FILETIME(ctypes.Structure): + _fields_ = [("dwLowDateTime", ctypes.c_uint32), + ("dwHighDateTime", ctypes.c_uint32)] + +def _dt_to_filetime(dt_utc: datetime) -> FILETIME: + unix_seconds = dt_utc.timestamp() + ft = int((unix_seconds + _EPOCH_AS_FILETIME) * _HUNDREDS_OF_NS) + return FILETIME(ft & 0xFFFFFFFF, ft >> 32) + +def _set_times_windows(path: str, dt_utc: datetime) -> None: + handle = CreateFileW( + path, + GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, + None, + OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, + None + ) + if handle == ctypes.c_void_p(-1).value or handle is None: + raise OSError(f"Failed to open handle for: {path} (WinError {ctypes.get_last_error()})") + try: + ft = _dt_to_filetime(dt_utc) + if not SetFileTime(handle, + ctypes.byref(ft), + ctypes.byref(ft), + ctypes.byref(ft)): + raise OSError(f"SetFileTime failed for: {path} (WinError {ctypes.get_last_error()})") + finally: + CloseHandle(handle) + +# --- Category + name → slot mapping --- +CHARSET = tuple(" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_-.") +CHAR_INDEX = {ch: i for i, ch in enumerate(CHARSET)} +BASE = len(CHARSET) + +CATEGORY_BLOCK_SECONDS = SLOTS_PER_CATEGORY * SECONDS_BETWEEN_ITEMS +CATEGORY_INDEX = {name: idx for idx, name in enumerate(CATEGORY_ORDER)} + +def _effective_category_key(eff: str) -> str: + if eff.startswith("APP_"): return "APP_" + if eff == "APPS": return "APPS" + if eff.startswith("PS1_"): return "PS1_" + if eff.startswith("EMU_"): return "EMU_" + if eff.startswith("GME_"): return "GME_" + if eff.startswith("DST_"): return "DST_" + if eff.startswith("DBG_"): return "DBG_" + if eff.startswith("RAA_"): return "RAA_" + if eff.startswith("RTE_"): return "RTE_" + if eff.startswith("SYS_") or eff == "SYS": return "SYS_" + if eff.startswith("ZZY_"): return "ZZY_" + if eff.startswith("ZZZ_"): return "ZZZ_" + return "DEFAULT" + +def _category_label_for_effective(eff: str) -> str: + key = _effective_category_key(eff) + return "DEFAULT" if key == "DEFAULT" else (key if key == "APPS" else f"{key}*") + +def _payload_for_effective(eff: str) -> str: + """Use only the part after the category key, ignoring dashes for ordering.""" + key = _effective_category_key(eff) + if key == "APPS": return "APPS" + if key == "DEFAULT": return eff.replace("-", "") + payload = eff[len(key):] if eff.startswith(key) else eff + return payload.replace("-", "") + +def _lex_fraction(payload: str) -> float: + """Map payload string to [0,1) preserving lexicographic order (dashes ignored already).""" + s = payload.upper() + total = 0.0 + scale = 1.0 + for ch in s[:128]: + scale *= BASE + code = CHAR_INDEX.get(ch, BASE - 1) + total += (code + 1) / scale + return total + +def _normalize_name_for_rules(name: str) -> str: + """ + Return the EFFECTIVE (possibly prefixed) name for all logic. + We do not strip dashes here; dashes are ignored later during ordering only. + """ + n = name.strip().upper() + + # 1) User-configured "no-prefix" names + for cat_key, names in UNPREFIXED_MAP.items(): + if n in names: + return "APPS" if cat_key == "APPS" else f"{cat_key}{n}" + + # 2) Built-in defaults + if n in ("OSDXMB", "XEBPLUS"): + return "APP_" + n + if n in ("RESTART", "POWEROFF"): + return "RAA_" + n + if n == "NEUTRINO": + return "RTE_" + n + if n == "BOOT": + return "SYS_BOOT" + if n == "EXPLOITS": + return "ZZY_EXPLOITS" + if n in ("BM", "MATRIXTEAM", "OPL"): + return "ZZZ_" + n + + # 3) Otherwise, leave as-is + return n + +def _category_priority_index(effective: str) -> int: + key = _effective_category_key(effective) + return CATEGORY_INDEX[key] + +def _slot_index_within_category(effective: str) -> int: + """ + Compute the within-category slot index using the EFFECTIVE name (e.g., 'SYS_BOOT'). + Dashes are ignored for ordering; underscores are kept. + """ + payload = _payload_for_effective(effective) + frac = _lex_fraction(payload) # [0,1) + slot = int(frac * SLOTS_PER_CATEGORY) + if slot >= SLOTS_PER_CATEGORY: + slot = SLOTS_PER_CATEGORY - 1 + return slot + +def _deterministic_offset_seconds(folder_name: str): + """ + Returns (offset_seconds, cat_idx, slot, effective_name). + Note: No 0/1-second nudge; rely on 2-second spacing for FAT safety. + """ + eff = _normalize_name_for_rules(folder_name) + cat_idx = _category_priority_index(eff) + slot = _slot_index_within_category(eff) + + nudge = 0 # removed to avoid FAT rounding collisions + + cat_offset = cat_idx * CATEGORY_BLOCK_SECONDS + name_offset = (slot * SECONDS_BETWEEN_ITEMS) + nudge + return cat_offset + name_offset, cat_idx, slot, eff + +# --- Timestamp planner --- +def _base_datetime_local_to_utc() -> datetime: + """ + Convert the local anchor time to UTC (base reference for deterministic subtraction). + """ + local_naive = datetime(2098, 12, 31, 23, 59, 59) # can be 23:59:58 if you want an inherently even anchor + local_tz = datetime.now().astimezone().tzinfo + local_aware = local_naive.replace(tzinfo=local_tz) + return local_aware.astimezone(timezone.utc) + +def _planned_timestamp_for_folder(folder_name: str): + """ + Return a tuple (utc_dt, effective_name, category_label, cat_idx, slot_idx, offset_sec). + """ + base_utc = _base_datetime_local_to_utc() + offset_sec, cat_idx, slot_idx, eff = _deterministic_offset_seconds(folder_name) + ts_utc = datetime.fromtimestamp(base_utc.timestamp() - offset_sec, tz=timezone.utc) + return ts_utc, eff, _category_label_for_effective(eff), cat_idx, slot_idx, offset_sec + +# --- FAT-safe snapping --- +def _snap_even_second(dt: datetime) -> datetime: + """ + Force timestamp to an even second and zero microseconds. + """ + dt = dt.replace(microsecond=0) + if dt.second % 2 == 1: + dt = dt + timedelta(seconds=1) + return dt + +# --- Walk and set --- +def _set_folder_and_contents_times(root_folder: str, dt_utc: datetime, verbose=False): + # Recurse and set times, then set root last (so mtime doesn't bump) + for dirpath, dirnames, filenames in os.walk(root_folder): + for fname in filenames: + fpath = os.path.join(dirpath, fname) + try: + _set_times_windows(fpath, dt_utc) + if verbose: print(f"Set file : {fpath}") + except Exception as e: + print(f"[WARN] Could not set times for file {fpath}: {e}", file=sys.stderr) + for dname in dirnames: + dpath = os.path.join(dirpath, dname) + try: + _set_times_windows(dpath, dt_utc) + if verbose: print(f"Set dir : {dpath}") + except Exception as e: + print(f"[WARN] Could not set times for dir {dpath}: {e}", file=sys.stderr) + try: + _set_times_windows(root_folder, dt_utc) + if verbose: print(f"Set ROOT : {root_folder}") + except Exception as e: + print(f"[WARN] Could not set times for ROOT {root_folder}: {e}", file=sys.stderr) + +# --- Dry-run writer --- +def _write_dryrun_tsv(plan, base_path: str, verbose=False) -> str: + """ + plan: list of tuples (name, ts_utc, eff, cat_lbl, cat_idx, slot_idx, offset_sec) + Writes TSV in CWD (not base_path), sorted newest→oldest by ts_utc. + """ + cwd = os.getcwd() + out_path = os.path.join(cwd, "SAS-TIMESTAMPS-dryrun.tsv") + plan_sorted = sorted(plan, key=lambda x: x[1], reverse=True) + with open(out_path, "w", encoding="utf-8", newline="") as f: + f.write("Order\tCategory\tCatIndex\tSlot\tOffsetSec\tName\tEffectiveName\tLocalTime\tUTC\tFullPath\n") + for idx, (name, ts_utc, eff, cat_lbl, cat_idx, slot_idx, offset_sec) in enumerate(plan_sorted, start=1): + local_str = ts_utc.astimezone().strftime("%m/%d/%Y %H:%M:%S %Z") + utc_str = ts_utc.strftime("%Y-%m-%d %H:%M:%S UTC") + full = os.path.join(base_path, name) + f.write(f"{idx}\t{cat_lbl}\t{cat_idx}\t{slot_idx}\t{offset_sec}\t{name}\t{eff}\t{local_str}\t{utc_str}\t{full}\n") + if verbose: + print(f"[DRY-RUN] Wrote plan to: {out_path}") + print(f"[DRY-RUN] {len(plan_sorted)} root folders listed (newest → oldest).") + return out_path + +# --- Main --- +def main(): + ap = argparse.ArgumentParser( + description="Deterministically set ctime/mtime recursively by folder name and category." + ) + ap.add_argument("path", nargs="?", default=".", + help="Top-level directory containing the root folders to timestamp (default: current dir).") + ap.add_argument("--dry-run", action="store_true", + help="Do NOT modify timestamps; output SAS-TIMESTAMPS-dryrun.tsv in the current working directory.") + ap.add_argument("--verbose", action="store_true", help="Extra logging.") + ap.add_argument("--fat-safe", action="store_true", + help="Snap all times to even seconds (0 µs) to match FAT/VFAT mtime precision.") + ap.add_argument("--ps2-bias-seconds", type=int, default=0, + help="Signed seconds to bias planned timestamps so PS2 display matches Windows. " + "Example: -3563 to counter a +59m23s skew on PS2.") + + args = ap.parse_args() + + base_path = os.path.abspath(args.path) + if not os.path.isdir(base_path): + print(f"Not a directory: {base_path}", file=sys.stderr) + sys.exit(1) + + root_folders = [d for d in os.listdir(base_path) if os.path.isdir(os.path.join(base_path, d))] + + if args.verbose: + print(f"Found {len(root_folders)} root folders under {base_path}") + + plan = [] + for name in root_folders: + try: + ts, eff, cat_lbl, cat_idx, slot_idx, offset_sec = _planned_timestamp_for_folder(name) + + # Apply free-form PS2 bias (to counter PS2 skew so displays match) + if args.ps2_bias_seconds: + ts = ts + timedelta(seconds=args.ps2_bias_seconds) + + # FAT-safe snapping to even seconds (prevents copy/rounding drift) + if args.fat_safe: + ts = _snap_even_second(ts) + + except Exception as e: + print(f"[WARN] Failed to compute timestamp for {name}: {e}", file=sys.stderr) + continue + plan.append((name, ts, eff, cat_lbl, cat_idx, slot_idx, offset_sec)) + + if args.dry_run: + tsv_path = _write_dryrun_tsv(plan, base_path, verbose=args.verbose) + print(f"Dry-run complete. Plan written to: {tsv_path}") + return + + for name, ts, eff, cat_lbl, cat_idx, slot_idx, offset_sec in plan: + full = os.path.join(base_path, name) + if args.verbose: + print(f"=== {name} [{cat_lbl}] cat={cat_idx} slot={slot_idx} offset={offset_sec}s -> " + f"{ts.astimezone().strftime('%m/%d/%Y %H:%M:%S %Z')} (UTC {ts.strftime('%Y-%m-%d %H:%M:%S')}) ===") + _set_folder_and_contents_times(full, ts, verbose=args.verbose) + +if __name__ == "__main__": + if os.name != "nt": + print("This script is intended for Windows (uses SetFileTime).", file=sys.stderr) + sys.exit(1) + main() \ No newline at end of file From 39b46fdcecc1d8b62370d42a96dbba2937c0201e Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Tue, 16 Sep 2025 23:59:24 +0000 Subject: [PATCH 046/118] Add deterministic SAS timestamp helper --- crates/psu-packer-gui/src/lib.rs | 1 + crates/psu-packer-gui/src/sas_timestamps.rs | 198 ++++++++++++++++++++ crates/psu-packer-gui/src/ui/file_picker.rs | 12 +- 3 files changed, 209 insertions(+), 2 deletions(-) create mode 100644 crates/psu-packer-gui/src/sas_timestamps.rs diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 4918305..df0e85a 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -10,6 +10,7 @@ use eframe::egui; use ps2_filetypes::{templates, IconSys}; use psu_packer::{ColorConfig, ColorFConfig, IconSysConfig, VectorConfig}; +pub(crate) mod sas_timestamps; pub mod ui; pub use ui::{dialogs, file_picker, pack_controls}; diff --git a/crates/psu-packer-gui/src/sas_timestamps.rs b/crates/psu-packer-gui/src/sas_timestamps.rs new file mode 100644 index 0000000..7beb552 --- /dev/null +++ b/crates/psu-packer-gui/src/sas_timestamps.rs @@ -0,0 +1,198 @@ +use std::path::Path; + +use chrono::{ + DateTime, Duration, Local, LocalResult, NaiveDate, NaiveDateTime, NaiveTime, TimeZone, + Timelike, Utc, +}; + +const SECONDS_BETWEEN_ITEMS: i64 = 2; +const SLOTS_PER_CATEGORY: i64 = 86_400; +const CATEGORY_ORDER: [&str; 13] = [ + "APP_", "APPS", "PS1_", "EMU_", "GME_", "DST_", "DBG_", "RAA_", "RTE_", "DEFAULT", "SYS_", + "ZZY_", "ZZZ_", +]; +const CATEGORY_BLOCK_SECONDS: i64 = SECONDS_BETWEEN_ITEMS * SLOTS_PER_CATEGORY; +const CHARSET: &str = " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_-."; + +const UNPREFIXED_MAP: [(&str, &[&str]); 12] = [ + ("APP_", &["OSDXMB", "XEBPLUS"]), + ("APPS", &[]), + ("PS1_", &[]), + ("EMU_", &[]), + ("GME_", &[]), + ("DST_", &[]), + ("DBG_", &[]), + ("RAA_", &["RESTART", "POWEROFF"]), + ("RTE_", &["NEUTRINO"]), + ("SYS_", &["BOOT"]), + ("ZZY_", &["EXPLOITS"]), + ("ZZZ_", &["BM", "MATRIXTEAM", "OPL"]), +]; + +pub(crate) fn planned_timestamp_for_folder(path: &Path) -> Option { + let name = path.file_name()?.to_str()?.trim(); + if name.is_empty() { + return None; + } + + let offset_seconds = deterministic_offset_seconds(name)?; + let base = base_datetime_local_to_utc()?; + let planned_utc = base - Duration::seconds(offset_seconds); + let snapped = snap_even_second(planned_utc); + let local = snapped.with_timezone(&Local); + Some(local.naive_local()) +} + +fn deterministic_offset_seconds(name: &str) -> Option { + let effective = normalize_name_for_rules(name)?; + let category_index = category_priority_index(&effective)?; + let slot = slot_index_within_category(&effective); + let category_offset = category_index as i64 * CATEGORY_BLOCK_SECONDS; + let name_offset = slot * SECONDS_BETWEEN_ITEMS; + Some(category_offset + name_offset) +} + +fn normalize_name_for_rules(name: &str) -> Option { + let trimmed = name.trim(); + if trimmed.is_empty() { + return None; + } + + let upper = trimmed.to_ascii_uppercase(); + + for (category, entries) in UNPREFIXED_MAP.iter() { + if entries.iter().any(|entry| *entry == upper) { + if *category == "APPS" { + return Some(String::from("APPS")); + } + return Some(format!("{}{}", category, upper)); + } + } + + match upper.as_str() { + "OSDXMB" | "XEBPLUS" => Some(format!("APP_{}", upper)), + "RESTART" | "POWEROFF" => Some(format!("RAA_{}", upper)), + "NEUTRINO" => Some(format!("RTE_{}", upper)), + "BOOT" => Some(String::from("SYS_BOOT")), + "EXPLOITS" => Some(String::from("ZZY_EXPLOITS")), + "BM" | "MATRIXTEAM" | "OPL" => Some(format!("ZZZ_{}", upper)), + _ => Some(upper), + } +} + +fn category_priority_index(effective: &str) -> Option { + let key = effective_category_key(effective); + CATEGORY_ORDER + .iter() + .position(|candidate| *candidate == key) +} + +fn effective_category_key(effective: &str) -> &str { + if effective.starts_with("APP_") { + "APP_" + } else if effective == "APPS" { + "APPS" + } else if effective.starts_with("PS1_") { + "PS1_" + } else if effective.starts_with("EMU_") { + "EMU_" + } else if effective.starts_with("GME_") { + "GME_" + } else if effective.starts_with("DST_") { + "DST_" + } else if effective.starts_with("DBG_") { + "DBG_" + } else if effective.starts_with("RAA_") { + "RAA_" + } else if effective.starts_with("RTE_") { + "RTE_" + } else if effective.starts_with("SYS_") || effective == "SYS" { + "SYS_" + } else if effective.starts_with("ZZY_") { + "ZZY_" + } else if effective.starts_with("ZZZ_") { + "ZZZ_" + } else { + "DEFAULT" + } +} + +fn slot_index_within_category(effective: &str) -> i64 { + let payload = payload_for_effective(effective); + + let mut total = 0.0f64; + let mut scale = 1.0f64; + + for ch in payload.chars().take(128) { + scale *= CHARSET.len() as f64; + let index = match CHARSET.find(ch.to_ascii_uppercase()) { + Some(idx) => idx + 1, + None => CHARSET.len(), + } as f64; + total += index / scale; + } + + let mut slot = (total * SLOTS_PER_CATEGORY as f64).floor() as i64; + if slot >= SLOTS_PER_CATEGORY { + slot = SLOTS_PER_CATEGORY - 1; + } + slot +} + +fn payload_for_effective(effective: &str) -> String { + let key = effective_category_key(effective); + if key == "APPS" { + "APPS".to_string() + } else if key == "DEFAULT" { + effective.replace('-', "") + } else if let Some(stripped) = effective.strip_prefix(key) { + stripped.replace('-', "") + } else { + effective.replace('-', "") + } +} + +fn base_datetime_local_to_utc() -> Option> { + let date = NaiveDate::from_ymd_opt(2098, 12, 31)?; + let time = NaiveTime::from_hms_opt(23, 59, 59)?; + let naive = NaiveDateTime::new(date, time); + + let local = match Local.from_local_datetime(&naive) { + LocalResult::Single(dt) => dt, + LocalResult::Ambiguous(dt, alt) => dt.min(alt), + LocalResult::None => return None, + }; + + Some(local.with_timezone(&Utc)) +} + +fn snap_even_second(dt: DateTime) -> DateTime { + let mut snapped = dt.with_nanosecond(0).unwrap_or(dt); + if snapped.second() % 2 == 1 { + snapped += Duration::seconds(1); + } + snapped +} + +#[cfg(test)] +mod tests { + use super::*; + use std::path::PathBuf; + + #[test] + fn produces_even_seconds() { + let path = PathBuf::from("APP_SAMPLE"); + let timestamp = planned_timestamp_for_folder(&path).expect("timestamp"); + assert_eq!(timestamp.second() % 2, 0); + assert_eq!(timestamp.nanosecond(), 0); + } + + #[test] + fn handles_aliases() { + let path = PathBuf::from("boot"); + let ts_boot = planned_timestamp_for_folder(&path).expect("timestamp"); + let sys_path = PathBuf::from("SYS_BOOT"); + let ts_sys = planned_timestamp_for_folder(&sys_path).expect("timestamp"); + assert_eq!(ts_boot, ts_sys); + } +} diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index 596281c..884dd69 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -3,7 +3,7 @@ use std::{fs, path::Path}; use eframe::egui; use ps2_filetypes::{IconSys, PSUEntryKind, PSU}; -use crate::{PackerApp, SasPrefix}; +use crate::{sas_timestamps, PackerApp, SasPrefix}; pub(crate) fn file_menu(app: &mut PackerApp, ui: &mut egui::Ui) { ui.menu_button("File", |ui| { @@ -67,6 +67,7 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { .clicked() { if let Some(folder) = rfd::FileDialog::new().pick_folder() { + let mut deterministic_timestamp_added = false; match psu_packer::load_config(&folder) { Ok(config) => { let psu_packer::Config { @@ -80,7 +81,11 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.set_folder_name_from_full(&name); app.psu_file_base_name = app.folder_base_name.clone(); app.output = app.default_output_file_name().unwrap_or_default(); - app.timestamp = timestamp; + let planned_timestamp = timestamp + .or_else(|| sas_timestamps::planned_timestamp_for_folder(&folder)); + deterministic_timestamp_added = + timestamp.is_none() && planned_timestamp.is_some(); + app.timestamp = planned_timestamp; app.include_files = include.unwrap_or_default(); app.exclude_files = exclude.unwrap_or_default(); app.selected_include = None; @@ -148,6 +153,9 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.loaded_psu_files.clear(); app.folder = Some(folder.clone()); app.reload_project_files(); + if deterministic_timestamp_added { + app.refresh_psu_toml_editor(); + } if app.icon_sys_enabled { app.open_icon_sys_tab(); } else { From 140f027ec758efdaf13c601c88248bdb52df6fae Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Wed, 17 Sep 2025 00:42:43 +0000 Subject: [PATCH 047/118] Load archived metadata when opening PSU --- crates/psu-packer-gui/src/lib.rs | 62 +++++++++++--------- crates/psu-packer-gui/src/ui/file_picker.rs | 65 ++++++++++++++++++++- 2 files changed, 95 insertions(+), 32 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index df0e85a..a99a799 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -788,47 +788,51 @@ fn text_editor_ui( folder_selected: bool, editor: &mut TextFileEditor, ) -> bool { - if !folder_selected { - ui.label(format!("Select a folder to edit {file_name}.")); - return false; - } - if let Some(message) = &editor.load_error { ui.colored_label(egui::Color32::YELLOW, message); ui.add_space(8.0); } - let response = egui::ScrollArea::vertical() - .id_source(format!("{file_name}_editor_scroll")) - .show(ui, |ui| { - ui.add( - egui::TextEdit::multiline(&mut editor.content) - .desired_rows(20) - .code_editor(), - ) - }) - .inner; + let show_editor = folder_selected || !editor.content.is_empty(); - if response.changed() { - editor.modified = true; + if show_editor { + let response = egui::ScrollArea::vertical() + .id_source(format!("{file_name}_editor_scroll")) + .show(ui, |ui| { + ui.add_enabled( + folder_selected, + egui::TextEdit::multiline(&mut editor.content) + .desired_rows(20) + .code_editor(), + ) + }) + .inner; + + if folder_selected && response.changed() { + editor.modified = true; + } } ui.add_space(8.0); let mut save_clicked = false; - ui.horizontal(|ui| { - let button_label = format!("Save {file_name}"); - if ui - .add_enabled(editor.modified, egui::Button::new(button_label)) - .clicked() - { - save_clicked = true; - } + if folder_selected { + ui.horizontal(|ui| { + let button_label = format!("Save {file_name}"); + if ui + .add_enabled(editor.modified, egui::Button::new(button_label)) + .clicked() + { + save_clicked = true; + } - if editor.modified { - ui.colored_label(egui::Color32::YELLOW, "Unsaved changes"); - } - }); + if editor.modified { + ui.colored_label(egui::Color32::YELLOW, "Unsaved changes"); + } + }); + } else { + ui.label(format!("Select a folder to edit {file_name}.")); + } save_clicked } diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index 884dd69..f45f0ed 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -231,6 +231,9 @@ impl PackerApp { let mut root_name: Option = None; let mut root_timestamp = None; let mut files = Vec::new(); + let mut psu_toml_bytes: Option> = None; + let mut title_cfg_bytes: Option> = None; + let mut icon_sys_bytes: Option> = None; for entry in &entries { match entry.kind { @@ -240,7 +243,25 @@ impl PackerApp { root_timestamp = Some(entry.created); } } - PSUEntryKind::File => files.push(entry.name.clone()), + PSUEntryKind::File => { + let name_matches = entry.name.as_str(); + if psu_toml_bytes.is_none() && name_matches.eq_ignore_ascii_case("psu.toml") { + if let Some(bytes) = entry.contents.clone() { + psu_toml_bytes = Some(bytes); + } + } + if title_cfg_bytes.is_none() && name_matches.eq_ignore_ascii_case("title.cfg") { + if let Some(bytes) = entry.contents.clone() { + title_cfg_bytes = Some(bytes); + } + } + if icon_sys_bytes.is_none() && name_matches.eq_ignore_ascii_case("icon.sys") { + if let Some(bytes) = entry.contents.clone() { + icon_sys_bytes = Some(bytes); + } + } + files.push(entry.name.clone()); + } } } @@ -265,8 +286,46 @@ impl PackerApp { self.exclude_files.clear(); self.selected_include = None; self.selected_exclude = None; - self.reset_icon_sys_fields(); - self.reload_project_files(); + let decode_text = |bytes: Vec| match String::from_utf8(bytes) { + Ok(content) => content, + Err(err) => { + let bytes = err.into_bytes(); + String::from_utf8_lossy(&bytes).into_owned() + } + }; + + if let Some(bytes) = psu_toml_bytes { + self.psu_toml_editor.set_content(decode_text(bytes)); + } else { + self.psu_toml_editor + .set_error_message("psu.toml not found in the opened archive.".to_string()); + } + + if let Some(bytes) = title_cfg_bytes { + self.title_cfg_editor.set_content(decode_text(bytes)); + } else { + self.title_cfg_editor + .set_error_message("title.cfg not found in the opened archive.".to_string()); + } + + self.psu_toml_sync_blocked = false; + + if let Some(bytes) = icon_sys_bytes { + match std::panic::catch_unwind(|| IconSys::new(bytes)) { + Ok(parsed_icon_sys) => { + self.apply_icon_sys_file(&parsed_icon_sys); + } + Err(_) => { + self.reset_icon_sys_fields(); + self.set_error_message(format!( + "Failed to parse icon.sys from {}.", + path.display() + )); + } + } + } else { + self.reset_icon_sys_fields(); + } self.open_psu_settings_tab(); if self.output.trim().is_empty() { From bb79fec548756cab87f1913f3c09885c8c3162dc Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Wed, 17 Sep 2025 01:15:54 +0000 Subject: [PATCH 048/118] Apply icon.sys file as fallback for GUI config --- crates/psu-packer-gui/src/lib.rs | 81 +++++++++++++++++++-- crates/psu-packer-gui/src/ui/file_picker.rs | 30 +++----- 2 files changed, 87 insertions(+), 24 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index a99a799..2a2081f 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -303,7 +303,11 @@ impl PackerApp { self.icon_sys_selected_preset = None; } - pub(crate) fn apply_icon_sys_config(&mut self, icon_cfg: psu_packer::IconSysConfig) { + pub(crate) fn apply_icon_sys_config( + &mut self, + icon_cfg: psu_packer::IconSysConfig, + icon_sys_fallback: Option<&IconSys>, + ) { let flag_value = icon_cfg.flags.value(); self.icon_sys_enabled = true; self.icon_sys_use_existing = false; @@ -333,11 +337,76 @@ impl PackerApp { .copied() .collect(); - self.icon_sys_background_transparency = icon_cfg.background_transparency_value(); - self.icon_sys_background_colors = icon_cfg.background_colors_array(); - self.icon_sys_light_directions = icon_cfg.light_directions_array(); - self.icon_sys_light_colors = icon_cfg.light_colors_array(); - self.icon_sys_ambient_color = icon_cfg.ambient_color_value(); + self.icon_sys_background_transparency = + icon_cfg.background_transparency.unwrap_or_else(|| { + icon_sys_fallback + .map(|icon_sys| icon_sys.background_transparency) + .unwrap_or_else(IconSysConfig::default_background_transparency) + }); + + self.icon_sys_background_colors = if icon_cfg.background_colors.is_some() { + icon_cfg.background_colors_array() + } else if let Some(icon_sys) = icon_sys_fallback { + let mut colors = IconSysConfig::default_background_colors(); + for (target, color) in colors.iter_mut().zip(icon_sys.background_colors.iter()) { + *target = ColorConfig { + r: color.r, + g: color.g, + b: color.b, + a: color.a, + }; + } + colors + } else { + IconSysConfig::default_background_colors() + }; + + self.icon_sys_light_directions = if icon_cfg.light_directions.is_some() { + icon_cfg.light_directions_array() + } else if let Some(icon_sys) = icon_sys_fallback { + let mut directions = IconSysConfig::default_light_directions(); + for (target, direction) in directions.iter_mut().zip(icon_sys.light_directions.iter()) { + *target = VectorConfig { + x: direction.x, + y: direction.y, + z: direction.z, + w: direction.w, + }; + } + directions + } else { + IconSysConfig::default_light_directions() + }; + + self.icon_sys_light_colors = if icon_cfg.light_colors.is_some() { + icon_cfg.light_colors_array() + } else if let Some(icon_sys) = icon_sys_fallback { + let mut colors = IconSysConfig::default_light_colors(); + for (target, color) in colors.iter_mut().zip(icon_sys.light_colors.iter()) { + *target = ColorFConfig { + r: color.r, + g: color.g, + b: color.b, + a: color.a, + }; + } + colors + } else { + IconSysConfig::default_light_colors() + }; + + self.icon_sys_ambient_color = if let Some(color) = icon_cfg.ambient_color { + color + } else if let Some(icon_sys) = icon_sys_fallback { + ColorFConfig { + r: icon_sys.ambient_color.r, + g: icon_sys.ambient_color.g, + b: icon_sys.ambient_color.b, + a: icon_sys.ambient_color.a, + } + } else { + IconSysConfig::default_ambient_color() + }; self.icon_sys_selected_preset = icon_cfg.preset.clone(); } diff --git a/crates/psu-packer-gui/src/ui/file_picker.rs b/crates/psu-packer-gui/src/ui/file_picker.rs index f45f0ed..ed29777 100644 --- a/crates/psu-packer-gui/src/ui/file_picker.rs +++ b/crates/psu-packer-gui/src/ui/file_picker.rs @@ -93,27 +93,14 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { app.clear_error_message(); app.status.clear(); - let has_icon_sys_config = icon_sys.is_some(); - if let Some(icon_cfg) = icon_sys { - app.apply_icon_sys_config(icon_cfg); - } else { - app.reset_icon_sys_fields(); - } - let icon_sys_path = folder.join("icon.sys"); + let mut parsed_icon_sys = None; if icon_sys_path.is_file() { match fs::read(&icon_sys_path) { Ok(bytes) => { match std::panic::catch_unwind(|| IconSys::new(bytes)) { - Ok(parsed_icon_sys) => { - if has_icon_sys_config { - app.icon_sys_existing = Some(parsed_icon_sys); - } else { - app.apply_icon_sys_file(&parsed_icon_sys); - } - } + Ok(icon_sys) => parsed_icon_sys = Some(icon_sys), Err(_) => { - app.icon_sys_existing = None; app.set_error_message(format!( "Failed to parse {} as an icon.sys file.", icon_sys_path.display() @@ -122,7 +109,6 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { } } Err(err) => { - app.icon_sys_existing = None; app.set_error_message(format!( "Failed to read {}: {}", icon_sys_path.display(), @@ -130,9 +116,17 @@ pub(crate) fn folder_section(app: &mut PackerApp, ui: &mut egui::Ui) { )); } } - } else if has_icon_sys_config { - app.icon_sys_existing = None; } + + if let Some(icon_cfg) = icon_sys { + app.apply_icon_sys_config(icon_cfg, parsed_icon_sys.as_ref()); + } else if let Some(existing_icon_sys) = parsed_icon_sys.as_ref() { + app.apply_icon_sys_file(existing_icon_sys); + } else { + app.reset_icon_sys_fields(); + } + + app.icon_sys_existing = parsed_icon_sys; } Err(err) => { let message = format_load_error(&folder, err); From 22e4e50223b2bfbd6ddc4671622004a02455dfc1 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Wed, 17 Sep 2025 01:24:10 +0000 Subject: [PATCH 049/118] Fix icon title line skipping --- crates/psu-packer-gui/src/lib.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/psu-packer-gui/src/lib.rs b/crates/psu-packer-gui/src/lib.rs index 2a2081f..e510278 100644 --- a/crates/psu-packer-gui/src/lib.rs +++ b/crates/psu-packer-gui/src/lib.rs @@ -329,10 +329,11 @@ impl PackerApp { let break_index = icon_cfg.linebreak_position() as usize; let break_index = break_index.min(ascii_chars.len()); let line1_count = break_index.min(10); + let skip_count = line1_count; self.icon_sys_title_line1 = ascii_chars.iter().take(line1_count).copied().collect(); self.icon_sys_title_line2 = ascii_chars .iter() - .skip(break_index) + .skip(skip_count) .take(10) .copied() .collect(); @@ -432,10 +433,11 @@ impl PackerApp { .collect(); let break_index = (icon_sys.linebreak_pos as usize).min(ascii_chars.len()); let line1_count = break_index.min(10); + let skip_count = line1_count; self.icon_sys_title_line1 = ascii_chars.iter().take(line1_count).copied().collect(); self.icon_sys_title_line2 = ascii_chars .iter() - .skip(break_index) + .skip(skip_count) .take(10) .copied() .collect(); From f06e78b2493928a5a8d71970bedff982f901b656 Mon Sep 17 00:00:00 2001 From: "NathanNeurotic (Ripto)" <109461996+NathanNeurotic@users.noreply.github.com> Date: Wed, 17 Sep 2025 02:19:13 +0000 Subject: [PATCH 050/118] Custom Program Icons Replacing stock application icon --- ...shed Gold Card on Checkered Background.png | Bin 0 -> 1438347 bytes crates/suitcase/assets/blank.png | Bin 0 -> 1477846 bytes crates/suitcase/assets/circular.png | Bin 0 -> 1684033 bytes crates/suitcase/assets/framedbutton.png | Bin 0 -> 1674226 bytes crates/suitcase/assets/goldframe.png | Bin 0 -> 1286287 bytes crates/suitcase/assets/psupackergui.ico | Bin 0 -> 662859 bytes crates/suitcase/assets/psupackergui.png | Bin 0 -> 1679037 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 crates/suitcase/assets/Polished Gold Card on Checkered Background.png create mode 100644 crates/suitcase/assets/blank.png create mode 100644 crates/suitcase/assets/circular.png create mode 100644 crates/suitcase/assets/framedbutton.png create mode 100644 crates/suitcase/assets/goldframe.png create mode 100644 crates/suitcase/assets/psupackergui.ico create mode 100644 crates/suitcase/assets/psupackergui.png diff --git a/crates/suitcase/assets/Polished Gold Card on Checkered Background.png b/crates/suitcase/assets/Polished Gold Card on Checkered Background.png new file mode 100644 index 0000000000000000000000000000000000000000..0397e85d69034813257e59a4ad55d6705761115e GIT binary patch literal 1438347 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

69SO1?{ACkYRr0TQ)BURK!K zT#?msXtnPm=MRQ^o{}g)KxjS|IDv&Sk18>Ak`Pa}An#*x<&*qSQ}br|r?}6|IMv97 zgZvEOh_IGxbkm2@0|)VAd@&DmT_QH5@-7v&vz_DYY^S@+2FmLn*33)0hBPcAN;3qe zr7=&tg!g}Yd7dDQ0P0Xilw7By80+8^w^vY^==K2xR&bOjazEXknnv7DKrq0h4=KTT zo85D^D5YUz<2C_Y*0g5e-Nid~J>W9|RvsSg>p^3_Nc`X!j7$qWH_<+xG83s|xTlMI zgjFR2?zJ1bhx@}&LcP4?1u;LhaEjGzIZs=j_OxT}d9Gd<|9ijVNu06sRBw0?%~o_< zb}%0X7PH6Sg#>7?rJR9+M#YEpabR&wTA!WdX%i5c80(mTrc; zSW7|yrh5lndCd0)^2QNk%%1hfO z)hNVXUw0=-HrlPB~a5Ay9DOsJ})LNdpiMR2`85b;?L zScd1!_69i)!p%x3yD0mtrS!cg8F-V|BfIR6AOq*3E1aDCWcg1g~noFoXbt<8%+oM%vF z?%6*UR^Fn$OrCbk z5QMsBnNUaUoOP;D_E-6A#q!BtIKI(dlU_)=SY+37R(!L#;S=CcW&PFajULyy77yNvZy>OF z8^+J>$M*VIjkgL|O>#W=uG!MNabuMt@G_@z}RfSRH1$-yNca-<4;YJPu3Z6 zCY6l|N#P#uQJ-~K@~S9b0;d5^tw8Jwt?`iY>Jw*1Y_lT;vdZ7r(7(#p^|7NiiSeFK zB})~-68N74&v-Jk8Kjmnl~W(|iIq*)tEdeIwJi4-c%B6;5{NGXI>2IZzK#naG#R%% zu*E1G*PsIf3>$|o=WCrV5Qnilw8}9q`s;m90%&52XU@L4kSkIochPT}{w3)vg#dle;E!`I|nHHVi zHHxrDxnWV;;VhY}nQFjWVy*&6 z<||eMVAm7e!y_trkmFvHFwu5C{z0}|wpXQ|8esY2fb+`egAc&s;exi~@dKtQq!ZV^ z1}}(0>m_!9@fpJ0GqWQfHcdF=Dk{>y@tRnz%UR>N+wAx|Ks8+9%YJ}4y+Z($1I)|* z*cnbDFX~Ex0bKfFfKuxR3JuBwYY=PB^cdj>I_p14X85F> z);cbzxv~x0g0V-q5;a$T<|EO89`_T5sPJ=-vY#lpib>y)Z#fI57ZBSYSIEyvKtDK# zChckSHB0Ic4dM95=H@h^9tYy<>n!7h+Hj)R&NQpX07^i$zqe2?F7Cvr`DWW8DF62Y z@TTWU4b}JypV7j6-_>*TfNkx+J*T6WqK**Op1K+$He+q1?tNZB-vUqL-UP+Mtg^RO z0TUww1%t;JqI?8L{3(%wJK39ZHC`s=*O=r-`{b@d9ll;>ywUU1h zrGHL&YQNQz;|LuIMq!a09?VIls)I`$boqLG(GK47IUCdv0M5}YjKQPVR;whlWzORB zsM_n!&^;=LRg$5YftsvUVMZt7U?RVgwVG6XCR?xDF#d*P`zhS=$V@Pg@m2PWA4DIy zMm||-omM1U(gnb0+*gQi4Ca`u4z3&tTRVnG-1QWCSa0y*R3Kj%gA^M_8YAK08zI?) z%i?opml-oF_o;%o&F8@iNHy@ZI5VktFVO`UYmlCSWmM<2>N0`IXTFn&H`j?7`(#Lc z9_EnEebp@?E_R{jl1cntW0p zIs-8<9d=Jz=2>+kfaM^y|*j%|`qma7xS!HZZf1=fv86%lfj zMkD>*Tw=p-^HXMV;Ifl)Kmj__78VnGY~BD!-Eq^K1;P(Ag;==6WF1)GGF|GHOE`e z5GrHR$40W&Dj8tVnM*#^4f5`MWC;T8MdEy&M=NG9cdDnSdx}8)^&kJ{_mI&$xACG- z1BT`mn%@nMDkDI}(38!XxpPqTLCi_w4DR>@rG6Ev-zdc`bc$elFm(p^`!vd}%Y*T8 z(^0pox#M0L6}nh^lsTEX{kzNgezERVPw-*kqUW&cef$2P>B*UynjvdOuaEBnzrgu! zoi*p=go=?1>^poB^9G1Zl*V0{d##%3OBCOjF>EZ3CUb&S-Hn$M1%sKg`<&?pHAebi zriE1nH_6fdurSj#oNqSIU}k1cfwwsn8P|p3H%lZqM>&G-DI7;m#W%a<0*Ir>pDtwt zYcSs+h&w|~T%voVd+z-~@;&Z<>7G+$w<)-hK3q;a>Fd0}_}t(-=#!9xM62kKALKGP z?-(u)UJk1cF>iuwI(`9X-Zd8ha~Dwd(?9ywK6lWBLqHfQiQ z33uQ?W_pIDIwfg%gXEbRCmM$;*eRCItinu}h8{FvE~Wvc(%h6dPC0UhB)fZRitlRA zxf{N4TGf7-={GpVx0#V)Pq}hT6dAxCe$!`?ZhmwysD2lDy62uE`vwZrkd6KBd5uiL zOp{DF-omwqynQE*j>al%OmI1?crzhe39Ug`mTB!3Ovw;MvXxY?duPr8*;75#8y5tz zz?tT$nViVfrp$u|=oEbMT^QaW!|v0~{6k6}KJD@RKFH8=c>q>Vb1~RVj;d7zljib z6PP|e10FV8Z1kOK9V|u6jaBc?8p&8v-QRIxaB2KAdr-XrdJ2y4LzRKeSoIrdeeK%|XDRu2`Lq?CbOXYhvS zpegY#9%tssM;ES#ne~8QC^op2mdH^;B#LRcjcz)B|u7kJhAoQp; zoIK*i@JP(v2sgtb&K;sgOe)QP*Axalr{)6^pGkDoi0&> z(gvPZp0{h>4b0pZ$h%k2Cdyu({Qpw%?nHuE_~Z+&B%1okBDW;s$|lWC39txozdw#DJP?L?wu8vrAgF%EmaOE_Y{^lVQQ_eH>B2 z%niopt}9Or48}K}dJD&&$xgVuiI4A4R^C1I zDXj_gbS7P8Ns7vw9(c&7s$tSY4fj2ny~|(>0Lc_%d*+Kyc$WveMfkPzCj>!y?_MsQ zg|i6+$g?acz6c!&;%f<&JbPW|izfI7Xns|{e)*-(dE@(U|MnmJ`u+d>`~Up^_3MB8 zKmRZO>VNPzfAcs0&0oL2|Ixea_g}?&6<$1l02*~pRpa}fIz%0+RB7gqzs(eHfc4&9yeue(%sOcT_&TLoUKpwbp99vAb1_}Ny$@Z^(KFpg zqzggyIW_xCn&`oiGe*&Vn)mzM7W+e@`%dE=ow!tkqjY;sg?=^7!Wxwb-Xlr?J!v#Q zCbBrZjX{&96?$$tQwvP@u;!$4(C*D~cu6tetj3V98jawlpiiOMsN0H4nk46rO1(=r z)l&5IyjuU+EKD~kfQWv*`c;?2;S9Gq};<|&b8Xi1Zu;i3Z z9n}y2)~(k1a*!&qrCFlB7a~@a+3TVxrXm}6W*V<)5-*H!#_8sys!v@!!}viHFM!k7 zH5b*x!C@WF9YMKPwyo<9Wge@t53gQvxa^~OEklC8d4_Fy+@74q%Wr|KYOaW zfhm%h>s*Tf0Xg@3G+*zKcQ_mckLNgWocU5XS~cinmlkKFne9b~oS6QY?(Bx^G8&c9+C$ zmb9vBYVJ{GiNZn55+Tw3;kU3E;er z5RaHc&?6FuW|2l*%aOyUvWE(;dT@$$o77Opxig(K*%cn<85a*U`|=h+1qUSNMZG@= z&;|R-PgdG{iD^z%q5DmOBXa8&2Ysug4YHjWb0YHYjp0$owaA$}J)AQ>aMrr(%TGneK1DrPnTx_anD?o~o!YUbpahwf3+!hkb_K7}tXb=xzJhR*;ObF1++ z27fbnYw#)v@=gP8HD#HT$CeUy6aH@vv zo-XK6#VH;Z2AAp&ZMjACeE;ze?fQUI_{-M||L@;@@&EYyKjHuWmoNUG{@&lIKkLhX z`nx}T-TOZH?cMzTt$z0g`q$quzyF2bGm@oJb_d-!_l1iF>Hz6goe}OgwC%GXibBqkHaXTKrSrFiO2Vj%#oG*#o15Yu(sgCt7XxK|2-%Z+v&)`PfsCzYLO z+f^PeXV~ZKyJlcdCrSlbs!+NCxsJq3gSXH&MDjU~OD3NZcUGzpUG)Nyl1mKCvd@Z> zW+M2~%@=^T!9Gov;Q8a+u=2*6IM&Y-h=2Y`QiJ|X70_?v566oAQE@;ZvxheUyFq+? z+=I`(^Id77Fy264OAuIMF*f*Vj;(vrOXNj*L!Ygd9dDat6+DS1dp@W&tMmo zV5!_$J!$ilL6yQ5R+y{fV0tOzHI?ZPEB8E}A^K<{He4e|5Oq|tWk9S)u7@Q!~zTUt4lONzAe*2rh`ZxakpZ)Xy;h+7pKl=~=_HY0C zAN}^m-}&)__`@Gw`0=s~ln-K?ncw~LqwpHAt62wCmmp{6fGTq|_2k_BTynfSB_BSv`B@uUy5>KNLVUR(2s&=^Z<3~~N z!#nDWnmVYys!uwgD}5<9@0QSR#VBRFh%OcKsDcySmqXx(&f1<&Ux5PVT^POrHE?m7 zN;=AZYs^8t@p`cuH5O(?na&iC5|EzAB*CyL@5a;&`gOiF?|-0dJpdh7HJaLTNKU0| zf*|l#Zvi=XP*vJ1q(XTx&D#Y+0dOl+xQZI@%p9fX`kvPd>GRe9$~vjdUuC|W9`w|8 zrhowO9uDT#j~_}iC?FZxF=beZR`+h}{Hhs+IvN=;1g87z>@0V24HnVv)VM2*7hNfg zTL3j%r1APeU=%JWbnravMt65LK^^4-cb1g68v?u+UoQ|WRQJ3KtYNC8F=!jr7 zuXub3fI!*c>m}_0j+lBMr|@pj$HH=|2lw=#i<>PTw9AOdW=(bXR3D}IYv?iwx#Q+^ zP2noDjvf~KcD+E?tZH|?NVVOB~OM$72H|zFHRg^>DN&;7c6T~z7X-uABz{qZ?WePh(_K(LoG5Z` zzjJAsY z)eYbr%>mK~ijBxHqmgZrM2c5b#%g9f7^^w2SJ&Xo^qo4&BV$y;2Q;fHvkQ%@!|o6q zGpvb8 z?;l@ZU;pX9`uF%B{lkB7{?~uFB{IK1%v9(Y(!XUO{PQfy!e$=sG!L9l1H zIPNw(m?3xX_ZTQ>_RYM3q31PS&yDFqQzsp@hbhkZ1edF|2V9~y`HpHs2IeF_f?F{z zK#sQ^`wuvv9*W*=x$i(RjAO~PBaScHE_3fZ#FS=UI9}=;-{*Sxv{iNkY_ZRl$mJST z7wdPo{_HFx>r_ItB>fhX=I4VHJ@~zU{#*ih$K-p&$K1k%)Vkz>j7 zGR|Y`I)!CZ2Ebu@vl589CTJWpI(Xe@E8wTWRrL@7%!=2TgGd034Q@j)xCQ~Q+T0U> z0S}N#m&t4=*mWV*lhr2W3jbiRrV^O-3f zJvGn(55J4v&q2Ja5CDBf@5{YL)`C<@Yl)Z&xxghQCWONzupcxFU-tPpK8~++CNv4r z>vKR}@O)`_p0(+93SYnff!FI`-oO3bfBv8Sv;XOT@=yM=|H*HE`?r7i-S1!clRx~x zFTWqWe|_V8&5%8>uP?q{uc2;UDYW3P(h$-$&89_p*iG5^N3XBxSJgf++(0V=vM)9W2l9G#Y^1k z=C_iM8XAQ%BX(wRhnI&3RXyG9C=8A2BaqZX9^<;xY6gb^BPA@@%jJgNMjnlVh$S!m#L>!Jfqg2?B zcMrb!8dlGp3x;{5=^~d{-3grywzz`Bt^wa*|M1M5#wcoVW__lJdC7o`{B<9I@0mW% z@Zt+E4P|2~>gRNUr{B;_&095f8+{06YwxfRry9J(H=BoSPpN>@S#wqYP``UoRUWFO zQ8}~9@zc>l&fHr)yj8=#Gl$L~{Wve&0a@3%D$eDtx|kMMMnU!A#mt%4G`{J6@L}sr z$@d)!4A0N`@^jR_b!Tu;-Dn+V?#z#%pXmZrak|-stK4h7P2Gy)5^~q??L%Lv!ZhEw zEUK(|4jZb9xtt8mx~^!RZr4V03THAaWWR-h+8L`f{NLFsfn~E98#lY32Q0)nM4s zGmfR3;LHyYtt37QReh)VQYzD>KlbyZdKOb$GnYi&a((VltsRo2Giuz!jLsV!mD)5g zs7u~M)S%v97>v4?m@qlXLC@Yz9h)z)I9~x?Qv%bXQrmA*_-GN*p%~Eymgf+ zIIQ<@*gd2&yV69TiCioWrROT2?FQ$?Ngt0}fgt`tY1(F8jxv5#gWC$P-OmIM)gcu< zEAg$GeB~2M=63qvtNq&5dL(_Q@W>TIeY2PneDT$OSIlk_oMZ+7Izfcj>QTH=yHyo3H? zE0a^4xoVbkd-p?pOab%Tkylccu!_0{FP($hmOvYTmzg$#b;VkpnNU83D%a%5m$Qhz z$C*GCfvAFN4%Io!dx=tE(*RR7{N|ajxp;p!>(_78shQvY2>$UFe*3j?h`;$ee{%j0 z|KRWa?tk{De>(s1>%9K@*Cu{@Q*}K}ydgAqj6rrFY%7Ai^TcZD-=F-u8yqLhAsj<< zaIcK}GhbvZTce}(W^Enr#eRRh^eIDcN1N_jfy&c7ui)N|3^l-6vx<5?0&Yj57Y=}F zq9OMi*%w|{Czzw^cE?sLZgXl!B!c5lS%cDbLoUD>xCSzR#va@6_z)W(c6NjQ^@(_b z=$Yr=^Uw6g;Q!z66NrEQ`3UBBw%*6*bFKdP$_DVx=KE2XT-c!6&k`afl>+nebN+|_ z_(v}1D}*|5ul)xbQE@Zw+gCOid$;uLhlEcsp9r=-AHD$Mtff(mZMMMQFK6M$zAY9m zSxx=M3KCJ;;<@ z9_PWJp*#{E_uQw#`Rk)3FSa^LEP(LvJ#{GWdeFyh` z&*8Is|P)Yl7)uZcMT|pSei3QI42cX~$uBZcq0#*evI)98rttx~fGd@P%Th zyA%D^P|0_{QK!&vvV=9z#W`qBow=@NM1N^2RLzhF$Hj~)mQ>n>NNqhbO@g0aT6pcuZ&>8QCXCSZ~M-5Hd0B{oKclpxM+RdaBDknLIG zr6x~BL#&?L_`WJJ=U}R)sP&r`)|hKdo3bhlc#7RxgWuIwq*%_Dk!r>u=A0vhB2yqwmFFMj&6S+x z@H8=+0@oA)cw{RlC zx0-_$h}=1^stjV&9?F;WaJqpPO>Hy;l(YY%A%}A-H3^;yfiTqSE-~v#0#`R?y6$_1 zKUCa=4hzCNhc7leW*cZ{N)^*H6^QcLR|sJoXzBiQoiRIOuVA=KY6{hJ{I0T^#hXkh z_!28|XNcAjk72OE;jzW0*VqW*aYbuj4%nwGs2326F2p!3ubF7B=zdG&_;w_0Cx zvn!-5mG+R3nTF^S_OR)hdDA_k0h>)wdaObN9Kp{minR%j!Nvs>FPv zL%0~!D{O=;n5Og}N!m1fjyUTnTqU8cKIByQyt|mxuQ*Lk(Y07IZREhOr>v_+Y~T)f zaG?t3QVkG>9;!Ukt-%m8&K-C(HnaYt!!lZt;1iZo_TZlNbY_iIWubNO}G4K zOXrR`I4_?t6KdQHfK#pu)u06ih*0&FoZp_rQ==7NvBWfS=JgWfKf0`}MXXa>ExV@>}w}CH`AzCk4taj5P{t|XpkGAw9o)wE z`#tsjR)OxFnqPk<-?#bwNBq^l`lsiA`)~f6U;m>&`TZ~d{Ey#_-~M=n4qaD1KFUHY zz6QEXC$e+^Zc{PF4VmHqe|BbYU3x$8&yaP6ul)r2J;^!fXV<1*S$Jjh#~!I|U3*l$ z8o|3~c4iYmlnM zoZ+p?1R3=zvlP52PcY|6EaX5PzHR}aN^>^Q_d_c{cQ8+7%sEhx43(8v<-pJPH$;Nk z`1CCGav<+AeL%Zj3w+QN$4B5@pvGX#STlGZc?LYXYkbG`fy`g|c(2D_H7s(2M# zK3U+47JQ;!X0$_=5UwV0y!>_0@5bv8KYl5k*TJ9v7k~X<{g408|JVOr_4hye)4zZ4 zsuzC$d-jiC*mZuK;ZeKhd-(qKukhD@{_FhluYcqBUti!GI4{iCmr7snZ{zru7+0B< ztGWwRzSA5{1MF5A@wop?$6#=D>}@~UA=JVA_~AjHM9)Rt(fZ&G)C=f8 zu3bMfQWbtVeMrpxUOTr=;JoBN%uKG+?*?(AZ?~$kfVtY&nQ`)3{*7Mkn zjf=3to$G*@m+b^G?~EUmtYrN&YY4m>rY#q7{QPY2Cgc|O^B_9p$n=7$Au9tZ`&$3a z`Doyi_qKp}Oa2Fna|2LJ&Z|lzIAL5%BzdIW`s0?%r!0oN=%5+P*MPXv?Yuv)^nV~1 zk1xQSiUfabSF7SPkl3)Gg4eX&0(NS0de7zL1 z1Hkb~nU32ut^HvCP-`grDfvY$5#;OE`k1lZ1OOenVPF+Vg}3B%56rp3#=%B&WuKB( z_xE5-UEWwlQs#|akfjSa%R662f#uk6Pr>c;v}x&tO`Yp-Y>xg&e{`oOf`-$)0qK!)uN zLTW#IH{*7gQk*)TkWR;e9GKzr{(xY;v=^}xeF2=Dn*#jZ-|4>J7ySMW`0b5(mqz8D z0{-s5g8BU)FhBl8;Qf~~nCai93xE5^KEM2O=0E>08t;qxhkwfd)qnlp{oVfbpp){4EpyP=rWQ4xePHFGGn;5*&P@?6Ifor>5B+r2nfjXKm=5GtXwHV~- z8$QN_10SLUvlRjwF6eio2?S?6+JoW8B?9Ir1Ss%;rey85Euq!$mCU_QCVUd_^K+#@ zj2HM|?EEMf&>Vsop`UGgs9YMT(d0vd`MtcKasBPZo&b^x_|9kZxqts3|6=Eopg)4u zLUsFcLL6xW{D{K+T^kMRZejhg238v>Z|ltcPv6$tmq+`P5+oklYUz79=0w-dksHp0 z*Hf;rl#mx?A66=key6+j>aL3l5AABG{1E889p-i$=>hxGu58hpdEl}1E=sJ z&_$e2BITILgysX(08tJokKa$%KPXITZT7tmJS0&6gbk9sj!6KF%lU~^B9M7k zuM;$1hzF`1P)W3_GaALS*Q1|_-gKf+ud1&v^e;bt;Lrc^Z~yK8`~T&i{BQo|FaG?$ z^RNAb*ZjkO?RWPMSYLJS`!(-h|5(5Mi@(5M{KenS7s%In_3!`Q<$vj4{X6_S|CN6o zfB5_V&eXs1ZxO%zec=4*;Pv-_*Y64Z9>7K91y zCtl_64>f-D8uJ^$uMc%6t#YH4{L66-=7)L?kPrbV;FqZ8r_EF40o^==m@$ zhAKBp^{q$d<-=c&y#)sMO`I1seRIS*s-8J(krE5wq3uQ7a0vVjaePw5I0cV1q7Cu= zH99vkUeJYDZC>`2pZ{SRFa+MzsPPeh2%-}r78Nt z`~Y6B0k3QJEWYxDGxwYPg4VUW!IPRob)}vo!@_Pg{vAD=G8B#1`>a~tF}*cF`;hL- z!po8UTmUa44$Sa^_@(d#{cbRxASy(HCQj*`DYk}k&(RvUGnTJ6P+xqmzZ(9agyV88 zp;regk!fge4>TsZDHN1F=6B)c_nRJ30u8hd0~n&#JZRdX?8F?DnXh zvA!Xc=IcYg(eLLW5kJi4zP)*6`9foE;as1e*3dMgA3%SrNwV$?eiUEy{;R@As$6Os zoo^4EytYT4Wb-})4*B}l{p(8Jo!Xgpr~Q0^FGR7zb~w@W2Hyl;kW8FuRRj&^&5Lv4 z9wa^AUWTo{n2WiWrHVJ_#=Zb>rp1VIz_Q6}jEA2RN|8ISx(6tS-4cP)a|f?4RS8m+ z21WG>&Q(6L`bAa_XM~*O#f;{~v3aC198O;p%`Q!$>y6^eiHX)Q{{u&Jgo<+wdQ{u0 z&`oTqLd7b9Gmhk+l$~kx@LlKw`1}O*oE@cO2ZNeoe;XJGbW^*NGtAPA!pl0|YfNzcVrWn7u984Gc06)f&T`3Z=n^uzfMZCtgLxbkz1DyM8 zvR)V!i;a#Mo0!0hbAFf+zV=@6Z$yUY@)UtL=8netVbHB1s;FO4UoT+ZI;94V&Na4W zrhn9VaWL0C{YLy#)AP-mFDSDFjwZ|kB2Q-O68NDLpwQ^iIBi9bawn`8_!A4=vym`Kk`ZVUM*9fHiHfH8x@C)l4`DZA)#|&_5FpWFZ_PoaO ze+;i?26yUT`7i5y>-$&0{o~-Tzxn+ae~CZ;r++d3>_7c;{@FkI_5Gjy(_deI_Lnn% z`5Sl${NYc5Kl!_7&R64Hy!#gZ_%8g5zqqg8egpsQf8!7T!N2ow)&G)3{PkZ8A~YmV zVr|OsWzZUV1<#^_vi|~4x8?Sv+p)l{N`RTC&z6)@*5Y+;fK5_0`NGRUzn|G>^dS=eqP<(+_WT9vCh` z&#G*^s!IYb_Gk-3(}^t_xzD7+6BBROXVxj%`nX%imCy4Te&jPx6p>pzq@II(*7N;O z5+VO&ScgO(eg@`xC6ZQc6j+jDWbMFz|KIx^GQ~q`VLzM9v_`6W>ty^BV@@zr{vGjE z^MR-M@rn+rLs58*=a|y3q|N{b zPq`zvr9!3nr8xnv4^f4>ik(Arh*VMfhxHH^SxZ#rA82om+ZTihh^<&KOOo#$mlg~Q zuOmfNtAa@f8k@Xc`0@3H|HuFBpZqWW`9J-q|MNfj9q|wU;UC^#FAR$3{`M=s|M-o+ z{IkEF(_Me>U;73B`hVl!#h?5;|9#+3|GRIz{%f!1KWyNaYP=xtd1m@WR!`v@cQonF z#aQ6Z3T;P>$I`3jG)pl&@_S}#nmg7Jv!tCH+q!j}}oKwK}h-NBT#~tZ-OwN7J z;PCd$(Oxrw{@^tt6*6RgU{c-Jhq?8f)SF5^I6QKl$p8<-EI|pA+g|LyQUCm~eFF0R-M%UW~NdwHB!MCp`V~|7#Al^yZTXi*?%;GKXTqf=! zjDuX6k5^OvfWvRwfHEwnEm|9?zX7}yW)5|Pq6-$xXUpym+@b3hCUD-+eD%GBbB65FSD`vxO`uG2PSXxFi(*Fa^o@%js2+B?YfJLg zTEC0Ifq?a}2DsF8Llr=Nv+zB4&XCuw--@kh1&P+_ zkiSCgjtWC$-QMF997+My!FxD|NtkQL)R%be(AA_>0V7}!P7VGz#FqwWXiUFTd!t%@ zUMW_i@E-YPCx12lftSj!ywH87t9jxC2G{MZApZuV$Q(!A$^f849(jj& zjcQqNxiF0(7HD zedB6y9l7g=nK>Z83H8Dc;DIZWVg(p=Sp?pL9Sx??iQQyXH%Jf0SNKI&zKsUCT+hdV z9Nt{$2$5-J-`xx{mL-Yjx2v0U;GS%fU#6vNn6cFffinQBH9T!N=LdQYh;KLNGz1uR1}sN)uA2Do zVuPVbDBi)jxP7Lo(XHcbGzX-Jx#&8WYaEA6smo!@J#3;`-TY>01gMr2Bq$DCS;8JP zi*?t3Dpoq~;8&Hus)VzQ?;(HG`wbZ{n{ev*5~gJ2dJ1jqXU}mrlRVzeHXV8j5d?hu zJqmbay6UOLXw-{i`+hYz7e|vaT=g;rEw7nAuKz0)Cmdc}2~qQ#b2TGj+|563YS56^ z*Pbj;J3@Ap9e0uSTe3`tLjaH5fFe8Qj0^dMw6=H*&*|Pa%DEbrKixY1=?(UA8I_MI zn4Y2!hpxs{;oa;aPR)hdhFKU}lzX697aNeCQfnPw-@GH#6bhj&?;K35U8pIYuPS5OVXZ|1Vkp7IbTtWrsmy%(egXpG#gVtGc?o`XZ^-QtM`H zS%#Le?64h#abSrD@C||&!q`th@CE_F^@#{xxIH;|A;KVsO%T{&%Yg_i5ZG82l4ZAK ztGm?I)m7Ei-Bp>DS$R2^f3G=s7-O#eXOrEPC(k+m{`U8+Z>@P5bIdUt?b$PF5Hf`; zqP|3J;lZ@8oyJVh^l(<63Cyg9(>o7M`6vlCBNBL$U!J6YD1`DhkCNai zN!_AqUvIZ-JA3X3Z3Oa9>GUA4rXwLmkzyIip+;d8_$z4w z3W%VxD+y$(^1iQ?D#HjLijRc$)J8smQ_1HtiZ(suCKwUI3V4v#)7$5HYb5~9 zM_;^!^9D5n7*L+~IEkh+bpL$uvk zz25zsfAw$w&HeJTZ+!KuPhP$E?h`fZ{@U&n`}jA1OMG&vKkz4h5%2zq|4P-n{}6}| zaK#f5l-|54ptbnssD_#D1636_KD7oCFVzj(U+)!(i{L9%Nzh#yXa)5p=r&b+po!KO zw~97MF6>S#$9ebyPK;IfFlfQ2`^baDKc z8*9e~Y-}uCC0txtOV}$(yd)`Lw;Ly28Tb0OT+Az8u;B_(c_3jCd$(2*U1Fh8y@EXV zp}H+V9v{^rE{DR~p~|r+txs7(6BkpV6XCZCtAJgvEh5m1v%zlr2i&z$CfltY2N{)j zxmYJBdai7{I0on5Tx1utbOo$7-l+DEyQj0k*F|N{;bvo@+zV$-@Q5dNc}yUz5#IiL z6#4>DqmY!qUP=8`=z0zB=4E!;9zJJm%iS9wV*b%#Bmitlmm;rhl(N4S4=3gz!d&0l zZhUq`5o#dPM(_m17TU8xLjFZ-<5I+~2TsF1 zW&uQNSqcplYO^c{2fsa7QdApj5xuVBZmmK&t+hAa0@hmL=x-5=nH-v+$g^ekWnu9u z_Jt;9v>kp+Rbe=sw=^A#D3L2{TikUr~ljYO0=tq9tZ;vA5dm~ zc)qyn{>ga>;?qvv#?l@3Bt-xgFW3tSu?eB5_TO(A6zz4T_ov^vgUmY!)*#Y)0A+}- z;R`c?*&=Y|71&Y@Hc_drqje#8b&~A83c09DqSf-~c2>2VZ#fl@oTC)=N>J)zR|k_Y zf}jXcx}3dcUv|65Dd57w8xqysg;iY*ZadqaR*^EZYQ<-G5QjBkstTJ=P}-SbGx%@A zQ)58!jT^gBQ>UY=a|^sIfe*y?yGmO&5%SQw`2C-5oJlGY(-jK4w&5@lSJ~{cTs?b2 z;^DHv?k-Qd@dm-{k80^nRr1;i=sA&Yw3w&|EEV<;t5cO@0jh0~!_V)}$|FNoWfp4U zE~U~(5PN${k>vtf>xdMZnYeqqCAF^*ANm3ow3Kgh2EGcrt}LXFM8H-C!{Je{0i|X8 zajI@D?|)og1Ar4|4dm-&=n^u3WB7vW^3INXJEq#)C<{wuvIt#zO5a)I4G4*C|2>(( z25}(;UI}f@JSnB0!}i(bK_OZ-DYU_`1TM93)dOJg51n2Y0@&SH%P&fjF2m`a1Tn^Q#YX3sLR5u z{T?n)pX=_~bMf+~xPOHG;dk&Gf8*EiSO2|F`$wO3KYs!|ds4NldvC0|tXJRrEnZ%} zzV1Kx3vc~XKmXHr|N84!z?-W9yMe9kD})iVQ^xV_y+aTjcN2?g)`x3k+O{smGr6$oEcFX0CC7h5T#Ur`Wf@JAeTI{x|;Y z6E8+6>ttRkV#&s+%a!EYC-tZ%R*yalFf2y`li6cv`T2oxka()`P>@jz*NO~YD6)!M?jDCZ&r90i||}Yp7N+Q z0HBD0$QcaH9!0M0>!huLBL*1YgQ@a|tM54`IPDCzylxq-3f9VV+Zhc5;fxL}Q)!B3 z8LaXq=Utg`P1uNosKp~TXi$K0bWB3;MPFrbz|(DTW^2~PEABw1@%-&)`0S$(|8pPz z@caLV&tLXepFAhtdj>sy_Cl{;FTVcKcL6kh;qUuHc=}8KQ)2yR06Yi!b%S4&^cvJ| z^$Uxz-2v)5urBQ}%#ik#&{cp1ma^Zr(91Pe_bEX==`EUu#lc~frgeZ<14g*+j*L$y zSqp*AKuv~q6?XJw7tq%@{lda^gIWz2SWxA_#T)lTKpq`Ktgh6{_n>xdK%6I-nUKl_ zXuzs;eU1oAsijD52B1p4*>0lvaHLgL3+%WLdGB5H z;P=FeQP@^NZl|zTB=)dvfe;^&wUk>5*Np9mJn@r`-?B4jdz}FR0VyBY3%CFKdFU!UBu8onuweF~BF@LGLE^Y|DTwp@O zyi&D#7gx}1Ji*benQ%Z?Z&$TguU(LBCP_$hBr&$r*#tXuzDHfgD|^Cr!q@MkIqu$O zd?A`0;Kkd}&5=aAWs?JAGmR)deGP=%~pYog4xGc@>~5LI{dYJ0)YB_9M{* ztcRTM=>}Sz*PoucQCFG`yx-(|65C805?y5WM1?7fG`tB_PKn#}zfROw6JcsHETJ}` zVYCpywU6i#K-804q=_*`96ZDT!&KTlN+E{Q=jR9}OqEaP^VxqFgO#`PRnI1JR8>H2 zSoDBO6ME?80PqHG4N&$#2q^$*gU`OU52P{QPyv`-JU3Hh@bQ-JN)kptK<_L#j=bg=5mE30&jW z;z0pM{NIVcv!rX1a3Lz8NXLDYgF#&gDq<;?6lEfB0n2<96>xa~balmM5QK#I77_}G z*lBIBtiU?V#D0S#(O(O?%Ebukwx!&D;DXfjhlAi+s3-SO?@s6m4;nFBr@2rM4`^Jy z17DvpmCrT2yt@ z;iR8PyaPzpZtGcy&})DXEiJHd!Ma>pclRWT{puw@`_;dWzxc0zPv81J_!HlNo;@L6 zUBx$Vi0f8T$qZzFI*Ef$Dz6q<-e%Oe`fF}jPg|a^vOpT zgcDYw<8tRAR)ST3my;U<Ag?+iZwm`e&i9{Gayi>r=O~PeiBKqWgXBaI|VX@e-X>+ znl%J~8)IN4rDS16)xJRRl2+PU0aTEle+GoGfvvC?AhRAQ`kTt}YEgLc-c$VW`#<=v ze*4$H^S^)cR`K~0^4+)Zb$|bYpZ@qqn_v8hU;CM#s`vl&e@pe&KSy2fM1Df*hbbLC zEv&m74-$9<;0s8fi~2F3kBNQ|9v*rVJ;@3wEINo&VK9=se9!*9WBpnYI!D*xnG$^uEs_QYuUfs5MY; z&YA3!J5R!LtjyN{UO=J0u0K_ys)u2Z(~z{=!ID8FTT@Lk0bsqx`F(N)KNCZ}OGV#^ zYG=YKSw^2Z%CbH$bHD)>)e6%Ah|aK+CaA1#3!q=-eGJh(K*3tjb%}ceg6nVg9#HCk z)dlg5(apL}9P0@5C?&ntYOpKAjRivY1KmS z3mTuh$EucF8K+D-*0TxFQBn2G0txL_z~)^7<3=?0oi@_F^!xe)P@c)hI8qOTOG=$V=nQMzkXC{wpRTQa zW{s$bC)+BSo&Mc+FD#UPp|aj|A`0uNb~i_@qn@T`Jv+JqX*Y}IIVEo%bd}gwk59mL ztFgH0e0BARL3xW2t%of)jL0u#H`(phDUV|>(w2hH?%d?kZNPGA%N43pqwBH;1NO^9 z!(%PWEzu8eG?;{z5l4v3s5L0o$?w&PxdacwE3~x?w%97IB_9#LFMz^zle#)}2y@lr zW{F)3tNJG7dIYAtS1lgsZ8f11WV_{YgWjR(QAFSr+5)u)LFL*7sx6$BS9A@|Ovncl?0=Q%d(C(vD)SE{;j1m5|sGv^1M`bF& zHA&M3bT?bU#aBl+?S0SL7fiij!dAyrxaxNOoQsL1m~dYgi!EkglK0aSq?jwDl`ijN zgiaT>KLVb-xcmS7$v^(|AKc`_>sQX|oxBrJIZ;l$CD2K@a)`GXZIfU-;ha~|=xG$+p9y&=F^D3mb&}v=82C3Bf`CkW3Fvg(+n3@bLp%Vt+>|;83c*|= z-Qy8~g7sH;@Kz_`a!x5um@rY6J!b9)aTO8syxsG84xIbzB>XOSRCJwaZ{tT*8ZK&~G?p-HR zT~e%bXh@M!tyDj)ybp{EL=2`dV8rzBI|0UWZLZ;yUR?mUX=6+!K9zL$!RLi@45hz! zT9@y94naK9Ccq6?W-8}vUPHm+dT5^9kzp55uA-}&J``K@35 z&YypFzxdYsPx$`(Po-{t^1C15ohOZ-{fGV$)HnXe5`L1reg^6bh!^4V1mu$Rs&M@+ z>GNMfzx-Q#`22UVUwwprc!hp=(_1QDTVS(rfy#PnV9;f2LWTf@E%#-jHk0i6QLfVq+ zY9q}&Ceq_Uc5f^rr`rtxEl<{pIg+lNj7+$LXL7k1+I`m7dph97RR3H-CZUGwaAOr? zlUm&czn=x_8cAm<$Hnsk)jKf2PI&K4t&I(8F;qpS5{=9%HgiKn8>OyLvI&juU~hDJ zgrvZe&|~WL>a7uK3F$)MF@{bckKOD}VnA`ZV6nF*{K3YG;Lo`YNzHKCnVuv-TU-RX zw6%*yY#7!7%zm(wCblO~Q^rEY8yZas+ieygP6hF1Tjhxb(5m$O!Nqv<2At_E8GQ3z3U;Lv1Q7$A5hI09&-XHxW8xLG-L+yO z32xr_2B#$+uwu!BfNF3+b%1WE4?1bWQ|QGGnnaMhG$I(&&2? zKuFh+Wzgu$9m;$;-2|o@!==-98tvn`H0{5qbMyM(`y`yPPC3(Ld%trZ2mnL2n~bEA z&~L~>mN`xa%*+x<0=!5QG@L~_;!OP|jO0;x#zm3b1vjD(R|#zQW87=SF8H2XRY;4uf&* z3lm}#us3D`h%?>Xzq>r*|3`L%M@GS z)Sr5)$cnZA0JN|v3pla^Y6b*|J@1sob*`2BAu$U51N0B5Q1B+%-tJ)Z1eE2(BYlC~ z#x3F3q0}0fNEP1+KhK^xS_4Qm91}e_q)h{E#tCL0<$NHZ2WU{i?jZXu&v&E+#wp;I zUk0=&>-jl6`e3{wAN_V-8Ty=y+ZaGo%NE8n zC;{I2-NtRcyzJ~nGXXKqpNSY8IU4n&8Hr87^KWdeD%N%l7F_AspS#T}6!Np2q}wkm ziP6|pjKJObZrB++0Z+14VGrb=iuE#s!O4i}^h}?-Q6g8+fRbAV$VxI-2W*&;fOBtC z&98t5jwtedtkA7_Q}Zuh-y*6>;_0e95`5pO>^+?Lbqy?AliKlq&w|JiT;>i7PouRP=R{SThh z^LH-m)fc6YfA=H({LkOj*Z#r(CiL{bF7XZfVPmal_FR0Ue)ui&^=MxfjqiwVwD!rnY>FuENLgA0&*DMRg12mGrz71^-+PdRzI zZA{Bf(cy^alre867@U~W)7;==VP66z+y@KMhcD<&#r3 zIzYEmvLde6iT!Uz)z2zSt@c(zy2ZMXb?gE)hXHCZY-fF0KtIU9o6@_FMxf`NmLOdQQ+cmK>iy41s@%V~+V+dH2r#D3hC$lV(G z%P9)rmbsiPq5FJ43_eR1)=NqFOEZQnc$h=$R-5ojCR}8lfE4-j<0~=LRiIbnvI7Jj z<596p$toJjhGTy#!Sxxz#Yrv`ym})HT;q-h`XF3MEiX=`TxBU&?_(DrB3T(`ReI1d z`(}z1^Zkc4G}|wX!r)s$g3?=kEMeT}0&4r22oEVhZB#F_2#A!p`yfhFVTI_JYU|ve z%i@g%&bT|2EEQ`&c;XtzpGb`3y#V(qNAy^5OgR%zjm>p%%jrPE$VDA6%-1%Jq03cy z$njr|4;@>>#>3V2#vy5)#Du|BN{^mzsy^s55QS4IT>$oS{{!6QtUwojM-!F9l8pj~ zwK|EI0o2TZoqpCG-={odg`e7BR~z%d;T*yGtAIMOaMM(U#Qr{WiD9N70f4Y1aMkIs zOG2!Gf8N_sx}m3BY^&yT!1B?NI-bBlSv|N)O{%PyiLEeK1+R_mx+$(5|4_nZfX?i4 z)-uZ}fV1BkkO~Qpc0jL#*wIKeOF8v+p#=-4i@2k@yOku zqRO11VF*mUD{I<`PxO1PHy1i4=Fz4q@>Sd}@ud*Nv8eqd|M@?ApP#Tp zyE(c?PnF6)AAd=?`cakSdT?l-dvlL26Syip%&FAaeLD!ALAQ=0Q^AjoGef{tHVlZs zfoy+I}oumsH+vl6F6-PA2a10mixTnXT18<&yJHmP4 zdRIUI%`;UNof81&yB__F0fXCXTd9oASij2P^hwhF2<60lg14Hwq_1C4z#Cwxparao zK@M_T%P(MgQNx~KHmVu(1x8p0xGX!b_}O~v?I-=wM<4y^Z~n^n{+$or(SG~=r~B@r z%f2pt@!^O3Lx1Y0^!)GnAMgSHMb!SCUhCu9dSAjjWdFy&hkr@0zW0}Tefg=H3%b0+ zwW@jdq{zFRwgeQ*r8XyQOsF8Fkm&!OBQtScZLW^6E^jSL`R%t#Ev2Lku#ILKz0&jrtAAWO)FZ4#Suh1RK!UEXJ5)CCGI4{ zx+M`z@PD%k>4fs%3qAS?b|A#YOo?GM+a~34OnnQ~ZFDD$-W*FLO?9K_SkS6lC zN(tcrFHY`EwzCD6MDE@$@|U6H#J;&xJ0O`(GB^<$(GH1w@a091fda(^FD$1NJ{ZK! z0Oyx$ zb6{SM``&zOo70Er(lAU3w^#1r2H1_=TxrXG&PT}PAioX~Dhq+fwWwQ##bD;3M`3}X zKMcSJ%001Hmzo@JvwF8%tMi@p=s7o(cAJEx^1n@|K@yNjfNe}>cL-^EFiD7$bk*!M z9hVggm*;N<)D(*W8>#S!aQ?}uQpv2RQ+|MNz8lR_={jJo{muflJEEVE!N1;y1&uCZ zSuIp3v9DhGvfir84UgFuGv{f-A;R4&7=+71z-_%djFZ^#_(BJDBl6%awCxEnT=kH1 zQAJ#@_Nk0iz;Is%ri3Lt;8A61+e-|#2wZmqyg0W{ARUx4>F8~LVS-N*8R%|2n%Pr3 zU{w)?jhWXi)MQ19H9)02u4I9=;=u+;L6BIp5;t9KB`oln3MPoen1aNO%!b?}g*oe`GiTis7Ip(GuVGjZolUm9uESis zl??&w|3;Rd6Qd-acS{cd(vif?tt{S{Fpn&neMDm5z2&w+HAxIZ2H?~yS&z3aC-n4%R@;f(lO{Mp3o-I=~8*`P0?%pZ@Cn`6P+G~42$ zNA}Bww^Bh{-6S*i-2T8;zQ)LzgW%0b)|r-iZhO^XH73AR-UGe(i%qB>u6+6Cf-k-h z-g~k6_x{p7e&J7juwVSdPZD~Ez24Q`S3e-${FeU4pZ~Y{7yg~s{P~~1T<`BupZ-|& z#pnCslP_@haOHpekN)!8f9$i@(%u*BB*7)#Xz~d7nwLFQ{;6`C$&}OEfMBNR#0WjF zJx!ldfKA*aPDYyJTt9II0(xEB>ujb%lJCgVwEVrr01R=a(^ZS^RKD%YH2y~MCw*Wc zbl(aqF23|(Ka|`YeBwUcz<@nqpUqKXy%kD)$6HLOw}fs_t6hdpnx89=U4NdK(Yzw&1uFBpA;umJ9#Uhwen#n*o2-~Z0{-h2LPz5l_pzC00Ly?nX$ zr<;HD&-^j0Kk`4(wf{IS`-kA=wXXdE*TXk~AO9u3{NDcquV21|*1O`}JC-`D1&#O< z%srtFMu$T!l);bWWy|AjZ5ge` zEa$t^gm?sv+G0ppL$z}9Y@rYbzY@GYOyC>-B5SIGu74{WtDzN51<@+@fsZ{hC*p8> zPP_vyA*#c6Hq!+^wFCs1AFIm1wW@#!+jTfgqTS%so}Ajf2|$(o=d?VC|ek6Twjmtw>-Z4a*3M@iSDRpa^8(3L^0G?j`&fvclv8{;44 z_q^!_N853vpAqBL1bE*&_;=|mdgi>i$vN* z;L2(!Ah(JTI+R)OsTmUMRZP&O)TcY(R`$!x<+#qiKEZ81640sU9++olp|_-}sbid- zuO_&1uID7A*Omj6cLCLKLzbicm{;#y&Kapx(I%PVIa;=qoil?pu~!&T;b!N&MHvAV za3Fjs1Br>nyhD*HDG&a{8XtI$blNa!-N3jpl-o6TMjqNA;nv#IwzacQGJp==U*Q#L z;;n{e+QIM1zLkR}%+e8Vd9}Dr4WsUsw@)^cwKTh8H&GW`3xlw}1{ejJ2DBuk1B_w3 zWlhiCP$-jUI)D=I>lXWap(3b&=yvto9ihp3#vVpUZ~&Mz0|A-JV9iyBtZ#R6c3pg07DSz+OQ1r9j?lhK=fm> zDQ;drFQklIBJ}~>Hu|BEk5~iIy>a&|f9<>f(OXYn@!b#Z_vNV?*Oz$n`M&cBb zfj_9r^@rdcxcM&X$A1Z5{H^~5Kl;_bfR`^X;{DHJ-G9JU3u3Er1<;3Cf^~=1g@YD0 zfX$*c3{neIR1pZMtU@!>XYiPwN*)>|7Xe&MpMs|`qq?-l?{s#{1q~0_)p@_xWbk%d zt~ogoB2)$uk5c)9XM@`+`MxME&C$T&W{=#dFfYP;AunE7QA8yj{ z9hNlL3X(kibeJb_?^yy{C$IztLPs;y#^=g@@R zV6CYJ7nGTTfVS5+CR)|UmXB}Lz!xo{wuh}mjQu!m-Dv3pwnBhMN_hokwLpmGM`)Z& z3+R0SUFpm3$iZgLZ%*R?!o%ODZ&n~)|x>g^X%0+98 zSHtBu9-(~&u{T3vr=>;~lQ1Vazu45?z2(@h$Y^Ld@9s+M27Rm^S(F5c7$nkWERBsj1BP`dz-kW3fqB>y*NGI zuPGdQqGgc1rnQ5lCq{yO$Jn?4m1eL|iJRz#aza!yOTv^&a)g)h8CvudXBC_vh(c#z zo<&#NSzEa{)B#_Pa^Ey@r%1agbhZ6-Up3T!Kf^kG-c5x%Z4h#jy~MXBuU(Anm10l1 z&Y8=;XhW*wEMp~ z1b|NdI~h!YxGbrPnpD*S zyiU=~!lPdE!ggqjzVYdU98CO)GO)aoCs=(_$y^ez=D8*Yc6&1CtY9r3yQnf)RRmN? zV<)LnG-D`gV*e&0wjjoT`@FO)Heow?Zarem7O%-Wy;v!7hh0Q!J%4-S?YEY``9tDg z`@eqLfAcT>y54;JJz#x^{^)lFyuhFQFa4wX{Xch)AAhWp*5#eI7oR_czV^<3_~DQD zKmE<$`1~KPJI-4==igeW0lMJ$)V-(^hRlYkvHO_p((O!>6U+gYLA`NqW2vWdZ^wd` zE0jL>W9C9Ds@pZS zF!~*ioq@qhj~S}Rze)U3!Jp4FA?buXZ3BRAC`2o;Z4UePT}?mdS-rpxGb*MBb~taa z&jPIkAG0E&AEeu89Oq7FQ}NM)B|)F+nzmPsP*fgL?d#bTd4J)py2|2>*n_UZU_g&d zZvmqsla^q{i|QU*Zuu<-95ZqpMUbI{=h%*pU35o{IAgZslvl&weQ|y?+5gE{?GNvul#TM z`KJ%Ky!Z)RUVISd#7@s};^lxKe*NQE2yliDBM9@!Gj3J09kO67%>>RKW}H4}K*9o} zo|I$bUeyL#tn^rFlB+o@c0xW$9T?eFq!CqN-cTIj^hR0w$oWu@`@+!5G2$t%o7|p% zDri1Vdk6$MTB!hpo~ALzvujhuf?$PLIbl9C$77NRW~OS6VJ3h{pebSA<9bY$_gF2% z27<7+*JgL(u0h5XFhFEPyqr1qEkUQitI*ltjjnE3r512Ms^4E#f;R(OK;epXw84^U zFgVhU(K9erA`7s0s)%-MH;2**h>+s`R6p8*U{G=NloAG9G>hTUu$hBOZ#A<}=-#gC zpP#uJGxDrZ2a|Hr0w|(T`MtAubfj*_+HxWn)0QyZj+=zAEo2xiV~*xzUil#W34}Dc zL?vk&S@TitauHQ5_7VMIH@gXKh3Mh8?zL;QwYf;NbZz!#?1`fU_xKsM$=OVd+}yF( zJyq`O#@=q7VXN#<97Pv8oct+afZc6?s)rV6-ysRRujo{1YquraLF~%@gj(DFDX%*3 zy)gF|%4L+`3r=q1)a5hl$(6teAWjTZ%$AjXnJW*j;0)dJz~F70P!dL2nLXXFw;*tL zr~kdPKm4;5>0xDUtN|H7eWtxIF);!*vLdlvk|gW-Y~R}>L5>;P$&pxu%))T56c8}V z0hA!sl=w^$W}(oAZ+D+^u}XT-)dH{EpiMUqrP2@*pf(d|ozQKAXsD_t@S7gam|kk1 zsvx$<{7oDNpo(cR@OxkFqJynoc?>1ZDRRQ#psE!+Pohx@Dl{Pe6i<3Op>0Zp`FCZ) zKyu?KQNno(3h5y>?un-*SVO3J z3t(j19Yqws(;a^oE9mOCZY%|Vk;Wg_6u%UW+$^+pklLCO(i|;oR*>-A<$9F8F@c*~ z6syt+kReIQKE(1uuG+XOsLOFtbzxnaUwQ8WTrTyO|GzKm-}{T-(d+Mj2kY{t>a*YJ zy`J))_%HwR{_0n$AAk7fx>oIHPnVuQ72kPQumARM^uK<;_Gy*&q8elwR)UlySU9c8 zL-P-eZ(kq#HsX0(X4Pb=POdUw$>e9w*KJ4S@_7C(_mkM@_=25iO+K<(2G?rN#(ZqP zh>6c!ege>8P34eGnrQ#(ld@+UPD`B6ePw+fh1HnW2F!PFCD$GQeXE*3R`aJ^>CYvj z<#KM{J0NG|mRb0p84xySXs*XcKZ9I+wVz-^F8|8b>bHTVWr0n`6K z4v(BeFwg!-7$lVmJQA0w85?*?G;R|Z+A!9_l2UCKJo3<})`ezIEVM_`<*lu0XLy8M z)nYbInFW_T_=pb%VTP7J4+nt-w+_^rcU<|5n@uhtR&DgUfF-{D^tpcg!yo)Jf9Ko3 z`G0)-zVY5y@A~fkE&S-aKdhhq`LE)u|H!|Hy8C@Xf5z6=0KV-0-Txgv`{rM)zJE{a z$vdodap;p?cMZEfWgl{rptd}Ge#qleV>`X$2@FA?j?<6 z_c-;@?{<`#@9;`#7^4D{06u!Y+x;mLCHbC5Dku%2tV>oCB)A`ppJ$5O#n+ZPtDsH%9H#o?#OWcTdm0SFBwT+^uFL{X{PC6ann95`Nb;_HR6T;(Uev zOz+{X;ohV*$l?}g=u&t2Tqz|&;y$w%Q znl(S|HN36Y*a}m06OhNo*pnubBMyu6CPHhV+nNP#ckuhdQ59c_f{*9Sk_b2df!HQZ zL1+0pJVj#Sqa1=74_>Np$bFXqZ6}_~q}5Ivqaag}R}#u;3Cq48O^ve=d(Mr2)Z=mn zrgN;&sjkKqA^m)b>EQM}I8mDa8eebc-RNW~vyUc$x{cM1EyU>q85=3k9!^88UUK9; zodb{3AB5^YJ@!YX+{wL#N893qO;1bO053)C-E-zK={A#*S^TnrM=f`8=kc4VwimNL z$0H~N988<*4!%wNVo=cy<+V#=L(3=PJv*(w8qSCKOr$@Y7xv4FX99{>fpV!Z6bO zcg}b6zXNC`R*xxoeC|eK>%;@2DL~<9FpM*ci^tKTee}m?d&MRWuprz%2VjK8{NEl8 z_9YE)&HLBwnh874^$omrU&IKC|kDCu|Edi;@l`Z$+%n?V>N?}Zq!HKvQ1;9XO*eGJ$hijB=)Cq`B zHF&E3g{kH?W>foyIEfUExLpHuDuE4>XsiU5lR^1qcrzm6R@5~Sv@k+Ms3^(j)SY;y z4Q_nN0>xnih~Q6*Z4CPP=1CSZgMLakoP8m*%aPTyNYl!J?Vzg@Af?*TQzZnZ5b63_=wGLk z{WiBl)YkU&;BzV+SS{DA<)+YWHq1y1B#>8vL!ZWSX+eFwiLJ3}*fV~6Gv77)UuvD; z0hJj|a!q{>A_-_WI9Zi8mReJjzabj8f3X>ri zxHsR}{+ht7Ep#W3NK`(*2mYYC!`4afp$0~Q*lIcU^+5$syFmHA)LQOQu7Nq5!M<0P zp711)SdB&xo7JW3G=Y^&ue6h!T zCmm`_7C1bZ+0NU6xI7a{5%g0AjZM0l+W@Sy6>}fvhx?6#5NHdn?KGxmR9YXp8wjW> z&a^aSa64&d7(%(PAZM`Qp7F-KUXKt|!~BWIUN>7Y#PsY%5#7VRpyk^}n87p29A&q# z^Ss$Ft(hifUU&|f!`N$%e3R|7CwSH5`^=a(MY&H>Mo(({1Uf({w+hto8)|dd<*l{= zRzpHdwe5X5Nlv`3^4hka%$+%c=+RG6TXQ>16|hV(9-e&flc(Ak1?S9bL@YAh%%t4o`ht4T& z3Rb6l(iRDG1JxMhCZ-iiO$$OuJ4VzFZIUCaZ7Xz59l*yy^v-F=4X5Cw9|q^`{ONF{ z%?M~g+_Ju-YrHx!R=|cEUDS3^C0r*;9n50l182u!kti&HF<=H3@?~{|n`X+J?O<8>#FJ1q+2atgBO zw!yY+p7+16YY^5J%3E?u0+5p@23$+hT##u-fS~T}=1ST00Gb9@fU3rBZ@FkYp^tnq zfOhdL?qgfr&kvUU2&4-*fRRXGb&7|WiM~RWRsKb@OC9v}WF`t%;V1&ZRd&a%HVqTX zT=VP1FtFH%^8o^xX$`CN$|oky*5I^%-|m@!sIbeB;#p7Sc-T6bxKhwkifa+PRHL~n zh-s?3L-Va3qB0|VNVY2C-p}v3-+veQfB%QV-}=kH4t@GP5}#wg2Je6JXZ5H4(;w_- zm)3O`p59;Z^eM6Kuzu^e`=9>e)%6=soH^#nkdLTe|h_qY!oG-G5PqJR@^j>)@5(dyctjk>04f12 z|7E3u)>$|{au6n}=A{EIlaGoq=p2A+5VX3jjFW`}O}GkJK>GNIy1g7t@G)SL&L*fB z&iR8%_&dq)7~%Q3ofRAed3s?_vJJXlc4Qvo;7{EwtLQj1&h5Oo+lsDXF}T|2{T~s- zX*=-a`zojP0YEx%670tC^f(A$dRdEtX7kPtkna^i!Vq1AsXRG`W7b2MaaiQ6A03>v z@7uvkw%Uw7#FUnW7ccJdpZv{l|Ic2&`Qj_jpRk`idxBSAyarxf`E$SgPXf>XVd?sk z+Rs7U0iXWc_~cvv26gv!t|u=9y*63h4vPdus%R~}{7d;`0+3sE+Zs`gE$#;&5S4*s zzj_H9;tYh&pVbic?H#QPo;@(!U^dy+p|gp7GF6`efj%%sX{Izds5BFRCBU;tR&!#~ zR1s70C)}XSVls{dRNYZZ)|k!2xlTafwsug`p5U^f?vQlF(0r54g2D>MeUMqRbxCX2 zCSh|7=`+g&fYkuDuy5RjrlDSe>K=qfYR6Cqf&G$aCSsx06DxqG?s_JBrzq!d1=P4E zG*Is{p3_rd9MHx|RyMJp+BgpzN>WAkS;GWBIzhXmh;%(hEG|I0>4HXx6=MQ2B9y%o z^4a@zW?@c@qlQ({74T3uFQE-U-P&}{$}&+P$&T}?Ou0azMQ$lsf5OHdCiDsV53hLV zB{_ien?PgQpV{*0Aa$cR*q)y=C0s*UXmn-QbeAXXGGBwQ>#sesls_PcHY+_$+ zi?;~w2HocE3Xup_Qk!zSMm%kjS=w5`3B8q>46>!}#NIwX!9)!_Y=bNF7&`#X2%gG| z?ZxtPPy=e2x-Pfo2dq$|>H07{wvOhUwa0am$R zw{sX_06C{JX}%)GPEcCjA8xl9Wmo4n?KYr^%G8J&cLHuv=rQWNiOLP($~_pagG%Pg zC{*<7#2tbpq8rmI=D39RJg5E9)eMbd{@hcdb)@?-QTGHzuF9?A4dR7{K;m~lp$j*( zO>6^z+B7A&Pl3zZ3;*6DR3oJ@AlXK$nWPb{(DVhyfw}i8CO>g-S|yw@tzhC>wNHS9k$!?AHdWDmHpI>L24qluI)R)7_#4#c(*Y=;x8)%F&Es=TfS(Ala6NKm6`+ldo<+C%}*Uw)7xEx~F zqZ91)_l6#1XMh9r1j?9F;n`6Fpa@PS_)D)_%ut1{Mq1D$>3PHNr*#bi`ikHG?hpUl zcW6F+v8wLw`SO#`@H4;k(^xObV?-~3m(`yO@wHsG%4LRQ21)Xtmh zq6Br@J(56Ok&w^WA7%CL^Xv@?Mf04}_CqwTL4ifOc;}>_o~>+VOD9$C#PnAWwv;?E zmt~syPR6C?6xwf%)K_G9DiXgcIk>Oa6{d!&HyX3XXu=^Yd{A7dIkEL zpcicIYO@0pc@WL3v-^h3uScRLucfL{Y8u2z8nJ-~D1p8RHr2#7`JEcUMz~m0tul~t zD&PP{&*Ms>*}K(!rQjA*aHqKJRfZ(-nktP-PL>fN%)<8mlYkA8-Ics~TGqj7l9t#V z{yfs(4Ra~B>Ha5lDqtrxbJ$OHqqS4Y8_!?1W^RVZWRS*ryWZ<{q621|d|}_f1~>Z}fnuu3qr1bjZt3*!3U0r0Y*?9} zOw`W#Y1_ZB!@Qv@8DFzDQrh#osY{_mUYUDvH;k*d85x(+fIK+SNXKwIQKMGNV4$G1 z^LFD@vXwv^J2+PIhZ$QJ7EFSIaPblr*r#qzF7Mux!YW2vSj5^n+eCLwvRYPxY4Fjz z>X`|bG`3GLDJ(+@)3WcjYp;!SKM5AjpbV%maw5}rBPXlbI`nz;IS-X+UsHOVKsZ-0 zd>A36$-Gm@HRCFXrjZ`&ofyHx;Q>fs=2P`{+~N%8nvB&i(%3B6#nCy&HE&)R`*dRZ zq~?*+n=@x%*FRuHa-@tV`J#dL1RnAz$Pr<5keF&)l8Hp99B{eE<>3YzVHyCZ$|?&2 z5SoO}7T3$}>oYkiXg@g-bGB3Pu5>Sfl!5IAJqpZBF}KAu(x>b*u@jT})`V+EZ*@XK zo*35h4v)gP`8!sF(YlMr3r$GQi3^@;0|8}gtoRP0ypAp4YJA8pH8Uz?muW^}HqgYl z-t{ivq>2>G+m!S>2qIQFF*RM~ zv;}IaBH|~OH_IgJj}S9Hsv1kvw*s$aqD`uWG=!qKX1Hh;;;Vo zFZjjxzk{wTw7Kf}*ZGTo?5lYGRP|<)clU)Si~Ram*Z$oP^{2mh_39fJOP&-f;uJ}t ziW84a{t$batg|>2{S(q8sHi+6!e-8U*ZhcC*rZ!J=w7ZIfaGekMw;*6{>(L?N!9Vi zX@Z&aY?By4!dCLnDeOrp&>-1&_PdZ)?kVcUCQ`S&E?~!GKwr)oC;#PPQ^%TF>~?;i z^$0$901@Rljpht^OX87ZGU*r||C;o12GtB8Ft4j%P+{lSSyD#S?+Ah7(JRbnF|SoO z0AXt9MVp56KX2$1guLPHECK-x>-_daMv9HJ_Yq<@GMsB9;T`j+VFF-~(9qds<5gK* zKB|sSpy78moFlLNEL7@@Sy!EnLivErs5UR~aTy5LcZy_>s2?}LfrAh!hxQTd64Q-% zM}z`BzU;QXvqR=CveA0plLbUDq(wiIQ8Wh}kKXX9{cQ}Wp3*|zD$}EKt7P4-{OG<) z?#<+EnmX$;Y={PMA&|(cp1pXAzw>K9_#fWigX<#QKYP{>uQ#4OD}Ckf`lr$Q8F7CC z;yKVi#GCK_Yk2+YL#(@>P=%*ip(s$-kQ@kIaY`^uIv^nx)0p501a)4>1URmGoywSl zYQhQJmRD(CMJH+M?jxd=)Wnr7!PUgPQfbGR1+VQwTlCCCLkUn}PX%e{%$u=4!Ao!gU)7RbeS8kZde)1*CRUQ-MVHe&sQoAQk3fLCZ zv~DLTbne-Y{;KH{9k`zeEiMOh{0xtoBc`u(Cxqy$raIYb-6&dc@W>Wjey@niD;c>U zM_Q0vQFk(V5p=<3L(Q?vCT!%r;;7#@mCAIF_K4i<(Lz9rY``*Cyj#Lm7Ef$9oNH9; z6o4S*j$}P{6!iPqrUFEqF`l6vMLKq-JO<|$l_QP+;4y5rrzW=oY0uc@?YYs?Zq0YJ zfa};nBVf0L%V&xmwZGsGb`5Ux;s!(U&#v5xABf#>sX0~q>uKu?#ojwr?dUmuJD7b9 z`2Eh$VJa*o?FlZ{sf_@xjCOe)D~O&jN0JgNh+B`lkb#}lCs^j|^gjDOw2o9by=I;M zhQ8+J%x{5saR7kODP>oCu=Zq!S7eH7snWXqa#hSD~Sv{Krg>umWQ5n~JfEtt}jY-2p4KkEo{oss^jY z?Hm9ZL#VV_JFpOi=32NlQ#PdP0a9#77GQO66?cMn#y6&4A+#Q|42dwXs2v8=R{q|b z)F6Yv?ZkHD5Ce|2b!=h=iMw#7I_T$GK01#7J=!ioul;fZs4fdka$b%1tl1F;N{q|M zb}J(?rvjsd1#Lxiv;Y^w^KM0*qJw~1m25eHeHTVFSf?yxPC+SRX)%aC8HD8QAi0al zFy0lXQ%wo3OFIBtK%~EnD`XGHZ?>@HiMD3ntpE?U{-&fS5Y+rK$(zk`3L?jc+|0rZ zrR#{i)mf`x+pH94D0KBGO1O%%nD|Z@yQf?KfzJXmm}P;Qe(~8CnlPF3g{I`YYT*rE zW3?P&1k`styJNCB0;HfdP2{#DG?7#dg1dhd9UX4Ex4kmaL;F-ctUhFFJW!3aM+V04 zV_Gv$zN109V)?6L7YJxUqtmGbPz-m+c132=F2}VBCM^nG5Tj4vqufLZ7e8hZc>4wP z{g0r(^EW<1fBvD!t&OL8{xd(LU;G0v@aC2JvKF4+k#9Z6_1XPJ|Ix2L{I6fU=s-AT zR-Diwb{hd*40mMhvwx;|IyCb$ScHcy1)p_d3`a11uU8Au4G=T~5J8bg(6a|)@g?Fq zYTf{awU?9x}Ggl^PL&pQ5gK-Gv0LP~aTNjU}F zsnhsi>iDBcdt7+;!(1qD%FGW~H5D#}wMAEYLG)s7Ae*3cQ{&9_izape?e`WRU<eCFyDg#|9KA()o^)WRGIWY3{h%0((gjTTqG=j(@ zz9Dj^O@;EAf_0L#gx>itf^1hf;>i=pc4~)7DCgWdfiB_5APf(0$~G2Ju~dQmCSyn7 zFivIY#VNFRPJ*#6Xu15U8fs`fLNv7L+VtW{I+GO-=1DjabsxE%@5C4woWS;&3ptu6 zxAdE19L0%WjvZ+Qlr?qV^h(Z4&?i z#StKFXyDeN&Kew)`=WhUfyiX6x)ga8cG?E;34?DUBH90hcArL{wk!mjvTrnM0UQ^xRwFcJURIheei zO^Kov3$%@SI7SY!a5N}PnBGzpX`UUWDGte%bXyl z0s?!dYLL=dG7eza2#Ehunx3bspROLn(?Mcq+Q2E2+OV+T{RJ)51-x8}|Iy#R;)~z< zEdnn=T*&9|;}?GE13g{f%h!#&XBX53>#ete-~4U;V-lY7;zQHa0l{3Pw0$?bL-RHh zF*F9;pQI9Ljp;pL;)%yu~2J z00y?yi3FWZ*&ox3E!=XRJ}uP#J{QG=uE%XV-i4Dun>8_s876!@$^S{rfngV&{F8CD z!O48Rq1uesoW;+j*Q4J9xaEX(ULWQaWJ-)d@`=V&tY3rgMe5V z$g0-X1nBe+Y=bG#88tD9kT1x<2-#FIBuD1#Y6`*_=+Mv=n4 zsIhowpPQDG?;bV-;s>5RyWo?LfBYxW5BH_+=WpHh%a0%Q^ttr>7yc|3-(mObC44|W z{D5!1|8L{rdTFi~^88|7D75n|w?_Xhy?bPvwyc41eNUbP3b8hrf^mROjN_j3C;>@fnW#jeg_~F@o7SLr zm0n~jOPHrU(e>UfrvlNx+d9#=kDap!M-h9nbSFsF6+r~{G`7#F(v>cFwUY8kP+!&B z(+@^c*rvAzG)lA+nCNgf?d+WMn)(lT-ma7wW@E~^11yom=JeP4_)nCq7Oo5kA-Mrq zdyZ$M0aH3bOTDSxgAT;bxU4QOqRa3CP>U_w(A|)(t;n94ijD+f>QZ}5U?p3gR)(18 z3T1%Z8&U%O7B_${vf1dSq-}qfs;0EL(bx@-AN4b;HPmR^rdB2jIJmNbiX)W!&CyrF zZ5|X?$r=yEP@|LD@GYMZI>jk&|{lfscPM@eNZuomYMS| zvydO>&?Q5%!hvqWKGT-4Jy3&Npg{?=+Q%^|@Bl9}eMYeVo8-m*!}i6-Tn54^5ak@i zj?CbEZ8J*Bx)(m&6EaP`M3GGF5y+gh)}&-9pt8*D-||?tJ%RIB1-LT31=3~C`0pW( zw`=d|@vJT#=9wg}kvzb$uxMBu(-yV&K5VTPsO_u5Bws}>pQGo1!qGH^BV@2>8xvmv zHFj+ZW?8Jsk0kB*WwVk;n>w-Z^oyt4g_5TVgLphH657+t<{j)tR!A+I;Hg_r zTuZ@n3mh(ErRXVL)f(~NP@ueJFe+}244eQd=uV^_mydY(YX(eCOycKk2-w~qoh*Mk zP<$wbXbPDdt;7qv6Raz=^mc2|4$qS0&P6&cHx+Qm^@)IHt{!0I6}=w~7WM>K&47a* zdvqp~6hZlP$-qXI!CD(oLWiNzpCGITRWv)Kg^|1QE<`9#;$djmL8lgAu5E`j4K(aQ z22V*xxNq7` znvJK4rNS~3G_i<=9Z?WBdD!*q%xE>v-hXT6tXVXt*3Brl)Aqv;=J?C%>Ahd+L1>HXZ zK79#&=Rf{k?ax1vu(A3D-~Qk_Obq$zse0g%aSW|-xV*#|BBTXjAT%+ulJ4ZazdZv~aJR|MS*@B5b{9IE^ z$s-Y2mwbhH7|v&zLWez9eAS}_pMY&c^0b)*Fh4V$2Z=Z)JPVnnbK;%fF@a(Sk_f8L z`P>}HM@z=2@t*wz-4++KS0{4YkM~_XaRI$t@toXpDifMX2VO!`m;7h(CXdE|=&Zpk zsKtejgE`+jNMWBc#9V~uP30RgqA|9XH`HyOwJ@R`N@Yt2g8&jN<@lIinV=p5l)jss zA=$Tq>|~xd1YSyzi!n)cf~|skW54z5zw<9Xe_B`|QVX$rXWyHvw=ns`?w$m+a{?VzMb&(EGiT~Tn~U~j+C*re?*%vjKz6$fViYUUR6 zej|K`y$Q<`x_VY)Z&a3KRO3=`JE2xv`P_j@Qq`~-ETHFjxB*>#502`iw$x6+(O&lk zv^TJwMAjm81tPPL^kkTgu^TDp*lrrQNx#SBUxYlRL$w8wtZ6>$W~jf6;dGE4H9&3S zOjdh`9A*MmN^j@w2~yZD7TeuSvfQ5NH@+p0cr$V410TR?8%ru9jTR$F+19UedZm%t zfhPKn{h0ITmnO8LmkH5S*AY;y$pU0GFab%LQZ+9l>`~bVxevHp;xN;gUcR00B-wCGM$y4oAKzko1hK^@X9VOXp+!qK7t|B@Tg|cqXL8BH< zJVtNuoXXQ1k6K@2!y(tpnwx9FP3=LnA8mbd54-iSe zuiP7boA>Qah$@eiZI>!iHI0^X%pEe6p!=o60pKv4J{nEbyyMFhzSK0_8r9~aKrhe&UWBhj;n3$@G{q~^fvF!Pm->~QdT;LXA*&ds;;&98n zeuu6~3o$*~ZxItEim0h7GSYWMdIf?87$8 zQz z;~>S$#ymkDL#lBIbC3p5E*Ah3C>|p#qi%WLonTM!J^I=17O^hGZ~Vq9TtE69g3Sgt zUc7@}_=R_P@qs8V;`s~U*#!^3@@sGYN9$tdh0j7Ko)v2Q-kZSQoJl&i<3~%)>+kAR z#h&Rr_ayLmd=9cDy{ihFF+oY7r=^^e4d)$>0Ez0Lo!Ms`88f6}WQMQuhNv^4B#>@; z-(@e-(LiC~Fy8#p3LC)5cRXRT=aOxUaF*eaT3P`&fHU&&{6k;}GmjJg(byRxLCv;M zmThvsIi7v{y~ek8w#dyvCI`CxcM(VV!F|L40RR9=L_t*hF-gPiJLZ@C`PjG+o}g^O zIFr#JLz38u2#o4>4&XTbp|?*xe$f5dASxFu=Y}L;^r`6dF#QNh(#j;wWqNxfPG26y zQ-v8#bb9M!pk2h%=~+F95E4d+fUYqR**wx{gxN5h1mD*l3|R9FHf{qq$25S{O1mQh;pI6QdOu5pptQT{p-94|2NC3C|U(m$q5NX_X&m>;KwGIQ6MUibP&>~8&W|~(VGYj ze%KF+G0u6mupa#k9P8Ci{D|gC;Kia;1<(Hrvt%clKyi(VuuFP&LsU5%FYW}ZFpI#v zB&BW!)piC7Rk2klM~NmgD2{g7>1eCmEeej+&D(NEHD^3G=H1pmsN| zZVaC~5l2hhdZNztyJTU~;8(%muywUjI}w4f52B#qC-@{gb%V;sb0;$G7WTF@h_9YW zn(+_xUgHEp&g*@GZ;Cc-<@af3y5lZF?)kT!O3PdY z4yLfQG5z&q9kue#nMb3AE9z9(Ysv=%7F*0@FZUEz1PT09#mfO5$Ho`Hs)g(1Gr87{ zMFgJ@3A?E_RdB#WfMV0OXvPo@Hj$TIGm;u5>+7y)Y%s#zQ8)`?VZ}zIC;h@f(obU3 zWdvb47Uzgc))XW-b_!5i4D{Neq$K8L#rbsT`99y%sfmDul)5bR7S!4nQR1|Pc|5em zDZKqdwnN5(m_X>ghHE=ksEhcUKL$Vf?hm;3huZti>ivGd{d4c(y|)`b`t$+!ckAxO zlXd^Kuk@3TKkGlCeR;ajz`m~0Y3Rr2E`#D7zIE~gOr(75hQ*SY@b=MKN$2NI(lntk zTv?xt_OYzdAfQ%0C3N^pE_%7OFU0{{Hz>B6JH9M%*?@9$8okB_AP!U0?-l6OdlPd> zqmQ6-Cn-97sqH#ZsPnQKAPR$Lp1=P6D&-1F!I$!hO>b$ddfdUNmb;vI}{cNYpa?sGwQ_r1ns&yP{98NGK zCvwvlH(>A$@+})@-Vj;lMfMJr#8!EXaDwt|s;Pf7d8NGRQrbZ{gf0qJf-iJbsonEm zg#Uh$^G6gqAygI4>%MI|Bse?B3hS($O97468j9TweYqX6JeLnkWvvEHJ>MThTa$;j z4G^<)iZDM(!~AUyi`4W@u2s=_8#%#Pi~{zZ`Zm&`1Ie!>mU6#>&5%3?t`ipMWa`6_Uo@n>Xf2@9QsMWVH8MXYupgKmrQBt6+VM=ckw1Is}n z{a3^1ZYbx2>Zzx)95tLxKkNn($uf#%60F zz1@+Yw+R~rIq9deAHt+&cfhAfDbEe|_*eA5dIOsXZ_LMacrv z2VBqo@nEb5y4fiXd9>yBds@&CfN}_qpY@2OLhotNOD!tCF~=NK>%vB@qQTR4yyHnP zBG~(J1QTM|MK)U-v~b_eKgKG`h>XQf z<2zF26ZfofNjvm#P|KN0a0-G;n8b4}1H&E%$c$R^gPJ>)uIiZ(VN=erTy5b}*A1l; z!j6POLMc=`nP*s4N66SG0Z=ncK8MBjU@C^k5Wl7QRf&H%72H1HLlxr#HlR|KZ9i6$ za2H0-QT5^x)7oXzmDH~Tw@!m7&ZmOVR+0tY6tKN~qerAkJa1v0ZDZLzJyOQ@u42XZ z`n9{v82Dwhi>L)QJ#G;IaqTgfnsr4eqicC0Z4t@Mo8#oRpKpK;OgfTHAEO~2S2`KGz$mD7@ zF{TX#P(o*ro>_OgeHSJcn?h!CCi+}g?r(}z_KyPAu(T@)bC?H{Z6(N8wwmLEtlO;L ze3_5L)O8=_Y&X++uGNzx;`kM>nXg&<_W77oa6W@a=D2R3&(TDd7m>*g;{rz$fMch_ zs91Ho*4&`Uh006KHvisd%i}W=FXj2k!_t z5&5Z5%U!9xK|>DFc@X)Ow7dz%i3Elk)Rd3kDnerc&--u~ecJ(2sKYwpUvgmIcN0kl zL#S4g#|8$?Qw|I{hscJqmJih3^E>?JZ~oxF|Kgrl%c(%`2Y%(}zmC?=RP{rlp0)Z5 z_K*Im_FlTI7xV~@lB(DgH!V>Y0kn7!a4{7zP80c#@omSe+*)m1bzZ*9R!ucjX$O$5 zprA6nE93k;A-Sk1M8f%QbQB`i#Ki5{%t5-{dtZw`M8)&WzJ821!oCiIanfTper zrm4uGE)##VdfG39;v_}sKVs~eV4gspUQ(;bo;{eL~$Ek2W z8*aXWB_~cTx5NZq!LC6^%ZW-KC@MZisD@UOCxs7J0YMXNJJ<|-?s%dk?nIBL0}`Oy zIW|dGH{x&`4*bW`)0XzKvV=6iy)C7U7ApxJSl2jALZ%s{^4!6ZZ6_eWG6>0CQsM3< z?ii=Puck)myJ(8d5s_a=oLQs z=*l1c=mB4Rdd16En^%xrJ}$?JcWWi!X1BqvlrqfvAJ91A%K!+|E;FaKdD`6rtJ(DQ zN>a<1j~n3aj2|FZOo&yTx9DLxL1pOf9Y~x>8*Db&a$d77nb_B)!c&mQxZ6oMZV_Cc zq#qb~S>Qym5mPGw%lZmNw;oN5SYhh*DZdmXLz${l;sC9HvBwY?GE0*>fudGpX4fl> z1W7x@mI>b-KW+KtV>{1?(nLzF!92`LLubqY1I`fTF3X;q7}~b|-$>GVS7hD??Ezwo zKnj;Z>hUOUnGi}i(W&6%+!HV?E9<{!&&cK$(!1-d)4}u#w@B2jjGS1=Eg#;Lk}S9* z&HnPKlK~~7Hx&kelLt6aWa2fnpsGhLX-SUO?SUwQyRw8zlvmgphsI-<3|BCSEJ3I} z6G;HtNb;A0fA12xo(1=boL&e!4rh^az12GnX(NH#86;>oyEA!Nj403!o$-`CUAhP& zT~kE4b>n9*`}xKMC(lhNFWfAGH|I*4wR776vQIU1`JP6!%j>9MW zNoF>3iBp6efF1`xD=af>*lxEFB+LkN<{%3>>Q+ZH9u9_#60nSjz*@rBo%YL#=^wl8 zsj$mzpcJ`tlDs&bZDXuGA(&TM&z_Or`TiDOeu8yJpQxvA;cFjUG!(D`RE7Qa3*y(l zwf{TM@2yN$B>>T8+8{Z{$-$g=6`kW552#q3C^=4;m^VMbW6&EUpfx2eAna8Pw4dMbCVA~BB7kv^(L}Bdn2FQ zXTM>#-mu9zZn$vH>-j;<{T&l9n>Pz69pop{Do&r!oT`%Fgmm^a)de zY%HY0GpE5GG%L4loEf^un!cEMVpBMd;7BPkFasKlFMkA1aKuMkou8hN+!jWp&rj=( zH%yj=VX+F(R0sTF3;Y?>Ky&EC5b}3PzEji4g70&{WV7yGwSjE%GMh=%Q=#XnC(rYx zCp3Z|s7GxK=Wy6Eb2iW;rA+}C`Qyrc7#(-DWhxP?!)>DQELMQ4ZI*qr^M{%rR`1dKey@`N3L+ z>T=v2hqO+N-6F3{J-Y_N({^P&wJ};p&(sNHQP$}lD>3tToo|DB^y1PNjkNTQ4FN+Q zu9kK1g{pF$$$9{w$8Vi#nIPgiaTjP&8;rnU^O0y#2pl3f(mV0EoTwK8pekkZW(XB1 zYz*-ds3NT+u`O|&aqb3KO!M^PVv-$L%Le<(a#hb@O7he4dSaUlU${1;%?wEz$qxYA zgdPP_(t@z1Q!NwJ+Zxvi5IsI^6WZgeO}=QrsmPg$PF^$T-rVzHS>_h$vtbW-5>b0$ zVdikqKs0J;mKsg(8J}?_Z%ijOiOe~zA?|3KpEA%!M~KRYz32S`@c!3M0YCO7V)M24 zn8OhOy`m+LdiH1s1cor$RH>f3IOk%aRu+#si)FQ@10cvOu4SBmz=?X=M zp6p&6~2&+H0q`rf#+&%x~o!>D8!4n6gEKa1^g#o=C)vtMU~ zovAoz0@U7=7Q4Maukp5QaJl>mX$1s!ke=Z%Bmz_*K=&x*%zMb1`zHlP0yte2{)OO3 zAtbV;U|ot^z?me7a<8DPWmsdBqx-jk^i((0stKO$yQW?=F+}!!1DAlT*B0J9JmB-s z-r&v4EAJ@0|8C(MKYfp%{l-1M@r|c=@124kHa`CF4L|*Ogj^Ln0klL&C%zD;L(rXt0iXYQKQNf zjVV2FJaOTK)9QeB0}SlVKFy<(R%{N?uld77#$i!&0!*j%(dv*=ZSrM`ed;z&$f6sN z= z_ur#hkj1-3N6!VMQ~`V+?byvEzaE$AdkNg%<6mOB_Q(n(Ildml@3^gL5_TmH^rAGv zJsVdMVA>%LXLK}~!Ws|N+fU?ET+`f`o_pVY-kRE0oE|nKBOxjN5kb5_Xxt%J`bLX1 z)+OK7BGKLGQrOS%hWEX&KcLQI}emi|*ce%Kq(-`j^cBwUjugBA(ogaTrdP6WefnTkKZ+-P9Kj zBomvQi43>6CA$^Kd1o9^tTVGyV!y!gRs=lCC=se$9xfvGVv_bw!k%-BTZ_}^hz(?v z3KOQv!BPgVB>$QOE6+XmeL#}j`XdZD1?8lDbH4JwAxdYdPOcSv$hJ1vR43mYn=Qbt zKuQia7npyBeUP7>ZXf1X@yqvu`TJZG`aRdvm#>EfTyTQ^xP}o;nG(_HLpcI+jCEdk zXdL68Vv(!ql0{ym6K~~ZF-h%Ca`<>vlwdWRE{@g?uY=4C)~8ej9`|D-y{9~%SHOgt zH=O&d20G)3eWMO^z(^;CZ)O) z7(P0EG;C#|7Ub_Xc4{D=jvz)+ggB;!Ll1SDAd%B|o~e=Jq^y;YAeYD=8#=ah%ZI;3~SZ)d7FT@W-Q*gZtT5#5}l?qop0dai4y> zxLQhq9fhFpAT*x13_8?0``AC*Inp#3qh!F&6^ji0Wu$KmQd$M5Wz-AEW`{0apOl$xZxfaxm#N0 zsW!|$7qndNiM2bKtJo2@1A4>l8Ulzr0M~(@vt!(rrxs7dEX2VTs2z6DtyK~ipNmd4 z5^^orh6h3!0IeNrY#jLN!8UB01Mjm!SufNaUPA39!nwUubQ_jX%&)`I8tx`?4&+5= zOjgf(z5OvjNo&%DgijU!kxSW%I6-N#Ls2Ptug7}?(poAudv_9drk1qPkEM!ITvOjF zw`#wNo>&_NS_7CF&3DAm5^(yF9Wy`y>_MCgrg0x;pAtexTF_^`n3WQbMh4`gQFADA zvW12=y_aaG6>u2{gOGf6H0m&dv%*JPM>$*ZC_gn=uE6)3>*VF1UD#WcV$ zQ9>+rKX?iQADlZ&UHy z45HPDmV$_`w#sS}62b<&+Mq7wUdhfBxyqKYsV5@Z_HT z@^jW+-Os-IqVVMRbKwEI-f8fS`txtGy2#7Za4U#KYa^`!x}lQe!4Z!k$u4aW3!0>` zjT%=BN(PKGkh>WqvjkYlD0<5~r9cMqMY{I+}4OY>rgVbS_9T}iGzdn##U2l}+#J*M(lQ>kjF zkC%Y3$mw7V&n-tY=K#mPbr2i`8Aq+^P=YfrdXxlIq}!=SG3~&^>HS;4z9Rf2$BDh2 zcPr;tNNO=w$&~GSdqMC280|}CP>dY9U`RPl{F>|WmcMmM5 z{>reAd2X8QJBN0H2!q=)51}Wqwvkdv>S5vCjg?#txFZljXy}%#(BUgR++n?iGzwrsb|66bL z`DYKj++TQq7d+Bk|9S4wRVgC=+|59Cq{i6mr1eakcf!!5C0oEkLn!WUU=2hj?6y*n z+4G82y%=pR?iN_3^4ASyg?Iv&92&9eDa$y*GQ}*BQ>>N!vH?Ot-uJt2?|S}^pcBYm zNV zD|!$?4~}!Aq*SJ4If=`@Y>dVxG+_&8*lx&5S;R$UiigRAj0{?8x1Csw4yZhmTrNmB zkM#F$B9*Q|YOK1YPBu9nPce8INFamzel0~(rH)KuGTpqAsJDmN0~)LcKu-ej9@zQn zE&$pRF0Nu30!HSN$8~R7a4fEzSskWwod7tvzOb6yGn?}iS7BGd@`_&vZL&@`X1b@K6YOUM9^1hcOeP;SlC z@C^oRpi((-%pG5lH8$|x|%qlj#i9LULPhwMsnI>trfs+!*|| zF@SMhn~eF+~+g9ME8q}IWAASj^oIt%`0PP%L&1&KW+7t-ee;BUb6HIMS&B7KV8<`QzjI;G=tb1Tsvbk1rjy z+qL44anY0!N+|$4)WhIW4VYre+vdT5mIAOWV3*44O;0z~l7$nPF?UjYj7p?B&pchk z9P&JV*+rmtjPOwMZ%?jHA^`W3T6}PRXdXH}S%;VdFc2@J4mn9MW4zCzg4heVlbi?) zy(ETX(HqI?;l3U#*kTUBe=$4dcchvm3fcC(3|G=U80IJTR zNkClu62MYHXDK-Rs9We%D)bUAEmQ>@zN+t@J;m?-_NRaU{pA92cZ;TqcN3x=zE>tp--9DpYhO2T3); z+$y%3u|G*-`<#U2I6>{{VbVM$DX|@Lnbf!dZ1wgXc?3)Ya_g8^?mG4Z1QWNlyOO6$ z1kIRQx!t^3Oh2c=WK)G4BGt5AZvcl!UDK#;ZsO=obUwvP;sD@`Wi6ntXq8}5#D-Jk z5^K3(0$x|h33=>%O%Urz*Wo!xw9j{ph|#BT?9^y>vsn94 zJ5mJG9`5Kkls>821hNi#uX2?Op&J)L71g^v&tfuqD-G7sv+zz}V`#drrmt1njDL#) zaE%y@kWL6^A`X;L=7=Pi+>Ri;O-Qk$Pv*o;+Q2o+?woqLWx4w;CIALp5^HV5zKhpgZBe#!Q(lc}sAx zD`^l;c%HIYpn1RA9s4S45Rx=#$7=L0o?{3>nOf{+2_B{?=!#sFQ(tf|C&mdVCs0u; zfxcpUi?7m(^`}=J4WV~AKXVeLWL!BfPD~P!p#k$pi`*Nr%Q=JF<-~|mbG-Rf@anRt zZck)FOd`_Jn(DPHuR1}4j$HgBFu;4tH@T@Qk8pkU06aYGUPQhB_Ttxn@(I57^(TDm z?Rz}ATi~jG_~Io#{^S)u{Nd;P(MNCa^7R#5#S07Xy#EC6z5h&azxNC;-nr-3fBt=Z z^&4;N!|#8F-}vT_@SX3x#>bxvPwp0;JS#l8Pa2#U+L#@fqW{2-b={a=U5UirbU*M) z|3+EM&pAvWYZB-obvo4PZq&tDl9nrhMsZJFl{j*v+bmbosw8qNI=wjm$ z6<&@KTT={i(v*>tHm|ZWj^lx9X;;;d*rf0acw(M$F;a4NbAFOLTLxyh&_)P&qB0e_ z_YE(EfUC8Flote6H2s_e1y8qKq%3>m0A7>wXsQx8#W@FJ9n6(P_#;kmZ8gnDNS5Up zqE^SVl$AjQ1)kvKA@0xes94b~faRZU7R%#cU6W1^sx-5DY65jyKZGi8&U}yKPPeKp z(8k1OT&ZR{ArVKJOKzkE3HHVaaymfqvrQF3C3L%j%>_hV&RddcUp=BvpccE-1u~MT z_6UKDrHPq1xR0TWnxriREMnmR(ZXQ~v)lGKxdIOOHpbnZk#ls6t1Gsm=)|exh5Q-| zQHVlocd-g66}DVVkYpf43o4Hp;t{UCnRKw!+g|<>YLB#(rgfa)qKiYhPL$~Qin0Gp z*&c35L=w072o1F)pJ&<_R0VEOH3cHrX>Sj0qS35L4Dt>(rap+e5NPQ2%PXg$zgf84 zUus=|HzJ+{4_`~Wig%yB>|glGbA9{a^@S>!fj1WQk?fXm%WtOb?i8c;U}?PF9wTtY z*FL?ZnnCHknB>X|=jNF}d}RSLIovc0$Hb2u7ct!9CU6No zQS-&k+n2=Bx>DKmTTFdUbY*YA08{UPku(&OoZ5?E(G?U-+d&SSPvT&PzDI+xZ2^~T zn##KDZU^}^lu+gVRtw$D+ssR==_?{uPeN}8&^jVOXavihXWZE^hzl9R`1oZ6DTNwW z3JWeIrx6r4#8jiHfx_)YgRtOD;dW?-F4{G@#RQaKEll(R%=@Fk9ogE1=ZEU@$ShP2 zQS-8-4?p_s@8+dJ-0|W1z{``;{o8K=ctJH)PXJtBm%jKOP#5pa-MIB%G})#<+Orke z8?CAu21dhxMRz7INqeY~F&5o6I7Y!ZZFI-6cr6@B?ihuu--I!(t1Hf~%aCdl+F9mz zOWP6M3c8sJcP0REu+)ybY*D`qHkYF2g)L`P}K1J1{U=m z6yOT#?ga1HzyrVwc{XZj+mN(-lXMT>PH+VjuEwXabkSxOw(}%KDznuDInkCWc=AO> zvO0a~v~WR%B`I}>vriY6%rSwPD7W4++f83CUJosGk=0cWSW-RlllBeBBqTMrhzphR zp4R5*iYx3rbqAl`P;Z($W#B-y_H~@-cM*ILh`z#nH`6edzq{4DEL7FlEx5%9WX`Zl zMcFuLZPmopN!hxbJ}7N{4QZj}p-)_b8t&_aZBp;-g&P9k|K0`@4f&XUT_v~nw9@xN zYVX1#$WtA))MPBA;tP_0*kbj=%|W{x6zFYcb(~L92TUHsBHaH?O<(C*-fCoCmm2IP zH)&Pa6F7d$fZnW6RAMZ!RRz{gfvdcM+B4=m?H9Hsbv&PO#MyAJn{7IPtk?|)kS%Lf zQEi@tZN&EZe|Xh+{bpm;1s{BM@n?SWsea-opYz%C3u+Y}w(#R0zts1B)bumkCr$a0y$6Fyc!m$B2%nuQx*bP=sEuvFm9Jnyv zfjGqoHQk!y3=gD7*t+yKA8nl2G&qD=Jy9y|0e^rZD+gJw%2VtvTo&pIjO^O%4&T2x ztP`Qjy)cAj;?XLUI^6IZHi1zbu`6zzYU>SNVsa%$<}Jsf%|V!0D5Mdq(pSX`iEv?L zVGJ0^Qq7Y1Kgv_nu+gSNanp>nIZqRJK|vLFLDdna1xBZ0SSbZBds8ZzF*v;v3!Hvu zrR`~gypRTlO^_enaW4`g;loN5H64m6wE3zc>BfXTeCkMBGI3RwK-Bbd1 z0*0N8t7A@!W`{L_t57vy9Zp=w3Ar^fC?~v1%mtX2V0iV`GN;^75+B)$w)Wv=Oj^^F zmIzckQI4k~3^eV1@`t%OBrgI%_UKBK=b&FF**hO0va_HrRf)|M8Z3mDK|q8(oD=1W zpg*;pvrqPyCvz@-(keH-h?96RnpyJrK7+q0J;F+1!3PLlCWoD)Gg-ceL-EUP1!k|M zQcCsKD*LzAf_h_V*Us`I!;QUq*10fW#qs@?u;?z`R4nq7sWPSKm@I6}A0zL7Vb*vu;iCCR;gZ z&a^6bycUQ<8b36F07&Pv=Na?Nx#!320k``?#@Xlh=lT5e)1GjEoB2F2MHCksgRjs1 z0hm^^8$009hc6cZ(^llfr9rMxcyR8BxIN&|sw}E8$tQ2TgnYtrxPV&FY@k^yO^AF@ zb#pdgYb6cA$Wfr(@0z#b+(H(OkU?Tx5|k3R&9acbl#9hXMg(GzEpK+u9Hn6P-z3|Q z5k*WA5tJ{8JeUn9g3Glgi{SV^D@Ew$%&{LMF2u;5@Gxnhs}YcmbInHZeN2P)zw{Zs^;vw=f%!5j5ht&IpKHo;<3s0GMXO4{u2|U;_>|)V7XnHH z1zu5B^4E321xzz;5~xvL-;9WQ`%rT}8g6P=;I*ByT{;Isr7VSSXi# z!L516-f!(}-|{GqMXRPKbHEDWd}{m5D13W^4}J#gbISTGZ0vS1dkaFhW309SV6#r& z+e(kVlVk?K8XL_)DYy)XvYU;n;Hskgc2&)x{xNv5P9fo0+ zSM6`xbRw&&%$dhj2ubQHsg|c`uExF=-du(2gYfK5_?d6q>nDG5@tt?>dH?JQE~|09 zexXl(_a(pm?N|6uezp1i?`?eX3bhvS>>2RRJHV4Cz}s&VZ@mz4S=b;y{e0u|S6|@6 z55Lgc-~SQ6_O+*Y_p8tFm9KvdfAZ@u_=kV|3g7$IhxpbvztH!7aAm7-w}2OK#ZE4= zN#MGnwX#>GOOcYeX0Cd2r>4NB=eyf79AB%64qX~lw`R^ZtYOw%EyNS|g?9hX zK=D&ppOC?c#lf|6f4mzfCs=+dWNy+ z_dl_frI8eYO{Yvd8I*d+cJ9PSEuhy-7qYRRzpP{BCRgNR--*?k1`< zl2{~h9yt{@peyx$zg&4@kT`o!K9&;+(Ki_ z44K(}bdlG_!xebYMcpridQB52#j6@mOSog{j+^_+CriZN`PQrd+TZ<4Z~f0d{Q}Zf z?Bd8Brvkyg_3CHu&g736M})wE+&{84sCSI9q*Le##;K7g^r7gC2P$Cg`((p1=Q8i)nhuRM#04ETERF`Z+9zMv*Pa zfmC8>NcX&yMs%poJsBWiFwNWFNwkJxUNUbf+PUxfEYQ%!tI_2OY7$Hni*sjlpXb;- zI?S^v&u)Sp#D$Yv`TKfWFobZ*c~GY}uk_B-w<z>F?LXv^jwo>YX<=^I||& z)2C)mu+5>RU4j@TTts*YfT&fCD+`fevWb%mrlIM==|0OjJ4Ay})8m__Uhn=i5L!o) zfF)LHmwgcD%pk|3D{Uu2wjt8QHvBvde3k=o}M5Wr&DU?9Ovx$QTF2+Us%~==2C_5j6~|X+TXJ${Y&qak7&aJpfHsM zoyjIcOJyPoWBd)&h&O6NtOh-Tj7bpFMn;zvg$T^YjhJucY{2gzRS7dV0pB?%b5 zfJP&XX5_yBGyEYme&rVsMr8&91b24Cj_97&qPn!o(v@1g_wI?{2lqJlHBh!YU6uLX zy+3hI91jl<54hr>!!{~1rFNJh7lRsI|4+w!2BPPa3yw?EQ0YuV7y(Ou7rT&JLY$WV zvTT;4U0=oaZ*gKU1%pQ^-Gr-3%SLDTb2zQO(?8jVo!2&tSRN^Wu`Mj8cIM4CFcSq+ zeK-ouD4IH8RO4Z5#VMZ~i7^Je_km^STX zGv^&2tUqcj1S_HhGf;BL2aqQsu{D(}!Oh+p8x1f=1j#KndzCYBah~q>AUocux}f`> z-SWg`3DvsH^qFVB4ppW{Ahr{U9bDWcw8q*{+}9=b8uy-nbsi!H(UiP$7-QMK3ZIF) z(zWk{?f!54pu`Ybsd|?=s);q7;nwNvyiQnvq`&XttIk@(P@s#$ojx&vNp(sIwZQM* z|E%2V?Ed#>`8K)%rvGW8pm0VMhFwx$&ffoL-?yIUFW1|<+JE+E!@u0=U7v|7y#%lk z5)xx+w5NazYR<$ zrEsVjnMgbHvHO0_Hua75wUk+=v4ZBA2djQ_EyjLXKKX`&lxL%9fpqc&Ep7u-bfuxz zi!ZZg-X&b=)9x9CgibwrrIiBk1|0oD4Pv@IU@@h;wWpA?kfUM^1D?j9O}i$1mDFjN zP%Z}}!5l`#)I2y0IhAR4fF(I)PKb1YsGx%<5~G7HtOusZG#F{IufG`Uf1x===NqMy$DOt1TJcd)Mw6P8+ z?JkIk?o+RsvQ1X4RRwVA?~oCif`qDxL~;XB5=a%0FjWnvVURjWgt{gQF}F54>Fqtu zI|}-%pC@<4!`ha1H6oqX&M8_3P@z{?vGrppSs4RjtrT$tSi6RnJtrKdddQS`I%=>_ zG**$J3PxEiGE<3+(_x^i<6e@&c1rxKD-odgh6GI`VyrykK_&V*KX zFy)*`RT2%A(~=%b0(}V>)x?MN(1FAf)vLEw_$meWM6h(V9R}$RXGI`wS=sHek(B$j zN*C=$kx9rv7Rksc+NnKbZGKgx9d~?i$m|g6%N5%4)6IohrVnKqj-e|X)OIWrx=`ik z(J4-oxO5Kj)aUl_%u`3a^w<$LhXX|B!w2{I##;~Y$}1;){mm_I-Xz9A9UT@Aj({tN zz>QA|ufGYraRd19BjRKNdr>%l9{9rN63;&eJpZ}LU->+7?HUk=19O|af6RLGwY&WA zy@z=0+CHv7bD=I=ImZ{javh(0Vb+az@8j(^Zu6aYAL90%ZR`!=@G!8yFY;K)Rdkmz zQKM7&GpRGg7^oZ|`OI)tvgvgOqn5RP1y)wot%i7E@}I=#*ywIrSpk zT2?N#*0xX_osNs*E}xDDm|f9VY9r*{D?oJHX4zpjqnuSf&$~w4=MT|ad8HQ_U}RN< zTgt0*`Bojf0G!wsv1j-Ea^a+C{h*d+4Fug`QC+F_jLe0oKh>1 zokJ~X+G$N$MeZ|Umx$IH=j%XhipA-v7JNTfd%Ub7q86nY4R8BS3abdDosPpQU=y0d zt3|uVic!%wEDk+w?s9Sx5>41xtPqmLIb;s!R}~Y)7TXe?k=*lMBhrI#NY*Bb+ljqx z6;Okb@L;1-UNB7{ao3iu?y6m0(XALLDTTJ9q@r^EMz;V?)+%PU{E-m&Tw{Y1SZOnN z|89!S&zkGSRux7OYrK6m4p)JhIj}5yrto$;meRSGYDuS&wQO#z@{l*cdG3UW+#lSru}*obuDfd4 z4`bBAy-k!g%U$KlIwq<{e+hE9`VWFK$xx6dyKn3xY}3K`I5J} zPra`3yJ9S2CdvknnquFQcOWG9U+&G`uw^HBgiO&{>iA{M?6z|blV2zuD6|x%S0y5` zQ6;uzjCUzQ;#2`cERf-z4@X;K zk;{k-O1*b4Kp;-9oh{W*g6aV@XnpW@EcVK~-K6`wq>%dEE;l-zh40wv`)LE_G<$=kwFk_Ori$U21E2x}{DE0Uo zA~3<}mX3CUp3O``VAr!1R6%cqkcJD2%LGfkuM3uIJrTycz0ZXG%|)QWpwkdA7f>s> z+ZH8ktvIVgQWeA`d&-SsxnH`2K~JYBcp`>Ns=aHqIR?sO2GcQt1sUaLUs>Vglz4PJ zF=yfOrNEb-KB%XkJ;#fe4-p5WP$zhB`yStT?RNa=CntFS1K_~}fP28v`NG(Mr^l!p zuLD1R8GQRgox9IGR`~Ys6<+upur~sqd|LR$YlXl5JK(Rr6ZrhoiLZZkix)q?#dFW> z;qnF1fv4Mv_io(f`|m%*mB$Y8zq6rM7do7 zup%II!PO1YQA>rk&x{f&M1B;#0ds0hiqlLNkR>h5br*n*n2;P&x&FZOts4RIjJ4Bh}bNh zg-IRJN|tg4?JA_y zL|_)xQdtJ~yJKRZaibD&ibtF}1E9pPpys=(z5%F+B+vJB@{h`z7KIE-3@x#neC@Qy z)XoqlQ(QMUj^!Gw0N1Vx?ch%*d3kp62aOw@hv%7gJD=qN^aM8Vj9MV4j55Qxx)VKV z&1^2<+F+c?u)4FZQ#y9efL&oM=;Sd?;fpihm1Wy$!(qRZOYee}Fll6QayLF4^po+D zwQ8`eW+fwBY++ZJF;z-g7%KIg*AgHqkQj`egd|wj{*XlsVnd)#^>i^bO#(r*Z8QkR zNK{o=+_1?s+hy5%n-i~RNw?W(vGyLp0fM2O^i-!fyM={Go0?UOEwEEQrv`$CQWcIbhkdm>_4ryQ13SP?FfYjsw zN10mn7e6N>rKrvaeLrVl(YpV#SBck8FB$rc`VujSXq3g`moXB^>S(+s;xp`7$a5?!)ZFQ57(LSX{CwI)e$ z^ntPNJbc}|xk}E>EP4{dUMgrrCPCr2BRH}s^z`?_gt$0Cfm`~5Y4ylw1GDGbN|>RqILgt0xV?W ztKY4<>~;sQCVJxiX8nsk7lKyqqJlGP(Q2q_iRXH!I!D1a2dHOm4IP(8r}a>^->9ll+iR4_ISsIr4U zy$FN-#xbYFqTOy{6?%y}CK8!OcSShQQ$M$=1Z7+Z)RKcMkc5iPK2?&lSORiT!qtaR zZqXVl!K3gD+u4{(eg3df!#!=YLl)52ozTlxw3CJPeTZcr;4N&%53azSs1C&Wi zLp-$l&z(*wGQ0~_3w35~bux8ab&W~3kyWX+>MapjF*xefXQcS4dw`Il+ix zHRx0Khi@2>mQ_Q3HBJQ>Aq|px&s9}xlUE-|D?P$QZFNniXIg@;gi9MHLjxqHcCDvv zig?wHClcG^Sq~qno^|cY;B(I&;;E-E=D7Pgt z-S2Msx8DW+@BbZe+Vyj| zbme?qympS?x_*S0zIu#z-@1?2-n@?+A0Ff0y@8A8h|M9e$3P8W%+78~Dyc}!o-@`6 ze5-$5y_>|Q2JJM5;zGrWHNj z54pq4{rtKTD-H`0AZD6!mR{X|Z@MfEMU*p}IPm-MejzHSkXLWSqV(8)KUo;9GSqn$ zDECtl8d#I^Y?;o2YOKQ>qn3Qorzn_F_Sb-q1gZV35b1)HPcF3QcCGY~E76jzi<^hU z{)0Au)sG36COR6ZQ_z(0sx()W&JDwK7pTmH4S;mj9XoQ`&t#&&5mq<>Qv3Ecz^a_5 z-y>1rEKC=K*^O9Ep49=BSnb+7@C<+kMOyAmDNGGz`>E;O`**kq_i7(b5f4rB8Mo_M zD=Hx6Q?!XfPUG~QN(JgHwO3jIoOCxplVZTe<`!Xfd!y;AJxz95Rx>Cqhv5)@y z>ib+fe#bWU$M{(|R7PO#e}&iov9*Wy>}oXRi>{eH1*z97a z>sFn#L#Ja2t~oXJMjoAf>xJ3E5^b;2Mkwp41=Mi!n782LKH9 zcq>2-)BTqHi?VV+aTZX-a*!6N#Y(0Z`w?y#Xs?4a?EyOJ`)#Tm&;@ic?CF+*K1K{z z`)p>c#icSp{L&(Uf2NIK+B9(V@-09CKB@fV| zh0`uT>o!W-RD?P{e8y8f2vdW8M#0@14TDgsOs*uC@*_!YVHrwA_mJv2q%7Q{u$jbk zh9ZJZ>mjS?DJ$%8qRB~mOH^)ES@GMdA_k+ju;jvZ6Ww|(Bo$DJN6L9AA`)~3-|YCX zkA^{NohiGp5|~7~ddhWj6{gjy%^poBQ(ifZe?!y$6r6Vr1YOb9cF)~XL}xa!D@Z8( zj9RhG@nm5$ePAIprCE*M*n%~xWB;U2Zj;R39ReolM3aO#r$mJ$C}Pru)e@9?!~xvE ztt}Q147GxxcJ05~lu>Q!YBiZ_MZ(;3%ac>!(Q#rh_~hezc>eQ;_1F{VczAvvhleBP z=`lWg`!>J-gS-6c%UgW-8Mc+!T)u=lI6`cmDy(eZBW!V61hw3HiJpGxwzjw z&2_NrMP-ofWRzIKxdjKvCJdE`NiD78IQt+e*Fy^=J%6W6Q&)M%m^SD_F9~#f4?jok zJGBs2&}3QZ;SBUlJ9EVmld$oZ`pHG%w~`G-Geko7J1XQXC{BpzP?@g^VbO$ih1FP9 zlcjo18L)*2Q4s^K(mR%;fTVD*y886O;B7!Il50?jpc*uKU~R{ab&Hx*S@1!qd!iZp zia@BxLAjL|hpQ#}&d8J#ijufuu}4=6$r)xjOv^~YfZDi;p51F+)Duk9GC2MHEc>l! z2A-0)TBsET^<@N&%MEaB#sjHHOP!Zqdjwh9LLvT_eY88ad2zH9)s zls-G0u1oJzIo9TGwFsLm096{4B(brLyCAU~U`+h6kGWQM0zO+QWzD(#)oG6#^iJF>;=LzE3K+3YnqW7J{5FdBYO83 z(x^f{k&F^(Gq;%v)#`6cH}Ysx1FWHlZy+ckv<`*oa+-Nuc7LLg{)(=E!C>zqp^s`o zrD937uNGw&-cO%O*4T%-C(#R36%kdb6sMDyVntR{mhi%*9qFqQ87;vn*rH#IJv5xf zQtaBo7Eh2t&#ro{!+NfEI57K!$}G)^9)17X)zNpXs4J0kkrf%tkmZh+oi~|Pm+d)H zruUuLJ1#h?L8bAnwg5_a2$;;7746BQ;y^za=u4^=ViLtJvcWh)aa*UYeyJM#gNW2X z2Nir|lm%HQ_3>1TZh}0bwD#FKnVz8P6*>b;pR%}15?d)W#6s&NEr_A3DAptxs;A_v zR)bJP($XtIAD^xOm3#IS5K>((EEeXRA~k4!(Mz{$gG?|GHGOWQMUpk;hmnHZ6(0Wy z5{gX@4prLelHn@R9!U3i&VCr)?17RJqv?haSW%U0ut&0Xgi|~!b(>^4f=?4aftp*B zdcsQ1)lsUThb~|MlHi2=nHm&(=@g68gOP=itYlWa+IDF%$kG?1J28WOx@Grs3%2-W z4fs9#h%cvNv!?M_f*fE}%1kiO-4u4hYW7y?Yf5oZ{k~?ky}Sv5q*9n!a|TY2Cm%d2 z93E7?@XP@}_rf_`xw?n_^ZVS}+hCqSKG% zE%E8Chq!a^v_AXvAue9t=f%rMxOico&pdw#&wT!3efG%%y!Fm4y!HBV-M+WwAb5Cg zU~exts7F*bDK+3nr^kwaLZ{6s8L?Z>Q7TN=5QQo>6%1mVMAQUh&|)%@L}qqhZ4Gq| zHGN9fPA(ZO0~!QtmQN9dabc87ug9SPQV8#FPcI?LM)O(|0=bh~FRc~Vk-G&b2u7_d z-(ecIQ_a5uMWcu;=A=6CrrIJa?O7DY6qq#;RGN~|9CZK@p|P8!R(8Nu?o|$+Tx|&G zoKP>KP;v_!&a{b=Ig5+R9R#`Nayt|kqUD?JzA)P|qWa7)TDaR{A8H@#5Zi#$DGTsA)E&&9$9qU zHPP@Xkh|(#8wbiIT2v;90qCHC{4dPQbkL|*&13kig z{lI=<4tr0-q7;-e~|@d73F07}}v&Bh#M`aOkI7SMMxh7)VENelca(0fhE(JX>_ zDiPZtQ8CEeGI;7#Vxmb9nUm>NM(Z+*NCpFmcJvZ+xph9TrwIbFm13=2SCqw;lV`G0 zuKTHx#T}i|bqytH*}kHN6xwCdU;_<>#6mI^%yujwv&^Zn&twIDqG;E2r2yuDyI*r< zbTyTUW-X8ODrb#n>JYJ26+Iv*Sq+dt&5!M!pGuSk{-DN3x_220^s2gh$?N|ZcDmw4 zoox#~0Rpxek}pHxyNn-H2DO`pvoKU5r!(&sTxZ)G2?k03(G-Bs80uTIwl%|4iis;mSCjbSS}Fmzmdo$J_Brc)%A*rWmFbFs%xTbDmC^LYqE-uGuavHsvMdnlW`eFms!HcGLoKIn z$YiKoQmM?M$H1#C)P+U>gXoSFS4skjS67#;M{pRRsgFt2}rYM*_Kl zaQzmzcLHutCoWthUV8cvpMU-ck6k~iaiG+6&cU}{{tQ3(?q~J$*NeAqBaaTjr?2Tb zKY9qh`X=z|TfvV$0m#hX`PMf6^p7|A`qz)Je>iyW9{AZOr#Rkjz_81|)^hhASOKE* z`{dEA4{l6;!ocOLd-%2A*sovx&BRZ?e+z&253_#oBkL>NaTMt}n|0om@!|Ng)dsttca_i(ftl=4ZcT8Y&t7_*ssV()+yDir zh_a_nwR@bxCS4J8v>YfKS?$K7DMgh2U^)|^ycmjD<qEQXO+6#Bv6=b@bJ~q!s&APOZ{$Pw-YjrK zRSSmWw=8;fJ=q><`hO_2Hi3N|N|lPyN1ciFYR_vuXfHMCA8K`0k)!O*5{7*MXH^#v zJF_-R?VZDB4yE1+*!=^MVEqt>G%3IVtS7q*bPqO0Uq|glmm9e~Y!{TpTOe zVhP-`Ta&eG$&vs>n5U~=;i8NCU0C)tgR0*Vu{@`c>(x7@E3#%)W}z}hk*CNyBYr4j zcllvvjhreMbRlM!TPfZv#F-??p4y}*pr%%>zwSW~8Y`8GAer3l5qH6&c&0+{Hls0t zN#l9<;FlgDdpkM1Wf*^Ep(-J&w$L6Y2K_7RGI#1+$vyqqQh%>ISV>?MyRvERV07ya z&O}12WWH9?&NF{pttfC(W%elS1p%uw=OCs(&?us6`OolP<`r7NrH)YI!AvS~6K&BM8~&Z26^7 zXLrx5lys|q)&v0ig{ZB8me*C2AiF}Q7lH08qJ?2@J5Ul~a>UQ4ueF6taw|p^FuKG# zuyp7mD zIKaedjeNw34XU;kIIf68Ni7|lM4hS!RCyeY@P|*Ll(>LZk#6w{pt22{K=$u&xUL}~ z6gkw)uf z7k36SQVhR>Op(LPD5gHs*GA2sr|Ax3)KpSCnh;at;ZpOj5D}~%AS)_1>u%6Hx)9zFsto<}`( zU6wF+ZiDZA2)z6T@bPEF`J?0?{yOmOf3g?f_|-#XZgA_?tdBpP0?=b%42Q9bK9jSO z5gQ%)I#YCrMipu%KKpcwTc44aF9%-w(iME;>)?$W5Aaui{g8kCcc{Pp5%}X*f#;vz z;v3%pzVHJ0^fP?R%#X419hqDlykfJ@TB1%zpjT@s;UK8~zM@&rD4e zNTlky_NmlB1*xLKk35Z!W6|9@yPcE}{r({mKPbszw7MXDb>;L%&zcL+bfL&Z!=}}* zvU<$vC?km;gTetLAg`TJp=HnKV_U+JX^$jgm@SY4FuJN-C^v(pJa*K5FZ>1qOho!j z6#3~XTA3h+w2x+HJEd5??()~7oPhvB@mE-Zt^*{e^8!CuU%L$>%T-)+7H-s7o)mqV z>Q?1WPUj(A?MX91vl;-_ zT22sF*QP7f5_NL0YN8m%bgOSCfZc8A_ja;exEZ&+ZoHn%&hBLC!EJ7!{*uAkY>E2= zxk&&gYr6Wjbj~w4PLj3VCXNn@4wLn{k`8&FD|3C3w z?lell(c3Zdj2FP#vc_kGl|}u0aK@u<_j8>SZ={ZDYGC>s3(XOBa;&BYfwaYxdJd{? ztiPeqV76^jhO&5le?wXy!~&STuoR`2QHgI%s&~(K?)iAIBEVJputGs*gmj`Ls$=!J zyYkN_tb93~(NT zM##F<0+==u7$^^m*LzA*@_LwBWOZ1b-KCt2B({~@V<3|`qcAFa21;Q+;o zXi-3oQK;F4q!mWX?Kf2@jFj`d*I8GOJYv#4MbZqgYbvOQAZ#(3hy!m?NhZ7r`kht( zy}UjWYE@C>c6u?9T~!CbWKH{TOiAV?7k9I!cZ+*~&AF8bh`u;Wk=ciWFiEZS#-0`2 zVq4%w3Wb7H9b;``9UICU98U{UNR&cZ=3>ZH$qpz1oLSrhifdnU*1nUF7VRXLb9Un=(FRX<~(B|1Il7h1ES=BnjB6 zFhW&EClY9qQ@*2I>uEL{mkq`WQB_kN6zuYF0_rU4eg$PQ(IX0H61gp$7O<&pjt%+L z<9mGSsRKUt*b$B{?PLFdKx}dQqx<;TPj2HUKi$@w?}%(Uf1&d6C&4@cKfHx{`yJG4 z?;<|C4Lp7Y_+S1@;Gh1%KAwC22q@r_PqQ98n4B3LqcAo)55*Z<(TqfR+#qLHYIN2X zts)6l#NajypMAE)XSXJf4p>*O9@hWnKRt{;`)6DJ&3EtP-~MIdXRiZ4e*<{&dEm=m zIIS;zam#0(+Qa$t`p8Eo;9GA!s1M$M#LJiO;@b5CTzu>zKKJ4^JoWi&_0rew@n=8! z6gNKD)}7ni+Uy694$0wicy0tXX;Fui*hW0FNk(>SY3W}DUgHcAOlewRS|3%dxFecE zqPWGV9)#-S)`v&iYcs1X<}>cG`VT$SV-1yYB(r*`rp~=d_M{4*A3&(*Uz=rla`^XK z65BBY7B82*V=@5@9m+z~%S=jZz5!(z_XS};9-ykpi6SayYiJfT(LL|Tu3iEwR+e&O zx*sgrD8o3W0lB4D)njk}sT*@t2fK#01GwqmSS z^eix{hABfH=POI@?DttFX1Z0NO7ZK|QAki)Mbs88c@wOhs0hpojNu|m%LwSOvlY^j z>!~IhO$4ISo{gPQyM-pYlrvGG!ey1cjm(shwFt%PJ}&1;@(K{SAX46Ei0^})-LEWr zmpnH~;82A|jPU2S`~TS_ydwm$>R+p3U+8#jeDAdqyVtO*(62a-Us4R%q5)<{cDZ1k z88KYDq(A)5>ddvnf4>>-IfkQ~0jYn|$luJlN?A_!dtG(2R`o8iil7f#w1XtNH^|Rk z;A{AW^k=HGtDkxqut_&yk++$ApdvA{E6ocixVJOck=JJyUDZb?!DU{$%pUnkHgV7y zT&+ZzoztTyRnpsSoe$oWVkU=NgRQKnQ6Pp6^)^OZ`kLLMV^OOH%k)a@ZYcS2GoYSR zmS|)ztRegIHO*n2XEhd6S418j&8_2W)8&kgE|E88H}`DiZgDNRY@R zhYKU3xihAc_XHB#iU>?4ByO#zaa>jRidk$KNt(AUR!hf)4x|Jyaw;g`gnKkw*&tn) z#t=yo$&mnIs}5&m%Bu!hPPZ?1@w$3yFc4(s4{>s*RG^=}gq56#Lenijr`6 zuNs|Ymm3IjZRVvKuRddtKn>eMs}GTCK!BC{KzEA-V7D9wQL11Wj420D|Eme8%0!8^ zuG)5!O>u11h3Y0)RB1?uIH0hVkSaS}AGX6Ibyvko!%?O=IHJ)Wt0dl19@y34_Eu~F z<<9^I2dZY3L!4f%uq6WBsjk3CS6FHl&72H0f)Vm8^F(g9Q0#IVUw#!)fhiegO$>&0 zZ;Kh8i=pxFZ&QAYEtJ|S#=m>ONrRx!e_4RW{urz*&kItlxZqojT@ zRma(&RXm|RU7(a*RT@)iT~H_kCRdoIY^j|11;z#(iEL1Y1()1gmt6()g6D#Na7xvd z=T$&#u9mErlAK|gb z5AyKbCStFUr>FVZd-wR=@89K5ewz5`W1=?2OBadrM}^a4#QPs0fAK2##@pcO1i$bM z>fij!;BWu-22VbDfQP4nk3LQuA46d!h}fV-Q;;2ZAga_*8#>|fgO(WAl#AD-f)PfqIc`3JmuZ68-3JK~kcFVye<>C?RZ@guzYi`#tl ztz+K&tT6TxM@NCpW*|6`9B_lQHY^Er7klqP^bCfw*AGzT)~P;N3<8lr#kPQfPNta| zeSo;#s@j^Y3N2%VT}!y=dRI{E>%a_9ahb}tm0TeJp1P#4< z(6ueUtcDZ}*l^wWLhD%N>WYkz2o2DFZqJiW;%GBKg)4DbMUD53q6Q=jc@L7aW1e1W zbP~5-X~|!5DjsMmPFBt8GM9NT9Sru2>HLKz+R9tDGY|h`s-Lx5yVb+rNv(^EMQCr> zY9dd;(=Bj(3>pk zzR(qHpEiBN&2b?RYq*5ZPNhh`E*C|iI5msdXfH7A#ncNe%@9QIhpHg9sBxf-pr952 z%7ix)k>r+z5h3Veb*R@zKXy;VfQyYz>OFKBWx6boY77Lhh03|!pXeSu86`Kq)^n+J zaeGYE6!=P$CA}uP9b7G06I+DyNImQ6bDYKv;?}eus%*3=%m}a*B3$oXm+HTV_a{U~ zv`cUP<8 z%udUkIIrU7jvVL+)^5#e8PMlubP>MReUN=HIXiLH-i0bXZJSoKdZHaLC0D|-aRK1_ zIrG-M5%fmwpOZlC=~-2<+2=FF0i5vry;=??SL1;i1*Cw&G8L_cvPQ^Z8A9!24FbW#Eo?$%XG53NUK3krkD8UO}Ely_H=ip-=+2~3We znB0;a>ZREl%&8n%$TWklpgyZykn@I7niS{|OesRpo!U{Z+zLjD39T%u zTCHb-NzB+f;M;sy$uB@=WrhgU5-%}8Il3m5n3>a#Kwu&_y39Frx{XXu0-1?GVY=bD zH6Chgn99m!*ra-|!X?|oj=Dne+$lsE2+nC5*rZ*b8`#b4VY8*dWc&WP@~tzvR1Hjr z4FHmdPxBW(JxIv(Ygr!1cs^Z?jx6~LbZ*(FOl@^AR~8dsFKF7@crxDCGFxn5lQ;|Ls&=P`iIeOs-<_a3?91!A)PQX9iTn;4@o zbBohc;N(QAi_4cbc>1aHcZhQ=!J0Kpv zR@grP9zH6({s!=~*NHc7Y~oyO@f%+&{Ne8rzxwM(yl`m`_wNDkeNY+?OSjQU7F=UB zK$ygZOLGmIsb8s{eH)M-to9z$c$feD)b|=_2{tzj+D&__qQt z|KcwG$N%36{^lQmcisYia0U3%7ZWeOka+R)TRic^21geI54Qui?oHf#_z)j|e1c1t zAMnX1FXHlJhy3k7I>J{!JFU0hxXIUEdx#G{-eT4kmo5el_kq|b4$N|Oyl59UT1F~_ zRj$yfn$jC85xHSGS>Yyu8k}kEntxsn&`Eh*fKh($N(&6kr-@A^HMDZCCaIOzGe_83 zKAkUi>z+{&)rqb*VQR&@@wtkFo;`$>Z$L_9rTygSVBz%F$9JJy!>hBhjv@MQG?BI~ zVACLTYpkP;IaBySv$QFU#bV7UoflZKr*^;$YST&@2eBi3%fMCWl>h?0ufipkhC$(T z8}Qm}f`yDKY(-LNEYLJx)Wuo_ouXmus#+u*a z+QF+prXDUx4vt3}!P62m?MNo)ZQw|g`Y@3vXT9=|_*Uy@q;Tai~v1pOL4id%i$ zn!A8q3helvhylp47+^X+^iS#J(8|l&C2G4@3_CML?-KL!S06~vM4i3`xv5Xc&a*^)f41_g?0a|O5h-!HwsxStzEi&er zx|0+`)hpRKUz1rqsSW()^#Ptq^xK`&|2x8Rjb3u4`*F!yWBas!n7hQ=u75x$-%jS+ z?@WKiGd~}WN7bpE)Sv!u=K*WfpIJKZqdvboVefdU&yQI+)k79GXiU)m6uNG`{&y*N zxau0-|5(OCK zxT~;*sbx$(+>By+xJJb5;cdSHc1#P+`8~|g2wb=z+^rF;f z3^xQX6#yWB0$O4o4OR_0^9+ro)vP*lf4>{U1|5j>9JDzCn0|fU$lIjY$qBO72)A;A}K{$WO_kv{!J2<}?p1lBkO* zQ9x}VMWWAm6}qR|Y%QkDwWlTdMFm)sy~fJbMY@zAiMb$%2>xJlyT-m5Gy2gpGr?k_ zrkLjFONlTMVNb1%5rMD6c`jAX{ZrV88Ry_~1pI6gIpIR(1tgFwB1bGNQmwZWdY zAq9g-&gzbYDuj~u#zOG!rK+=$vAU-}3Y*mPDY=@P zT(cU%5hF>PcNV!VFoLH9LdRZBs2c-XAIP>=UC~SHF{R!X^-|hzR@(}<2_dRFt^Ls) z$F6s5wJZP(yNe|0_IzMgb!!1yLglqCB>~|PmSk>0j!G0Y%bk90#jO(}C$%>Fb^2sA zlwVZAo#Qn@1{Msenn+M`785fHO)~fFgiAQ1B@ZHc)KUNd%v4T>O&?tD7OC7S#x>#C zda!~BMuC?^F*?mt_M&$%ipYto(aE}EM=l!LWM$GMl|a4+#_`gHOY(tMphMu^hvYW;wF6ZSWYM2tU#;yUx={9qFn(=6x*c5Q>+Q8?YJ;IYuox`Qa_OQ1{ zR3`4N@iL`HI^QfS>&wc=H|L?GHo>{L|l<__IHa z`s$YtxH&k$ty>fC-_Z3iG&T(Av0<QX0I_@wY z=U)V$dwRnw7xpkKaePwvrbkdy`pGe}M;WxO%EwXWBph~{nsaZuRqLKC{c;k63t_)>(Vp)Xx8 zWcTriTyy)Au#F^VZRW*-9sRQvouJ`BM+i^`vSl@z#%_Y6eAY)GHN6AP2&S9b1wG1r z$>9RcqBsO>l}FT?UDZ~=w?7}AdbTjA03tkuQ4yh%-F=w|5rjHsS0Z9e=my757+TQ>lx9Wi_;W$1 ztFd0LPJVXD8z~j9lVC*ORR2%;;gY~iL{RN)Hr=8zvEFCZ@eDk8P&_#Wj`k8?{nEe} zpWnyTYa5&Ot7N1D2e^|ybwkJGU2wJlXaKQW7@2^QF?aL?GvyC{rz7os6$fTBic>*KS@p# zUD`m83NA}3szm+-OG*I47R8}~R#5AewI`ZBJp15D%6+TLHFSqba^;_}jzL~T>^SFw znZYz-w>MzFt&)-92>Fl?k(i! zm0X92gQ&Qu^qUwR`t*`?^8-fh>yG+HcxI>}9Y}V`v3f%~%_X>)t788Mv78pFtM*Dz zG)7jyv0QNy$6#2LSpEg=CW}g71bQdRUstPpQ00+bRf>KdPSl&fwl~#svGW#C;uU8$ z+&ZYuIP3ppgh&v;J!)9}HR_%o=K6b)NTon8v(18izCP^0N!AW&wZ!}^^&RDLL5N)nPjI7RqWH5zNoZSp?v%v^f;)HwqkLvKriOn8}IIekm zOq`w~v-6k0{`sT8(Pdm7dzCoAyq|n@Yg@j{1|-YG8h9R?Aar24n@L9zBwsIJ3&Ml!=kVS0f}^3>Lm#z zP{ZT6Sgj|+bo6&J?ZDuOEl{5*Pb;)iVD0P4s+b(9x$_i-E~34wBAKGdV@DP$fsr3G zLyaVEoR8ot*|BnJhs_OTrdF%t36X0#l@pboOdyA6%5ux-a}lppPBj3W`Aeb4^eLE~ zaI1bqJqHC}w^K;5P&-2&t?*d=s!nWJ%!rDdUcWWb)sv2Tsxd}rj=?&e^~sI9{Kd<6 z@YA18y#99b(H1y70-k;v*dM^dM~LtJ82E>u19$EQu3t|4>px}vlRw(WSHE(=dk+V0 z-cFo+l9*N4P`#B-PQb7Tw-$60=7d%1tE3gR>aTv`yVIjja>AqPKn^qm#zN8LDFH;g zS0!-k_9<`Qnm9TNT)%dN|LlK#9{=Lcj`Oen=286Bzdyxye-8Zc7lY3}UHIbjTYUMY zi5H&T;M_&MmgAEXe)Q1^KD)WW(Yc4bcI^n zK1*))fx~@Zf1jqsz?^AQOdU+J9`QYPrbMA^l+yW`-mVtE?63onk!FwmD67}WnTkpQ zBHY3dnC#ir(LPGq_{TZqsvM$d$+8^t{Ev;=r<>MaDt z6FtM}Gv8x0u~eEWjj`30kn()DPrYUv`v5ACHaK6!nJ&g?Ln!WurM8<6&s6Ftb(50| z=dUn@q1F<4x6Mot5n)(oJ=tT)umERW;KlORGG!^ei1W_(|it zpcNQ;=Nz?Od852mSxCdwx-6d^{=s0Y*ch2I+ZC?XiCu0-3+kLQ*gzZb&|U?aZNa8W zO^gf3Ww*Fhc&nC)sjBJ9L}tg5vd<^YR2NT9z}vU7jxGRS{n8%3@cbUGU)#fGQ}h0V z?fB@EiQ|V`9-jdB?j`O&tU5haC>$FRtd}m1x_Dv3ix;D=Ufb}=C(qYQkHDKZw|w)h zNBHT>r}h2^;PuCe{e9gcEC~|BE%?)N>o!<37TgWV(*CiF5|nI`lGeMe7-=s&h0e000$S3ADSSibh=TZc&!( zqN`;5Wkt{8#0owyVBEJ_ICnwPK)W@&L}H- zmI*koZ;_Ke)kp-!@<(g`3VT;Le}dyh$L&r*Yvos64DGb2=)C64zUrIz-d+ZLGyU&t ziS2%_|9>+X9?-PzWd*ugX}Hp|!kWM!qOY%c_xKrSpy%1^(~*dc7NJ~5S(aCY>(0Il zbH|F!PX5CIq0kFQSGc5xmTGAMrIYU!)Y0;Zaw5H3GRj!`C9PN7F2Mes)rZ_Hz^LWQ z*o(&nHJf=j{)c^+jIbD?6L|P=YVsl% z(^~zON8fX-7pj`~PFauu_NW8JjcHgF(g2pG4DKKE25xp*iT1_|ZZyDN8>TW5BXH*M zTmS|b+>nWG2ri;0YYUGwJW9#Xf!a7j12!pzILMG(t-J_p6g&$aaId$%w>+0gZ>6UD z5xUYW3a}zdbZa+oWg*)f(5;$Ti3oa>4dMB7uwg5!qPW@P-aZjLuEG1*i<@|O_ZHuJ z`F_3r@=3k*&aC%tfFFGXJlg8@9P9y?uA)Bo6zYp#AYS_VB|i1Vr*Qs>r*Z!2>o~pn zh{yNt)X9Tw@ibYpIGrRbib`~@+HZ#&fLpzks!7IxOx?BESVX!J)UgenvP)>FW6J4T zRgbqz^%y3a?w4zufiIzF2l-(+21sH2WkFnr+2sdM-#NCmt!q;{j3hn9RA*Y9W)w;Wwd5Rb{bai>Xw$h}Hwpj}GV%$0}AB zXDIfy(^fJW6}|{`pI=S&6l#hYMB-GnG_Qh%iFKl}`+_yxZ>r!m7O&p52E)*D-0Bl8 z!4P3ljo2|!F_Kx~{biu0-^?Onh!u)*fXM#L1SjQ|t%#0dVtbl+bX?rd!liS-=RbE2 z&pdUAYfl{D=;9v7K9LWPapM;^@x343=PR$w`tVb2i=%VEl_P*eeflZ*#yh|dUnU-& z7G8J~^>6+q_y@mxn9sd%p2x?<_dcw8@Ng<$4>fl-0$KgqTFMT@itK9SQF1snoK7v3 zRjd6?crH4kF7E|x9qM_?;mv0tR#ii2sK7xR2m=ou6yAPtiVyY^*RF2(um0>j{`8+F zzW4X{`4@kc_5Gh0Uw<#~cRvBX{^BWKdXfC%i^RoC8=O1O+-@uG-aEmad&fBc$pc)x zaKOi|9pn?wU5zK6y;65RyN9=4zsEP1yz16IdgJoa<5Zr)2|tms6cI5 z98UE7Rf-jZRzKRbqu`(%QnJe7h-+3n8<~kf@FvljAB+XSxjc)~Wi4E$FC_zZf8VVPdFYskteDhyb?58g$A-xj&#=8mrsH$~l$@dT9{IjGdOos0BoE zD+miuQ1E_rNJ62qfg6y+tyL{a=}&3q%A$iz^jRS%`>;H4qRLYbR6o#_Pcw9$*a9zg z8LFjtC%5iakcvTR6=hW_x2fI^Lf z7(MNSI@a$$C_H?K`ob3mzxma}eB#=OOyJ&~6TJJu>s$)DFsW zo+=4|iy-z4(}^r>5JYucaN$Za_mD2mP1^a!bn)Md`@4_gtGwV4MHYU>9=@8QjD~Iw`=pKFV=$yA-Dtv8zF40`3|Jqxif4t@whofsZ(ShnB~)j=d#%0L{ayjsbfPO8F;^CvO=0&s^$+bTdmiVlM7Xa| zxWJVm|B4O!Ks|w$J4};_Y#B#&v?~XF`gxl*_L4vxaQ+Lr3u36WZaGB6BmjH&INhe-3NYN%fMPMw}kDz-OH8Vzrg}Q!$oGfH* zt6c7+tMOIvz$*+{GgF8rSz)bOx)x2Fc9;76K$*l$nf7#M$hENvRL+VDEB^>=HQWPmu}mEQKE=w}X%DV)s=Uy|HfB{R7KSV^h4{WBNyPKZE zX3AxaM_9c@^kdO@(Z>1>{nDJ^!am89H1OAdC)tYPSdk~Cu0l>dx89@Q^6sYA62 zYN9B(+G#^&0WpeB7DLX6Z6BX?hOE?un5eX&K_(L>QR+;E1VGKGie!|AIfce>33o_p z+?8`j$uj0J5LX(((jroqzgkYD5~wu#X+pmI^cI_YN-?>DPh&|$(E0fW$t$M^1w6C?Bj{24(sA$=XrQE z5SxLMyC-<_$DiTvzk8QI_&Ms~L-70s@XBS(*aMFrA>Mu$c;jvG%^Sq=41Dto6aVbn zoBG|~JiyiKhj?%=Iwd!o<%7cp4HUsF?Nk7)v)*BXIz%UTY;w0vzB-#( zF1fC|m3E8cLZ?#>#bw6^JB%+N0ab&B7Bx?giT6L)^1}~V7cUjR^;_rb*Z*18~`DpGWyP;^UA${C;;0m+`U^I z0sQ7SH~i+e&S4bd!K1{D54L#ul}C8zJ;a>{z}x~SC%|?KY;#4cU83Z3<<@QR)~&)@ zHwxeTQR3+*w)o~(_W1R$?&0xgFX5j*aa2Ek`VRi~ZzfJpi&w9JD=DrsShR9=1{DaC zcj}n*He9ug2B79t0zjqhMLQj&*ITOWOG_W!00Oq(fK!Ri{vwhSi8JF$3jpVo#Xxp^ zVi*M|?d?{8FgMp&Wc4-JzpBZ)^)L$#Zc`JNX_DXjAuXd?_n%WagKol>OePvL-L{mN z<#FU_b8}$p>VJAwb?PB9!TDwFh>Pk%O2^bHq!YYwehN#DIk}zPlCc==9WExGgYX2)E1w6WEpNofe9`!y*NG?Y0VGHYlmx?^Yj0es27w zv!-$S*&`ggIPCvJ0vlM~5xt3B$|iQq>-rn-{pL^x91vD7oRaF6tIy zxO?+H<}7SB2g=K9i!j@+h;RScn1DvPBeYXE_5M`t8swa1a3+_G?6MCdP!qG{U|8Zm zta2%A4cv)vK~~QSBf#96Sn4L5fjZlN;<0N)VU}oR)rJYpr^>7fi9=ig%1l=*71JuenUf^AH*RPxj_Y$kfOES7bnk(FClO@$aZ7!KeQ&|Z~qA^>a@_-a&(F742( z{hHJ!YLXBjYjlnpnA=pw7ag)_7iltCY|o7*ZEZLzYH0(YM5O8PC`=YLa))|v=I`~9 z`hJ)9IfvgnU^c!9S_939npxCCGEt>p*LfW}LArNRhk0660D*TDhTb_f)4ia2lZmA= zD+Z}nnyv5TWTG&7?jt+$>b&cgicBeiq}0#@)ckDLJWZaQo+1FAJ6Cw>>AiaL+8!=k zI?sz&4r}imcsM5RKe&fie{vsx{r8XX+8e-wN5Es3gO{(Ul5y`Y#>Y2-x84Qb`AA#o zx4u>Qr+*mu=GV^S=+cJw?kC=SbBp6+t>rNasEu2>)Z)+8RwZQNp+ehPKD5%_x5rbtvxD5+8C(m&3@}v;O@Q2qXY2z zv!(&r26?zSG6uAf zH`4E+H?ocybkRW&Lx+^;MlShg&CouSpHH)7$QmeaEx@a;!c-%ObmfY4-cwWTchfSB z>WnbU{em-LlFL}Dz~V$OIJ4xaI=MhRvZx_H0zj#5s}>inN|nkOvbvVvrq2f{@78kw zUAZgA1{OJ8`E#^{j&_ZX^!R8Me$*zJz&bM~WcY`IcW(e2Ag9;qVon>GI#!@9`c{RU zZQvC(pjMTr8f3R1GaI1rRxqbSf)Nz^E$8bDDK z+z_bEDAq~Mxruy~*lZxd?<|ZeY&LL*u7+7-468RB`a}OV%V37 zCUNXy%Fv!nw+q1<1I{f-w+yzbh`qjq=KFu$z#zC_{!4gIF++JJ)_yF1d@_v&xkD_kC)wgni6|My|2+XWDyMlFy=(>&pjs9*uQ(apX(GIOwjwhmzu8lNrMI-9Nt`vK0+6`i*F0kyu|%*?EygApbtKCl#nI54Z(AW-T$5pPpI8s&3kt^R#ikRRf;B2lR-a= zEYwgIWHU3g=H68&(KA|b3080p|5BrfQ03I>jm|F0&rG$%E!r54=|LK@5-1Q7KBJA& z64lkr6wO0vQ*D9>c-CMmH%LrW22yrKp-yip+w0FIf_|bQ&nu)WLc6=D>a6d#FJ1Jw-Q6H z^rca7hzOI1voL2`t{$mfuQFA3fl@ShJ(FzRh%OWO zI60X-JuO_n23&t^AJ?xQ;L@c7p1XWdhvzpaobuj>_v$-8y~7{;c;fZ91Qd=gpsruj z&3<+peD6Kr?RS7rZlkWA2mjR{0l)uy8@%+=d5jHl>n?Efy=_f5Yep#dP$FgGWd;x( zy83u%f;^ zEPmysQ~b*3QIB0890wbmK8pJ2(`|in`!>&i@Bmk@9OBCLLp=H9RXqOGWqjou59_U0 z@8Ff!AMm4(P#ndB!-0c?!bXi=@}A^QF9i3Ske(XUAdBv%`iC|iB#DznlIU%L#L)3A(|g)7Jj zEbaiVV0RL=v0Tt`&Xtm7awWP`KU!To)K<4Ci+loxhy~hetUB{`IX(eu;S@HxQrAeyZzdu#B`a8o9sn|zBf6eGPJZ0fYyL( zHoIeC4{w&5QNox31#f#EAdve|rZvZvxk@^%~T}tb!Mh09m-Lt#cvEQSGJSyhJpX z7eKC^j8rV%a3U+(NyOrsgodKAbB(I4o^>)}FNkdg<^*ChQP{7|$V{~BopF=rV7o1I zai3K{W?;AoQ&#VljSjlco&h1Yshn(zq)?xF5^b!9Ow<_Qv}#;Szze0%sXlF;G^eOz z7$aHQgJ5agGIxpYNXUaJRuX|GZVRx{HnblroHM9++gK|=%$67mk7@gNCXRBxq@V9p zw-b72!=3v(r^HU?-_K34z88gZ64#0Qci}xV!qxrk9JFJFL$j9@JIOED55l)G&RkHx zTYt9y^Os1I$upk|g}=?tEGLkhVA?Ff{g6(_(fwMcgXHO#U4!@E`D+WVDV(7)#6StG zmOp2nNm|$Fo-+wC$~|$eNa{xPgfhy5Lw%dx@m9iFqDaJgLhK!h_7VVgi&LyuD;dhN zHrKWC*D53~T&U zp|kTp^;rpD2O+y*lg~QHoLP3V9MPArZ7JJ6_HDPvc{NTJ>==5Pw~o6Zs5QF?~Zxn4shkFHr4wdg71HX{OmKt$De^md%)LT z1pb3RCZ2nK50@|QVYAubqffW^#m^t$t+y(EdK87KR5GuF zC8*?jvH)dnH66s+5p{Tgm?Dbjk+*-eqQI zb)Gnh&JN7B_N?$FI5a3D-}yomG%j(7#L8kZ(xozSd1c}t!|m=q3q(m6lY}u_sisr~ zlIa4G04h)wH8?RbIWbDi+qC>$A+elt4Um$>L0$Svgv#Cqt_lTaRe8|h1U*rswr#1e zDI%`I_Sq3~7uHs5E{##3Dtx5`O~ixPcI{;|V@e1lB(dw20H?N0wdotMRqr2(tZq+K zxDV8t<85ofs?s2^brPd&@34(1M20CR1=a$#35`qBZ&p@8gc6%~Y$gabgB%GBs!t5p z=Txkaxy}{gL z#dD7X|NKwDKl%N=dh(ego}Ln)-74IF;P$Z~BMEMR_Nq|hPt;7U3yEQrpjNpuS^!-W z4Rm48iWr}I{+xBjg&FhJQ|LraTd_%7B0asPrMaVk8KoRGQxR4tk%zJxB&e5notp%( z*%U@Z9iNcz-I4iR)K4IN0CBHmmO4opt}g1AhF`J)FOEr=EKHFC0AYhAFu`vat#Wa=Gyh3-OR3|SeOa?epmfPFx z>b@4bQK@S&Smi5M7Ay7rRwvV;9%Kv5WL~TFNxN$|E=|{i0$@p%R+`r4)(WXURs#gU z)ffRFY-EE3h#di+`f%?^a!|c0XRJZ zE?flm4uIRY!5{uCb6XE%v%goL|K=6^i+jiQ-~6}7+}p3Zd|693I=yjzrgA@4>u@z; zgsy6@rebs%z)6XoM|8K@FZS#|PCr+>L>C*^#}%5( zLX#@Kl=Zu3-sn1y9ji@>?MQ}N+upjHKylm6W<$~fiJ_t)-P+KaBa zPbmQUC|U<%?Rw+ar@0!u?m_>ys>=c2QS5FSTDO8DySu8@cW_i`Ml3u#d zO2{@>LJ;=i>Zk4BVYd%J-^Di83%?j&7`vjcb5?gmExBNM=}mxQsg#1LqSWEL{DNd^ z))tk0Jqnl`f0j1eFF&I)ng={5nEa*t*U=g3kD?8$V1|ly#y_F_Hbp9wfyT(vGwWxA zT^zBmp1;M3zq+E)ZqNbUo8NIz74(>#AojV|Nd}eGfPq0Uda{dRL?!IV&$Q5afY_$n z@nRr2%|k_lCDAO4s3~^x!4(%|Zlq_c<0Y~b97O@KRRn&T;`YcfHibNSgw6I7y!wmx z@&Ee&9OM2Lxc(S${~qwp4dB%`qwYP-cK#LHiJwoV`2 z$L)_lWn6wtgi@BBfgQ@K8NY&UTqMI(hL0*uS?KzzqPcSEbX8AKoM22pHd5o+T#WIX zPMosmwkm6Op)`T%1dDWt5WJ`?$5APs9-6$y!!BV2S4J=9_nL{!a`%yvbeuK73gYHJ<2E#g_KNB%bHcT;SwmUsA9|C>@lh2hDsDifazqlU9UCTR>p6N zuRby@Nzlj4_Mm|Jh!y&?li8iDQ`@KGUD~9nI#3y-FNpy$6C}2ZA29`*Ky2+@Aswhj z`H%^AlbqN}CA>2i5MNR|2%MA~>ruc6mrsf|KNmTZHT}5@&5LG=l3d=eP17O*sL5`{ z(fB`=)VS(yY7Xeb6APsFxuB}D$Y|~JZe4DAMfclEzwxEXKlr`CZ~pckt~_>xyZ4Ikevmjhp75cG5mXix zK)Qo>B?^@sERBQh@q>+YNV7q^YGOg}%?>M8-T-KcGT=&#Hut2PFiPQr5@Ok0Y@lMU zVtLD}``p~My^6g_gQapwPz9eIP-7LxF!0O3Cm$DYe|Cb47YD!owe$GZZ*1}A8z=bd z@15dr{}%X%9}z$LdEu)s0$=&^wqE>|EuMXn+&kLG%)UVZ%zUU~flw{C$42f)#}z!;?o6tj^`8uYR;6i`05+enxI zYm3S~os27$nPRQUH6F6t(lUWDR8KZ<&QPV+h??t+Z!&9G;9(bH!5p6AV%$@u@xUb!MCY;Y=-E{hHDXhrJQJ(XLY%=TSyonR zv96@Hh}ilWMS+m%093lr(J&F|*0nm=;gqaA^t+O?k&Dij|7r6+(Wi6WSuTHxVMa+91S?d*2I1`oLu_5Z zZ&ap$TV1Peey06>Fm{PeCp?+#vkGKkTY>Fq^5K2p*S3WV>1ov~uRh{m|NTkb zy$kLi=s|t<3GnuNz|Gshb9v_a z`@+k61w&n^OUC0Y5wzJ}(x;WR^3ASvUj)s@p!^x3O|2}U9Lt=jH#+Z?*jI@}&^y>(oc0hgyBL|_GdPB_gijIq|bKIDw^>tvt6$KL+#b< zgG11I=W^;W532;qZ^2IQ&g&#|VeQQQ^!!Q)id?ba3@3vzRNv<>tqz!{QBRMItLViW z1~My&_WKf^AD$(>h@Ev%+tjAY5^Yry5JXWKCr7T1dq%$@K0pR7Kzpb4f~T@QrK{Oz98vaG$er;_v&@xStZ>8*wLw&IGl<+i#Hf$!?Kj`y z|MR~;t-FuFD_4P!J_c^w0A79rb?IF4zx+=(_z(Zp=WzYG%k}7Z@Y7p`lSdQV?IUCr z#z>$>Z8pS(OPBfUzk3be{6`P)bJ0R^kmaf9GfSgmad()M5#{gL(C%SK*Hiye1M(uz~rYDIcIh}~M{H@$`9j0y- zhq}kKkSHd?hj^*4VQI6c-dz(UUr5xf@Ed5ub4lgX2Yr)b+H4XQ^I(lUrFA}zg@9L|kvI&fNbRntDe zk>xgS)M??t3GnFn7<&V_c5Q>Fo;={wPo2Z1>jyYE7)WffeQ>{i@(=g;y&pfsn{O1h zTVVeHb?HKJCh+JH>g^lg%dY}&eH=J3|eZPt@>|6z^SvdHK_?8vWa^Xqqt4t)07@J;N;ckYVC=JoHBt&Gb|gwg zy)F#7w<<)&PdQ&E5tv8>sw$H*?sF=v&(U#%DrUiU*3c0@&p=190nsO|abSNr5Ug4R zTmZvWamCF7+X<4;zm&tfSiIeS@z;e8$tsgVNF6l@MR^%@ajh?`H|WY>O>f5mOjkCO z$Wa*S6QCQ-tB_hC&|)*z$i^Bl`c-1A3Soi8YTp_pN*&dDN92ISZ(ibNMz$3@BQ12o zBlYCjCq4Q>aJQG-`k}Kg2u#!JR4N^*^DY*W_L<8g1`<iOVKX+rtE|G^+rSf#1HbiKm$5g1 zci%h4zyHo7-1-c>a6zqK?|%rq`IZu)Kln}H*S-}vcW&a|eb&Q!;H;`l#ktxVZ$R;B za|k^1B=O9X#QPs4e*QA>!3V&zPXm|EV;*cU?%V->__JA$UAf7x{?-%q$A9)LKX~)K zdi#T_=RUW%1ayhc&>U#3pW`h+Fsu169aYV;ia6KW+5r|LF z_F0{bY=9uA+WBo&mn!j3_7UOMMIi!|gc6Vv5gx8x=DDbB-_&!N91oaJUnLCB&1 z?)GnM1f1GCD4&s_h#{JA*$Q2kEGOe!C10&^u`u2ou8a@BZ33yjj#-G|!`y~=RJMzr zTirs*I`jLzLC>6tDE*g|1KY=2s;1pQ*i}H+Zz2rK^DAe<+h%x7P+k z_o4sqj$`S;5CCITjSW?}>rxs8E4b@RiI@jw2%Q{21*KJ{ea<4+Q=zm0nB4e%?U2mVk0 zhsXIFzx&0ydG{gTeml9{P6UCm3GD54YO-M>nVIoH!C zRaye=QsOAqcEROR3o#^|Dxmv0%<&5hl(mxD2dj`^p@AwQ(_+MwAz9Z*cskSv+0n_# zgeFAJVhoNFn9Yu|%6LJlGOIC0TA_NQszs%hBY~0wPfoM7+`a#@Oa77>+Vx_YyG+Fg z_jj%YrGm++GcREiG(A&YM~Uh%Svj1tmtz)ZpdxEq5FtpHoBc%-vs-$BK8~b5Vr8zw zC4#6FW*5nph@^dMjQCZZ>|SH8mK^0}QnL&EK}rf`!YIWzz4oqNa@pTCNK2F&btqOH zD?x7-*Zi$s0c`WOPLZw8QCUZLvTsoUR8nEBNXZU3Ye!xIXST7v(??UN-!Od`8@%i*QP)~7aD=T{Wpg| z)k%H&!7cve$M@^ymnYwQ7vLcF4p2u&V4eaW-3H!y4|wwp@RQpES1wQdul@knKq$XO z;@f|`j~9RCC{Gc*b*pge_AxR8F~BkGKLh&_I7n+0YMn`p?A}s^4AW$5mc;+j z?_8*1t*)atKvVwDCRi|o+`!WO&X^0}Xi_%9v5YlQ5_NJ_fJHv4 zs@F$5ikUlGW>BPpE}S4k?N8}ahY#VvM2(HcdzMW)VFn`46jo|@?X;?*%P|fi6*{WD z&t2BW);}PfptnZ^Z4`o?j8t*}byIPdfHncKuv?)00IJG8&w*iwLpQSlNQA4NtUhg& zh)Bg@(_}w>rU+&~UR&Cz`7wSwxJ&=>wS(|K@KT;qsNh!#fjy|AU8k<1KlD0KkVI0WZG_T)RyC z(H|6E`1}Uk7a%DhsAeq0DJq0 zXP?sdeEbRc{U06I6VKht>tDFefBqj|<^TEra+7!O7cO0NF(bJOc-2fw?JDeAcMbd@ zWHe3X%AskcoP{dox4R|*I)_T*FaX5py}7E_HLQAMBgC2=JtUac5Jc?=>RpvHRF!vB zr0gpF&VUPQ8^F@t00>c~U7|KOS3_86aUaI1f`-B;OOnK1pIDene@s6zK!(yzWu&eBc z|Gm~DUDgS;2V1ag@+TR8o>2$%(-SW*IcdazjnNzg zxCjlswAT3bLCux30=vYdtAtgBE>a8E?Gy|;ClUzCaUH;BITtQb1*myvs@{xPN{5xi zbNI6%+sE?Xhr_?$QNJ|$SSi8pm_q%uS z(>H<7KZDB5diy=ZD{q0{{5 zB9M4+{}>PMpYYuI3;4Z1{!(52@w@!t4{qispA?^cdY`AKdwAz3@8Q}P-{jsi-^9g_ z->=&r-NeC_$DriBP>HC>wI)zPMAbpNtF&{HBS6f`a+9YaP*n#|g%v8ZW^oF{7lEm_ zSCgtVf!sp;o#Tsv6lgzH9r$mGpIyCIyrwksoMPVNk?%BF7c85-@< zhN@zEzl{*JRB3e7Ure;x#I-X=j@+u|5xN#vCaDpSAk0>~`XT9jCcxUwYzAx-xbQISB#YPW!ODWwxIEy|>`CzTO*qN)gD zI|~mUo?>o+3+KoepWnylo;$+%tLJg_-pldp}El_#trN2z7J; zU=&UsfggMdy!I~e${Pa@kAcr!pZL%Jb=9B#$q}D?YT)5R;QdcB?mw8wSrub&Gmwai zwq`(u%v)qGPE1xJ7?g6UP(Ip9O&PfZZ#0TXl#SH1hr|h23(eH>|9 zc?Njx{4wE1o@}N|Lsr-{3{|aEOo=XjqDn34xdjkPdec_tXf+WFs9A{-kz3@D$Hv&m z?CH@l@ZiRlAAA5@xg7YN-#(Au{O!c+uN>nq|7wfB{RiUD|2FWQpMWntpY^q`Z}FvH z0iJ$hALozAhsVI(dow<}bsIO{xreKdAJ+B9FXF`X|drh=8)=%$OHt<=(aR9$E+C?^!DX&HQpu|3m=p4}AzS5j0R zG&^Wkft^gXGE+ya2owYm;?^`hym20pz(&Zygj-_=`=+cy$kZH}aL{z#+1f7xF>_R@ zEJH5$N!e(mOgx4pj0u>mtmAI>|iewPAjt)EegpRUv&FXI1qa>qJvGdd|YWHPfXkpAkkfihiZ? z`8qEqt>~=Ep%$#Ajxk`fY{7O2G61$RQ=i=;|hM*~yX^zePSt zUP%V+^oaIsl$>0Zd1W@8oV9C2O+D?52Ij)Rt$bCncO_QkRS6K7U5IFL0Y$(lw1^R} zQIQGUzJq$f@R1f%u}BU67zK8=Iz9V^W<;;BjCqBD|~bdJUV1P@mR$+f!AIKU;p_X zKK9i4cuuEE!|bTE$njlt}EA>zwZ}TwIdrg{=SOc&-XPXS`nhZh%%W0{pBWV^-lF6 zuAo@}n;G&Cv;!&VDnN*psVU&txv8XSY%prmvR!rDH7L_px@7u9>K-%wA3GddcGN~j z2*}@k7%mks+(TOMCbZ;;21Z&_fynfDhZfFot#X=VV9&4bs%vd^kQzjF6=M?yU{3UD zV87IN&<3n2Mync?h0|gsP%={tZ zF8Wr)G7Bj7DPa#J9o918b-%d}53KPzV_6=y(hfbw%Ir8BO3RmjoBO;QufFmbzWXEK z!a3ml5&7o3#UHf!Iu7 z79QMtgo8cuTi<%Bwx<;@zkI81-#)3UR}Ogd_M`aZXRqV&Z~t07_QkL8-iLov^W-7N z-hsg0T9Y(8A_&p@lY}bwF;G*1xAQ(WyUSW|y-+}`rS8~y~Y6tN=oYt}+s}i}~a73;tkmZsc=dJ)$Kt>VB z8bebmQ}x{pL=-YQe+MC!&xU&~BkvKE=sf|Tp`4Z?wJ$pWPw1eZ(}jLlnz95QU4fR& zQw5jwLDcf#M72u5=!%e;W^vZEK`1dx#!6Wl1f=-EZr0XW#|F)0OJcjSzm!TM`{5w0 zbGH)VN|knOLjF~08h&XlFfA;}sjj=uTb$YmOtal{!K`UpP%xU8E(i`(tK34C+up9= zBukTx#XZPSa(b~f?&dnqh?}NheBL`ibca(>X)JW~!5XdO)FYf%b1Qj$hxswqQT%zGE z^+=_aIsjbp8C9pVI4E-s1gHrTvx3#Q#(bWgEY*re1YH*aq9<}Jj9^I6Y6x6l9We{nAV zlmF;Z{Kem%@^AiT)(?J0yz@!mM?Xn?<@po7^rcbHK0!WyecAHj_E#?A=0^|l#xL&jwYN@i`_2|5>il_fZ*X}bOe8Qvwt*|A zXn3!lmCJ$D-UD2F)4FBVEbY?#W#pzEr80mRQlGxSll&a37MPO!iWQgw%?N8e6{~~hRkOHM znJ#;7gr+gFtIn3|YDJsq0$8qn%Jo)ZiilY~4j6&xb{QdRdtp=*IEtJ;tLXMG5y3tO zpm!@3q10I2KGB3pAuw3f(cq*`T&j+U)z9slD#cwxCAyyrF_h({kf6pS2Q>wXGE$WL zxjt*VB^Yfspwn9*#_~$1-1Pn_q|Pbslpf8+l&`z}SO%30RrQ&z%q4u37>W1s;=|K` zJ~SkH8dwV2g>T&_J=plTN9eMXMO}*4W0A2T@MsGhpBBFLwG9pq2k+lJ#&^DR65B0s z?HcONeeku{fxSKO+kXf=_89BtO>k9cZ^D>Il!`j4>n%y?3v0cmepv zSBRgzTKMc{#f1al`W4juJK#@#GULUsAJ^kw4*upJUdP{k=L6oklel_S-K8;T;%BK| z1W#QKo-9<78!PyfOS;0Ybx%}wR}9)Gt<@izzM?RkvpBM1Z7z z753k)2&q~sCs+doH7?OfdUoF@Ol4>pul%7_uB8^+Ipsa#HXi^QUEcZJ1T{j}!8{#% zh*ne56N7-|t%6!f_VSL9pAYD`l{um5PI`_@G2{PP&I2`8{)%;e0a+8>y3=_{tA@&t zK=p0kyFa&+2D=!oMY zx7!>2IMDE;(0;!9p2oO7TZ;Psn@54QQqiX=<_$RoLKK3q>RK9!^R34 zOCr$2@QiEGUh9GOVd%U;_ZZyWA@!tl$+X0TYSc!c`-|JW1wJp}7b8;C%ta7Ama0Ik zkr5qO{ZPQ(s&fIEF8%JJjZ8F#h`gCPohvwiXhZd)5G1Er9Xfs0 zUy8VJ&>u!k>TctKK(`r*(5A>Y_U&lfL?x<*3}8lkFLd87U77%8brK*hu>@l?5#=vHCz&jt@%vayoG6Q_(Dp0fV!yg0J&x8Nv|Nau5 zdj6UD{*8y@WV_{tn;f+zyP6wBO!OSzYKJF@D)b&UK3JnBj!#ZN9`GCAdZJE_@AJ;x zQ*8E5>lEb2AAE?X?tBPb`x-7h_5<9zdy3dULV8>uuv=HQg7wVpX3h$js2Fq&o~x?o zR|uqyncLw?#9Z}^;oe^Miy%SQT}OkNs+A2_D{2Zz?#6Ju0c=|#1&SPpLZnoBPgPaMV9XX#`Hgm!W=hMUlD!0)NEB;H zu5*C}eVd4^gijo#rPQ$EB9I>VE{>8&&J`O)kV==DQ5X`|kgS?Dh$*SuFkqHNKbbUX zNL4l@)umpZ16b*0NSu&P!C8e2W)#_;>JCm_S?h>jH3U3{E04~65^6ERq+QreI6>xZ z?UkpGw?xZjwkBt{+r-Jks{OqaKJoYlPd(|fW;^iako!i6a;1myU-Npwm-^F)- zaEzb-0=V}8IClmBgT55Sp)Z@pOcPyeX+kN@#GT)MhnpM92m zYRWKX{f1MV239&X`}7Z>PLna@{8*G5 zPmQju64v=ZI{|b7^g)kAOY zKLvjHbKnaljxr2ChGGfNM`)#N$t2 z#uLw;$2abt;_cUO;k8#E@`Dcwx3|FlK5%eE93Bi*ns6e^=5n;K3IpI4#9*;D12MOl z+#qbls`(mCuo5vUS&S_wIAfO-jdC%9yLQH{wnf@Sw|Cuy2y(T65L@(#fv$lFDOvrJ zmK`k0HZ7~P{|C~e^n%KshUDgz!#E3+nj?x+FIFa`N>D{?rY0ez6r_IL4EHIlOwHhv z0dYr26oX-P44ohgzg2fVs$|k7F;Fc+P+UHvc4eB2-_0>-ZDYAcW8yFZt300_-{px@ z)H~Z|V2_C{I{pF5#Y4$>bv(0Meg&XtZ@k}NOV4b~M(J49x-lhr)@c^lgdBXjQff`0 zKagfwJn!*L1|c6LyanJ-qQ=;@UM}Z-DQ<4SaSR_~(BJ zJogN6>vnQ$R$BcVA+vq%&S-}z?UZ6G1OgyJQ=%|IoIV8h4v1%-p84Jl#JywS$^frl z2VTDc{NhJ9dF}B_xbVU=_|>m`fIt6x;M!FZtoo&T)^OV}%KbE+(13Ct(ET~a2k0Un zR3)c)42BAtIcGK8P;R@eQ-F_7Hz+czCJRMw_JFF0g1TMj1l56u(?p)0oQ~owU{86q z!5*{g2nk?-R^>HOvvy5kC9J3hC18-%;4?CiG{0}6GsiO@Qe{QG|u7R#omSnm6sSa)&!Yyytj zsUub!fd3v8*}2tYXi~7rRd{)7pLIctXOjOebe;LU_3I0>>$_v^r!(K*Ka;!P?e>Af z?sJR42HwR=bf63$0Nj+EDZNPKAgu~&FBmbXz8>cW?E;NZ5-`?k=kD!5*VRmI|8YfE zOJr!W`+Kp?bC1}h`}uobIEb`=!H)MRVAxO)onz_Wy-hHz0cq#KD`J2@Ba13-~8Pd`0>Z5JUL;G%|^$zH@P`58JVJ#SVr^Z z9vWHY8l-aeu^D)De1iRhBfj+IC+mCPeV=oi82f>bKYE1YPhR1{)!)X&r=PFepZoxM zc*HKlC~7BaY<$?2RX2sS?vMnhWN#JIiI(55^0XFUQF3Id{wgTnT8I$np05IvVV5`= z(^)@a^zTYG#o~J{)`ZciUg6Y1-&Ma#%?j`Hrzk-@%DXvTsZ8hWLJenn3yC#g(r1v$ zSEGY?5mP;_RcK4HLi>?h7AA@pZ4@da86O%3I&=kHQgv6U^tW14n2QL()Q$LAfr!M& zhyv&I;RC7?0RmIy`W?AQ09&?nOveK-UqT>@KK%CiC(a_ zM+rWwtQzm9Fw6bnOoot6V6nsi^(-WX7apm%c&p&qw*B?KJ z3s(>8+&Qv1>%q-W_}%Z_!}otUapNPMbw@|UQ%{JnzH=9N<#piYH-Jw+1!4fd{VmkL z_%`{?uODG^c!*DK&U*cgQ=Xh?ZEnJ%lP1bNyRgYSi2%yXRIwZ+6~RRb1i-DSf+opb zp{O1K2BiFITn28ZXjD})NNky_Qe5CP2nLZ%Ha|A2_pVl*(lbKFQRU>m-)bS!0uU0T zCZ;Fiq#a(>j-!(w-cJ>2G_Ii3eFR>LtC}O=MJ1Oe&(*J<#R(2IhY(r(_~WWiZ=UkX zrNHm}&VK#QZ%zK-Cnxxezs&l%w?!3)n3Pd%}z>(}@4?%nOU zbvJSI)&sor_5(cm($-@A)6%GTvw*tttUwdK}yV2iB!YVGcxgu(y=;=X0^~N!oOl9~+1+K>kL&NI0 zR+uz3Dllb6saOnErHmNu-BcMxJ3{mZb9p$JL+?kReQOpfeeFQ8Wdl-=uWGtlqL4Ex z+`6T&9gLCPE1|?%@n2s%)yA{D3Q*O~Ds2)QQ4&8i`MA`LeX5DDECxrdPHezUnO&)r zD^6s>8HJDv7?9_AmCS^hqQ)p1mXSEcE+MdUk-s4U3-Ba5HiIm3RpfOUp9VqsP13bl z&Z^oBjnI{%GfI*Vm|wR)#{%)hfJZN)r=#d#4TEX>eX<*d>B1NW1eior>tMlLiGc1( zTaysktYB+Wd^m}BJQ9XosLhGL$#iq(vuC$9zUMCP6To&`xcdP3qu<)Y;k9$P^ZwoZ z`K#MFoxs)0zk8%C6!Y7}h9y|muU)C7cpZ#KsU;phpIKTf?{i8p50{`xBKdMK^h=W6d za}E7)suF&7rS2PGEDO7!2u2|3FU)J?Ke#RD|B7D_!$&LlKlh4p)Li za}8lgfN<@qeV6O%^5)dB`|Q1DrXI$~_3dVpjjBFp@9$e?&YUAhjvP5j#(w=+Co@7F zU4bsdtOyK|&Z-VG812k0E1ijg_yU0CLV${hoFz=u#J*`@#u%j)gEqG-AC6_KL$MUiB(`3PuAkP%_6VNpNx7%{j1xF5nU7YODrqL9 z!QlP|wLpY0^#19E)*c4x{~@pA#H`p6#uVNGP-35>XKvPLReh?n`vJ1hTBgu7doCK)0X@75Ok?m4@7FO;ValN%}|0(L{n# zV3Z`mRaX5A?=q3IN+DNoQXpESc(NtOLQ9C^B16O4Efx1ax`TJ$J)xH>qxasf!?1`T@ooViRSCuCpV3#ulII&HLm zlSL&Oka{aRP2I-@#sG5G83mDxXsK$10WLl0p;%S3KnA-tW;+mM?BIF!#hROfhEdF{ zP1{Co#@bohmaqH>xb>ZS6503(Q@_-+_^`O4~ zwNLQ%Zvbz-r^~%|RimJCE!@5Xy!s~a?N>E#`mrm(Klp9n*MD`vi!YwX3gX=lz0Vj=^^vC>2YF?L{9;lqyuAKzYi>2lzwzj%Z%f2sI` z*N*YW|F-ZKe^L0?{|5Mrzeauf)5XudaLVUjI33SFz0^~;792lH-o2Z6?TxkGdHWOI zxb_g&9y`Y?j~(FY7p~V6&lP_9{rmNu@7%|0ub%MsCkZae^G5@Ry8y<7g;&*kC~0+C z1L8FKp5bXV?gS{ey&20m6uPPr05)NFA;?ZPXL!9-qeKXml^jeJgtH2R1g1wV5_atDs=xAkR;4P0 zG#ZtII~-hCnC|=c8836R8Qx#QJ|1O(&6qj%4|au$BWk13GvO356-9SbD01uA>o``> z0c0OY<;7vISa5rHPMDyp#p#KXmrsB85L^Nuy!kL*eFM09SqIvi?*Qv5>ZgA~K>GMt zFSa|pJpdm(EL^*Sx_JY9?T4t3 z-@V84FOt_k^E4j6{vPk%FB}~rQzB;&a3hUlZ}zcOD#>-DP2&{DO`8Mza{GGW)*bzT zICipIb}`6y$w!7;!DuX&IxF?s#&DW|iqu3T<9r{;6Z;Twv^it z5D8TFbt^#n(*0ex;#`GZpOC3*8dcp%zA~d{*Tk<-saoqZ1rk?zPpZ;4@3XERRf(zOLgVnDPZB?o~2A3Uh-4XOA05f zNg}2b*wF7_;KvL;B6=u=m}$R4A8;E%s(z%v>U(rtj5?E0Q+r7I%}3GZ6dT_{}!b= z*_fb$7(aGvg{v>1F#v%cHHaBrfxi9{0~^sKj5R-=X*o=Yz=47d%ppmQB+V@i_6q9i zA+;K_3K;6mRC;80RZ&9`tZF&g47~wx)oUdy$*AFQ&ro$)tUc}CsXbGWp&TTaFQ_$G zwS|HP8=3@Q5w1=cb2$hkq6QLEW<*xs5yb^!kp@k?(y7+`bL` z!~Z03`PL15^l?=%oqe%J=!8_;+eR)0OD1{}Bp3nemjHKz)KFysLCj3774g(FH*ojv zLm~oe61P9N!^?F7T>KP|E*#obxGiCV>uHs%0S~TK&$PiG|!M+8qrXq&7`iB=SCSv8j<*0l>6lReFmfUXIHSO~Z zc`67;I5{?%m;$WLHzQ_XCE9~gct2!PK_w6N=2V>Mafq`fV;byNG(p(v9M{wchcQLb z@ZG81!)*!$7MMv_i_4Xc{r=Q_$i+d+v)dk2K1#q~if$p>R2>_TECxDS+PXqt)?+yIguN>mB#}D!F;lvw1D&Bu+-xxyXn1&XTL`7H4BsOv4tGrHa z4P)j;aszI2DaCX7WEc&A&}Why+L4+8UY*7?lowf!)P51ji`p1)sph6h#HHZL3OJkp zV^gG*07ArcOo7fk6l(47^L0Q1U_^?_s3BqkI>WPq6{^=mRc|T+pL|@nduPS@^Tbn69N~ZZ&kDc$Tc`MozdXgC{Cn`9-SGHEdKl#0rrSHerRU-z{iy zIVcCgNhT+Tj3S|ow8tJxGNHb8nl2Vuy0v7MVxBq$vrAf5XKK}Sl~{4O4G`P3&~vgW zJeaDKpr`XGX*HWPu+90Fyhy0Iww3A_Dl;xRpV0?JuRX=b1e%Bx!9>H9s52wUxU~ap z=YvgMoMe~ibHEKna6cKGj&AL$)(N1if?3=8bNfPe(S?MDRijWL7=W&7Mon~IbGO!L znt@`X_Su<@7uDr{_wb+D)l^6g);3)>McSLp=|2BnYpr7wVde%1nY`=sw(@Tkx{%k$ zv+EpAp4`jTvETpFsU9{Np0hf0QLW_Ak|8Z?FXQ)pM;;4^9r5UH;lerK`tz4i1-$Xb zijO`7zWgcR(J}DO`@rK@!6%<09-R8UkET7Qi;SUI8zwaY^r524Z2*y54iN_T{d@(C zr1ZFO9(eFj6Ckf$C0>1__{N*ZcxFzFi`Vd(=YYTbHgM~v2Dy}9DgA#++zE8|N^S{} znX*X1hGD~rTW;BJr8C|lT8k}R9 zY#tGk-%ohDoV-{xiLN%>l0g|Ecii+fPyK*5EtRReoUW?4USO-avR^{yb6fn`C)Tqc zm0wu`o8$iUeQcN*`uX8ktNN&Z=FC^^6MgP0`2q&|v4-!$J3b?}J$dFDa!)ce0RimO z&-CXpx7WR${R{glQaDn5;@mUy4vpa?yA%F!QkpLGN{?-4>?+8Fa(~CwuCK#)EEI?w zWjP6eO80jvu~&fa3Uy1Mz0ax?$ml2RJ5ocLc~l{`%>)wcpAXt~*2i-? zx$YnmXOL43v01epe(Dpi_5d*J*3SR}djV`KrGdN_WI3VLiz4?F_2>;U#2^kQU**b^ z7$_YAs!kT*-sJA@l2%vJI-L3aGR0L z4<6RN``|K==MFO7dl$HQ9r=sDc$0H38ub@)$RRW-uYp0?x>F21Wch5yZO`HO@JV_# z5EYn_87GelS8rV6U10o+zslB0Fi@+6ZC*xf*9X^6yjI4Wd*-StLL zZ-+4|kukK&gc=bTu4oDHO6jwx&)fEznW`~)R8)bklxCaPl;Mu{e67G533_6e52Fk+ z<|)J|5v(>w3-}#@GaHd<$PDc%fB@#4Xl{?8DsgzvM%f@tfmpDprX%qHGfkPHH#c*m zfU`+zL(jgi{oyD>&#CpBgOakk;)*j-9z>CWnH$j&#)Ud$y-*-|g%zSg(Q2Pc5;0UM z^N^QRpq;>!y}zhLK^w<&sSG-3PE{JJ2KQ`Z(ub*Hu(i#KJ0+qOq4~{(0lqE({Us&R zl39h;o33l&;qi*o`vu^4|IWadzkGzF^9Q(dd&MiSpVoRRSQEoz zo4DD$G;FGjVyyCD9DTl_P)w=u$}!2mB|KObg{W9Z6UE->UIfwIlzjql3pmP+ZH11W z{6+b=$~Z}(fE+E!Fxn6~BT*NmRq=!dT9uXpG(uFs5}x}mxn-vdHCY}?DNZSKQ=|0x z(b)o|RN9g@Km!|aR;t)a3OyU=EYcqo<(`hNbj+$Tbok%9H*xP?*5SF}jcX(S-tR5^ zTfcnDZ+@%t&%QF_6gI6Bj)Yf6_(j3p$7^W@{Jg! zm=XPahl)m3Bok_m6tACC%vpeHo;OxT1uq_3~Kwd5x?vf85a#Lb~ux``piJrZhY_5 z8VwgVwt{4@v1&E8i>}am-=8Ce_L#M$m44S7Gr4Jd&@G)!5O(ZP4fYJl-I;U|wOKUm z_r1me1lk}n=LS3Gst~@tOzU(YBu&)$#C?6hch?N4)jnx*Ty=7fxRwu|J1mZ zqe@1x(IL?X$X1=yz03DNn*=rjX>hCf9~)rZUWQJB%|D?Z5VPbOr4pT|D-B2YDE@h0C}`2ic9q!5i|drUpfV^~EYw!b|Kbkb&Tl*%ehIk*ET&3h6Z z*n6YkgfqAp-B(4Cq=lTK;G&P@4nhez`XVOfNl@E5sO7K5>!v9!%MpVJIr7Io&;4z5Ao{V)ml0 zES1^|HpL7bD}6G6BNMc#6qMWWZ8B!Dg908oBm0hm5vKz>t!hE0vI2{EQqc(6} zrSdywW&~tZT|+(tbfTB81oRY&Gz4G`B&Sc!kWX3>m8<(Sr$7qd4L3 zTLx^>=y^G%7cb{^$>Y)|0Wrudn@qSSUBa;<0ZJNUn+v5S@u+ZX2$eu#UvWXH+9AL1 z(KdnT9@MNsXPis?D(05%c5s$QfwtYc7LJb-r>7H_E(BhB;h;YC{3Tv{;sSQNfx;u)dHW8(`PGl> zFTXbV`dh#Jb6{o{FA%DYi}UG@qO@;rS-2R1|8crOB8n zQH{kRd8^lmDwA-U%u#_K^PMj+YS>d`iaXS*ht>GZQXeuylH{DM5(&me3}Lxrd)^ew zU=W;r9%i`<&lg%=9|1&33p7E=-;FM;%mjvy-@Y3PZhrK znU&8zJ?iGQ1+${=-(PX}jg?35Kf>kfr?`A|$BRchJp0)zeCCBK_~`wI_3CSP@!IQ; z@ZoJm#*62P?_KW zI<2Zi48^_xOZ8-L0GHIU4=Jh49B*`l6a|Gsq=f370&`3GYoq0132gU)cO`E0-xsnw z_?#H}y#cVS&eT>~ZCFx=Xefjd=y0EO5%iiXf0nAxE)O(jK<5yy9Cb$txi<(@%p7b( zN0bU&IfO65V#IP{?+4lduWye&5p`y|<-?L?HeS|{lg57=Hr2}42dOeIC&lIk2(UD| ztOC)2T)akbN1Q%b@%G!m`E$UvYk`kGnS}(Nd;+M6n5(T} z8ef+DRM01v)0b-9br5v>Qxe0DfhA?v~g@cr8$9?rt` z1-G8Q2<9WKYha8@%!;OBvjp8afbKu0aaa184)1^VNn0Uh=M=u9fY6zQ&d;-=W{|<6 zpwhyuRieN|RhEgnRNNF1EP+ha<|U&EVvX^AnXEI4muf_AvMV;#O|LcO2zx?IldAb2 zkO1hL*ZY_oNe4}j!lvib^$ZtTt2a5wGzVxUH^No=axO;Ys%^@p0}@-6u?hus7?yuu zq~@MDuR&ndXNi;7lkfGriL*N&rjP6)_Kg+Yf z)8EA(|Je2!=-XBDhs70UwyGAeHBkR^ELZB?bcgz5X@ zUa~}QGUXv!NNN^Be_#P};Xns5ZsfvtD5n-wmD}I?o%-+TL5%c)5=u~gFqw^~*kvc! z=ynLz-wU$+AeOP$hqMI!;w`S4pGsrF@e|LAzsBmLR(1^ZN|KF1Z8!5IP zLnors6I4f!LP#w&G21`xEQ{P=I2s?@zoCC-5*T#PGf}ybhM0XgEs8s3^+bgZ4i=hh zsWpk?ljM3baq)cM3!lAE&%JPomu?;*4o1%7W4`z52l(b!@A5CdG4am(;O-E3{04G& zF5~nO@Xq_>_g*V}?{(n#e#Em+75?$>7Jlv54{__(xq1H~;)m~^@ZrPN@du!Ve=Ou= z#9%Quj~H8VxFthKTci98+}US~>U?I*h6_i89mrT%fLX~XV&()f1kU~c>0}49wlPks zrMtpk3C1AO4%{GTvBoUcf-2f1!x2Sz-DIg+0JGdgol`Xzv6<2y${(^5rNq>JVgOqj zZ?#=v5h-u_+vZ#(|@|)@BQv6zVh``{?WfHeC=iMJFftL`B$hfyfpdwmnNQh zCUE1%LG2EMrzeTG-nx&EK3eMHr5!I{I>5z?J6wJ20)Fm^3;f(qJgRrzzQgZ*?;(El zR$<;RTsmLa9qL?XZ-VmpxULS;3rr8iq)Bb2W{yBC4{Y|@(JJ$5(<4w)go=_x$rW-R zq6W&c+t5g5+uSMBXBKCKQ$m^96-#8He%~Ed3Js)l)IGGNkJ@cHx#mWeCMeCSa0=vq z1V<)jP*V`B%kK5rW~P0}D*+eXBT-RpwVe%~BDdm_R&SsUQfO4t<8>zsF`{N>*HO^E zR9ZqRQ;1{G)E2`2LI9>Dl{$aB-f2TlItgw{sUz3O!pDjLTwh%8op}uw(1+Azy zT(r6X5Xs<|GfUO(4FgeABXxhwnZ<*H;&QOV@tqYP-T^LO2F7mU&RyW>5WIMv8XJc| zji@U1!(=mF8ER*ne&?}&6+K>Gu2is^Rw)o4=KKSM>C zio_@iAG8|0KRlIRFf=huNB=luHVW(;=^G#hrim>Te7vUeO#Z@Vqa6uNw4jTZomHPv z6ZUxuh)&Qx#+I*c1s0$zZE_;*BS@O!!VIcMX-j65efCI@ zrXGme`uUu5*yuu6%%Q8wYEaZ1fs#Poh5y3Et?Ps&GFYNOs9!{F)i>%U z{9dL^+_V{8!S}TS?FgpOYjU7Jms1j>E=(zfDmbM18q2b&i5vs_QC?8e5`c&EZIzPn z3aA2xFCaU?F3BCknNu`Cm}SR)vx%jod`Fy7D-^H_9Bmnm4=j0%Xfw0N{$;A~U#}L; z_WLPAn4T{FO-le1QKO<}z#_q7RumXmK_rrkf^$@kN+t#)lbx)vP>4{KHOh>ev$Zvd z5#j+1h(tGoU}9*_aP8$wbh~<|VDJfN|IU+NSXHo3b(RUL z+ASWI)w3gkcVskc+7JqMM=!blYKEUKXeQS+>)g3>JUBSOSdOb^5qVHR1eR;HJBWHT zA92Z@*AKQ}C_}lxiqh~D0dq`|zRFl9Aw#w_o1bVQWtP+%ZX{6f^`WomIBl5c3SkKf zjsz!d_u^`enP~t;@f@`$2oso08u$9?>vadwI*?XEHW5H|2I*iN`s2;vTtU#%KeC|; zYJth$Hinp`-t+0hq_BF*1wF^9YK1Cn37AhvJMC;TFW-j;ZD5ovcJ=xvs)B=sSy7tV zEW?a~E!gU8B#j<(&dTc1GO`1Mh?S(rNJ*{%pfskzR{Uh=4w<>iY17ZISfppiBN&yH z-Lk32>9pSMhFR0|!uy0NxD4GeZvPP4*shCf``M7*18KW5nE#}s^&P+rE^_&Zj9t2NLPxIo1zzZ)O;kg&i^Wx3RWCV`yKH}Toc$Z)M>pS@7 z_kmCD1Lw{GPd}k+eQ=z7a z4p6qo4Mku|;NiPgD6&3HIvo22`&hQ~IrN-r5L|o1Rppc)n%Oo~vzN5xhQoSq2SQ?H zKxdMAA#EOpLS|8-*WAY@0x^pvi7?&Tp}zcbdzi&^HN(B8RWqUG9EF&JIl51!yn+QD zJ9E(L6026B@PL_8p(^|-l2(e~6KjacHV31*5Lzi5L`@7g7@|YIIi(aoiRsGL1l$+e zYsvANCh8QQdHi7FjR%Rt-BOpYF8tMBKEN-0dDgeTdt6`r>x%EaLHyZY0e|&P;<+ah zpMCL|FFrr;*e&i6h z>T4&scVAN_4i5t|=BbTG++ zE?NO;&l26X*bM+=K%2jqa5ctMd~asj&qjhd$6okY*y|qv<#Mpbi@s{5Kbt;Szdkx1 zs}N=Uo&|jzn<-F^<0LSFLLg^uJ5&as6H9jDuU*x$oGR=`HNtPv1@esY+1XY*eMp&{ zrBOm6v*nUHuwXd8Maf7z6=Y#}$r3;v9P#wg#KZf*wVTKTjyO4)ym)~)+;yR@*;8ZL zL<#AP)};>m!f{M;JK3?(hIR z0P_^Yp(1{lSOVgx60J{>X=%SkXW~HN;K&hkU4FS%_xk9DB!dj z(|CSDz>a14Kb2eMEa!LFhy(G9doPmQAM@~|+pqNi3@`UtzK>)H)b!bnuvkveb9>a7 z{XBGg`7vqHnRuS@&x*OaS%Yd z|0vnUfu2+jGcQGCBbq)+qRT~v>CQ$8gv(M^{r*5o-tW+w-U&7s(n4zD*n~rzk#m$y zCU5o+7I-7A@4G=CtpVVc+#u)#}Aw zHu;+XcG$*dP?f|E#Ry>Lz=#AffYB<8GcbMY=hq3Ljb#3f1&u$m*+&vNXctx8-!u`@ zUbba+T5CreCfL8fYVblbCpG0b=NcJn1rGGOs|vhdc^c9WC5%4UZE&h(7iqt1Zj47r4-?)FbcyNHa ze(NBJ0j#IsGQ4-n8)w#FaZ4$@m-DiNw+$e>B7mgu8eN_jYvF$9!PPfzRU+yM>_ z4{`En<=j_JRlrDIyK5m>#wVb%(odmK*t*DyD|Y2aV;;GLu8!Aw(nr ztSy@~ff`w+0)Fvl2VVNzVHE~H zzBBRGdv+>U@YZt3EKKzT!{T@&=x#s}t-^=0T{&HQF;9 zTaKL2_)}En1P1NUQRQhB>M~Btrls#lRuNlsl}$L zZ4nS0n^zJ_7=$Gf++q`D%-Og>gmih_Vo`%PvO9X!AB3FU;^-r$vbG0HW~Ca1r%pP{ zTI+0u#8or@~D%zn}5`VTyXf=sn@W$FS06?H-D-8%#5*fv@B^H6H5*{~_ zSvv_RdXH4i)N_e$e~2FJ?!;ok25kc|upKnh7_;ME!qq*SV+*v?e5jI(HtFh0p4m7u zN=AR){dTEWtwMjMb-{h*qjG?pSrbu1*@I79fAluX(U&1J!pe}xfl4^yFSJ3rbzVW- z?@S~cEM9T!%G$_{2$LUL$Ee8YBn`=`QC2EQACPmqedh~>2;g)Atoztq3LFqv0+G9_ zSit3+(D+UY5fa(zdeK2$9wjz1RPA)mUW}E3;SQ7XjC#cs3a@r6E*tlp+sO#_^cdg@ z9A3SJ%5xY;frqQs`$=ufoV&uNag;=&d-7D-2$!$+N1k7Bs4O!if}!T=IKDc9((7nF z1%RCne`Kzw=L1;XR*z`rq-W)5YjmsgelLoC%~kWAgqXn{Zvz(pZ$yzQVHcA zaw`3|`VKxT3kCT>=(<}`3wY^I-}ex0QhkP-5Q52#5h~ggg=3nCECYez?#SvV9KFwh z77KNYL^)q=LS_5=joiSQnw-xIDrxWH3i^?CO4S|JITOkg@BXIl%_~1wM;Td%0z?D zYH-rU6towCP^~<$J4uGjQHGOXSsQ~jQG;#7VNmAQggz+zbm-oGpw$8dY6UlLRu%R( zqlg}cJzR}VYcJSNyy5HjX3PPM++0gxu%r}dsBjQ%y3{mcZO>m*>TJ{j38~vd!QsdU zl{N(}cd1rYz zyCoP6_<guA=iNS6_J*FsD%_O{P=kj#p*$(Ce|l3PwzhNi}6FJ=p&%HuGJ6~w5mlB*eN z(UC=6>wy;X!u&x_InbI}21@O=$>|hawiSdxtWMIPFN{TD<_bS9Zy?sA9VO zlnXjYVAHr2Zuv7)s}YNk`IU+|+Wm@@>H=a?BdmzbV$G@;n`z!A`x_)OHV|h^63sE! zlU$LT>&_N~d~i#BQM2|WhqG{5l(2k)qavx!0&4mSQ?-X?xHoAlL>Ej%4p;2qgRCn` zSzF7%=0xbMyh^VawAW*bjc*TxS;Qz-q6byg7SnYZ%CRcll`bDt0Z~(a8YcCLsB8f*AaB}564kYhPYfAlMxI=js5QY4J}TV4eOd=c z#HC9M|MqW;{FPst@!i)Zzwve8Ti*lz=tsa;zXd%1OyQ;HPwO);ke9Cvj2%&hIzBGm zd+?~m(^9&s-6naHJ)&iY^7${R7^!V zlQEhy(J`)UjAxyz5=Wpb{#`_}2aF3T-CTpj%5ZnN7KYgStwO1=sp37#=%oDADznPX zcKREV#i|~zoUL4M&?BNafT-Z)Y-kLi_nC^cqfE3$t8KRDik{IPUYC77Ao^TX%$J+R zR=h}5g{TvDWqs>*sMJWe(L{1-Q%YcNP_8x@^LmzAcl-rVL&mda7EvX;-7vOo#|$Y# z%%QmVN8%u>9SF9jP6w(uaV2o7poVnh@@Yu#)9^}cU|v}{z?j6==HP5(MB)BjARlGz z&Mn*>p^hJc#}5*ZUqik2BVb(%9AVQv9dj~6R5MY6{n}vglkFr%*c4DO zO;}!Q!|=fQ+H~Fp`AlHCc(fF1^)oin6qsluDV&CAK$-Se$ zYWG`a+oP3fIGzQWuV=d03n{9sL?YnnCFy#Qf7v_iZ2r})$%aQ;#oxy`@=TK6&Pe^A zEgm}|@8o}r0j-kEFc zOC+$g(|{FE4!i!h-dWgxNNqo(LuFA&5&jDx(i#FsF){E&6+0J2^h|}RJ9oYU$vt8p zM0};f-F`_OT&N^{dyvA{`$i)Z3G9lzD<4~W>#8>=kY2q#a~258=NlZGGNi3l9dyPN zGZkj5G?v1jZ?6Lp9mGZhs|tvg$4H0iM8mH-HX@;08C-3OK3K}6N|P`G3C^oT$9Vp^ zTvNGU2>><}tDI2_jb`fwCI#2a^%cv#C#z~DYV6mB6&j4nl%W_VN=m&=r&bA!!kQpW zi#KQQh!K8=g_ehIh5W=6S|W!7zVVEv us1|)!K?DEe}GPB0vg*bod0K0KqyWNh5 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

N(25q^DEI6WF?z>BGkPu1z3;km)9o* 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 #%Mrfqb!Thr@6wEILA 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�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

DqB*W&yLFy2Sq}Tdv%pKadewVtTWQnm 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'G0C{Vk-X`BjRy5BP-S<= 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
  • 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

    R~Yxm4TzcS%wHA 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

    OoG4eBC&RyYqjpw+~On{otcXA^_`nUTI4R_&M! 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

    1%%V#qRL9T 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