From 28b21457d2d3768b55bf6009fd28107deb0fe523 Mon Sep 17 00:00:00 2001 From: iagorrr Date: Fri, 29 Nov 2024 15:55:01 -0300 Subject: [PATCH] feat(backend): add prototype of the backend --- .gitignore | 2 +- backend/.backend-env-file.env | 1 + backend/Dockerfile | 5 + backend/api/Cargo.lock | 1519 +++++++++++++++++++++++++ backend/api/Cargo.toml | 10 + backend/api/src/main.rs | 60 + backend/docker-compose.yml | 13 + Makefile => backend/solver/Makefile | 0 backend/solver/builds/main | Bin 0 -> 49208 bytes {in => backend/solver/in}/01 | 0 {in => backend/solver/in}/i01 | 0 {src => backend/solver/src}/debug.cpp | 0 {src => backend/solver/src}/main.cpp | 6 +- 13 files changed, 1614 insertions(+), 2 deletions(-) create mode 100644 backend/.backend-env-file.env create mode 100644 backend/Dockerfile create mode 100644 backend/api/Cargo.lock create mode 100644 backend/api/Cargo.toml create mode 100644 backend/api/src/main.rs create mode 100644 backend/docker-compose.yml rename Makefile => backend/solver/Makefile (100%) create mode 100755 backend/solver/builds/main rename {in => backend/solver/in}/01 (100%) rename {in => backend/solver/in}/i01 (100%) rename {src => backend/solver/src}/debug.cpp (100%) rename {src => backend/solver/src}/main.cpp (97%) diff --git a/.gitignore b/.gitignore index b205ba3..eb5a316 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -builds/* +target diff --git a/backend/.backend-env-file.env b/backend/.backend-env-file.env new file mode 100644 index 0000000..96a3957 --- /dev/null +++ b/backend/.backend-env-file.env @@ -0,0 +1 @@ +BACKEND_API_PORT = 8086 diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..08089d6 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,5 @@ +FROM rust:1.82-bookworm + +WORKDIR /app + +CMD ["cargo", "run", "--release"] diff --git a/backend/api/Cargo.lock b/backend/api/Cargo.lock new file mode 100644 index 0000000..9669b29 --- /dev/null +++ b/backend/api/Cargo.lock @@ -0,0 +1,1519 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "actix-codec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-sink", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "actix-http" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d48f96fc3003717aeb9856ca3d02a8c7de502667ad76eeacd830b48d2e91fac4" +dependencies = [ + "actix-codec", + "actix-rt", + "actix-service", + "actix-utils", + "ahash", + "base64", + "bitflags", + "brotli", + "bytes", + "bytestring", + "derive_more", + "encoding_rs", + "flate2", + "futures-core", + "h2", + "http", + "httparse", + "httpdate", + "itoa", + "language-tags", + "local-channel", + "mime", + "percent-encoding", + "pin-project-lite", + "rand", + "sha1", + "smallvec", + "tokio", + "tokio-util", + "tracing", + "zstd", +] + +[[package]] +name = "actix-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "actix-router" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" +dependencies = [ + "bytestring", + "cfg-if", + "http", + "regex", + "regex-lite", + "serde", + "tracing", +] + +[[package]] +name = "actix-rt" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" +dependencies = [ + "futures-core", + "tokio", +] + +[[package]] +name = "actix-server" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894" +dependencies = [ + "actix-rt", + "actix-service", + "actix-utils", + "futures-core", + "futures-util", + "mio", + "socket2", + "tokio", + "tracing", +] + +[[package]] +name = "actix-service" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" +dependencies = [ + "futures-core", + "paste", + "pin-project-lite", +] + +[[package]] +name = "actix-utils" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" +dependencies = [ + "local-waker", + "pin-project-lite", +] + +[[package]] +name = "actix-web" +version = "4.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9180d76e5cc7ccbc4d60a506f2c727730b154010262df5b910eb17dbe4b8cb38" +dependencies = [ + "actix-codec", + "actix-http", + "actix-macros", + "actix-router", + "actix-rt", + "actix-server", + "actix-service", + "actix-utils", + "actix-web-codegen", + "ahash", + "bytes", + "bytestring", + "cfg-if", + "cookie", + "derive_more", + "encoding_rs", + "futures-core", + "futures-util", + "impl-more", + "itoa", + "language-tags", + "log", + "mime", + "once_cell", + "pin-project-lite", + "regex", + "regex-lite", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "socket2", + "time", + "url", +] + +[[package]] +name = "actix-web-codegen" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" +dependencies = [ + "actix-router", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "api" +version = "0.1.0" +dependencies = [ + "actix-web", + "rand", + "serde", + "serde_json", +] + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets", +] + +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "brotli" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" + +[[package]] +name = "bytestring" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" +dependencies = [ + "bytes", +] + +[[package]] +name = "cc" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "cookie" +version = "0.16.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cpufeatures" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive_more" +version = "0.99.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "h2" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "impl-more" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae21c3177a27788957044151cc2800043d127acaa460a47ebb9b84dfa2c6aa0" + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "language-tags" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" + +[[package]] +name = "libc" +version = "0.2.167" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "local-channel" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" +dependencies = [ + "futures-core", + "futures-sink", + "local-waker", +] + +[[package]] +name = "local-waker" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi", + "libc", + "log", + "wasi", + "windows-sys", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + +[[package]] +name = "socket2" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "syn" +version = "2.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "windows-sys", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "log", + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zstd" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/backend/api/Cargo.toml b/backend/api/Cargo.toml new file mode 100644 index 0000000..942932b --- /dev/null +++ b/backend/api/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "api" +version = "0.1.0" +edition = "2021" + +[dependencies] +actix-web = "4.9.0" +rand = "0.8.5" +serde ={ version = "1.0.215", features = ["derive"] } +serde_json = "1.0.133" diff --git a/backend/api/src/main.rs b/backend/api/src/main.rs new file mode 100644 index 0000000..4dc14dc --- /dev/null +++ b/backend/api/src/main.rs @@ -0,0 +1,60 @@ +use actix_web::{ + get, + web::{self}, + App, HttpResponse, HttpServer, Responder, +}; + +use core::time; +use serde::{Deserialize, Serialize}; +use std::{env, thread}; + +#[derive(Serialize, Deserialize, Debug)] +struct CellPiece { + u: bool, + l: bool, + d: bool, + r: bool, + can_rotate: bool, +} + +type CellGrid = Vec>; + +#[derive(Serialize, Deserialize, Debug)] +struct GameSchema { + pub number_of_rows: i32, + pub number_of_columns: i32, + + pub initial_x: i32, + pub initial_y: i32, + + pub target_x: i32, + pub target_y: i32, + + pub grid: CellGrid, +} + +#[get("/solver")] +async fn solver_endpoint(data: web::Json) -> impl Responder { + let sec_to_sleep = rand::random::() % 10; + thread::sleep(time::Duration::from_secs(sec_to_sleep)); + + let solved = rand::random::() % 7; + if solved == 0 { + return HttpResponse::Ok().json(data); + } else { + return HttpResponse::BadRequest().into(); + } +} + +#[actix_web::main] +async fn main() -> std::io::Result<()> { + let backend_api_port: u16 = match env::var("BACKEND_API_PORT") { + Ok(val) => val.parse::().unwrap(), + Err(_e) => 8086, + }; + + HttpServer::new(|| App::new().service(solver_endpoint)) + .bind(("0.0.0.0", backend_api_port))? + .run() + .await +} diff --git a/backend/docker-compose.yml b/backend/docker-compose.yml new file mode 100644 index 0000000..3ebcf6a --- /dev/null +++ b/backend/docker-compose.yml @@ -0,0 +1,13 @@ +version: "3" + +services: + santa_labyrinth_api: + build: + context: . + dockerfile: Dockerfile + ports: + - 8086:8086 + env_file: + - .backend-env-file.env + volumes: + - ./api:/app diff --git a/Makefile b/backend/solver/Makefile similarity index 100% rename from Makefile rename to backend/solver/Makefile diff --git a/backend/solver/builds/main b/backend/solver/builds/main new file mode 100755 index 0000000000000000000000000000000000000000..e5553529028c14fb685f7b6c45f766168c532943 GIT binary patch literal 49208 zcmeIbdwf*Y)i-`7$w0W6lPGGu)xnOMh{ObO)3W`d+=KX&6IcGA7$@BE-+xPeR z{lVdr*?X_O_u6Z(z4lsbU(VrLk8fsz%_dn-f^?q5RFC2oAmdk(n%9e@3CoiXlibpY z(odvOfF$A1EpiwdF)Q4eU}RWfvRN(>A?u|xB0~3|utcOJ$qFqB8M5BM<2Iv4Se$Ak ztxz)4tY>GIgFkp2ZV_1F9~K!&D~zuv+G{uRrFOHP85SO9z^yR89(l9oH%9)NM~!+` zm}mA|8g1lT^~f&PTW{7|Z`QLyhsjSXwD?IH`PX3LZAf$@#k3I`zmjByL+h#a4* zTcJZT9xJqXU-F?^`R}w>Y}VU;i-C9hEp8F9!Y>T4WQA6HKSMq8QnUxL8n$KQdU7c5%z4WYw z)sq+1R4=HQJSA(YYx0>>&OqXfn###F)pfz<$<29ZO+G6(tEoO~ih-E@$;KaLan=R% zrGyr#gD|UIn`9H|F@W(&Fw<5(%d&4wvpydV-B=Nmq%?#R@pmHr((!i!{*J`o@%Urj zvG^N@zoYR-8jixB)fV~t6Z{>AzX|w@f2{W7VT_yXi_J-jGwCs>1&c_s_?4t15T@Xd zvUj)%V_z)V9f%)e!WoRmA90a(wr`AocEUtyf{idfq_^>o(FrHljxT6z^Bp%~_4tBi z-o@)g<}g1yfXHe)K6?%l!@=Jh0shShaQ0_7Ja%+sIC$0w<=+8ghb!Md0{xGVfakyn zc>X*Bp7A5ldDsYeTqCr5&IskpMrill5#UFS0AD-;{v$?!XN`cTcZBkjMu6v!(BFTI zP#(=n4*U&$9t0o_v(fPvx5!FoK|JFT67K%1TclG>cm%1FFne0c4LIiopNVLf<)z2n zB5jqQgL;&o_K5~uWb()FUsPLP=WkNW8&$tw@?TP-PRaKB)vCt&rT&^g-6FNhA82f> zZ!Dfuf!qs9svDa;bE^@ptSMenD?s%%O&&r})#abNz^^t20{-f{rT|cu*H!u(0}IM) z%Ihiu3yMqBoV-|(y86n1e?fUupd{Nrw}g#fFsDR4vqD|g5b#!b@+#~7ORFmbbsn}{ zqE4--t`m_s6xDSVje*)gojL+$qx{)chZdAq`pau->MNF@;}y;2{sn&k1Y)n)!A z*)dG@O<+oSt;rQ{1^AFtQB~duUX@p?P3Wy>E?`r^jp_=&S=u|#KQG(wDLKnuJf~!; zzs6`kFP^UQ#>Vnx{V5JPjO`il&X3X(l$;WHQ31e>Zvs%|Mp zR4}G7AVfeknOjjGR84pQ<2k^txRIy~{0k$|h@Sqq>m}tw`d@8u%j*Bx{<#;Fs2IeG z=H{H7oGAvAP^P+Wk+&q*Uvj2@UXI`6k^J-PmR5tnxq+r&Z2%OPHwhtJSYBNt)dp&7 z>z5Ep`)o>lZ8>BLIZXkTK}Ewd3As&bWyPdPG}C7>SsRNjsz61iatN<5;Ij$}{8O{C zrCC1ji~|3Zteo6fbm~BKO4gYMxU>|dbF-#S8I+uoGboueIO&oKN=x%+c>Ot9Q?p!y zN=}K-i_ek%uY8tiakZyRscWvPZCY5dWXdn5G&U@*UAScV(nV92p1C}yX3Er@<&(jd z$vIO&S~mO~xI5Jgs9F-lzeM~dnSTlJF-F0~O@Pf$fS)lIzvE!j$D;(x9R|D3TKqLM z8vGyWbVO-K9r!CgWf|O+!=yq};n`4bnwjrL{%yD10k>eZ2i@CE3Goq+O?S|KSuhsnO^qtW1uft z`jeFwFtHuTG^rzZ|he=PQxdY--; zeLU;2>ZKq-11)uSK{E7UrBgz9Grfo^_0fJ<9*h$I5>S) z>#2%^TYfF`8sgxTUF&I%gVX=Eo|ZWH;T90#4RLV#%huB#2aos7SI5EW=UdO3I5>TM z>v=E^&h>%ytc`;^EFi-5aqxKGydw_IHN~Ol5C;x%;1CB6ao`XK4sqZR2M%%I5C;x% z;1CB6ao`XK4sqcBzZ^Iq|KuB`b#Jl~w!eHcwolqR)P(+SrFBbkry#oj%;x~^Klugx z$|t%JW4elY(Vl)hCvRq&TS(Dvk$#$KZXHECMEWmGbIT~YR-_+dnp;KDH6s0crnyBF zZ5Qdgnda6|v_+(EWtv+;(FT#ek!fxPMax8bCDYsjiWZCXa;CZU6LpJpBh%bki)M@T zl}vLBDC!XD1x$16Cz>kKmoUvOpQt3#bD5Tz-v0vtC(mY@TRhPok)FXcw|1i4B0Y`i z!_wCeXKDHi5qV6=Clhebx8m$urK?DC5&U(w{-2`ckvZ%?Q0<7#N^B zO%BMRD$@Q1>P4?WjJOuDJlI*Lgqsy5>@HQbZHkuUjPYz6TWP)8*(?Q5GYUqUGxTn^ zK~l1y;c92uhB8um7m@-$$4ap5dO*nFPW^ktqI=Ms{>pc3bGp-~eWi~k(VK|{?AlH~ z1c5qwfMlW4cILEBcS>?-o1m1PK~?<>Vk0A1Z#CTI_7re8k?rDvG!3p`(*ABRUrB09w+<{T9Jkxc!OC^0xcd`n8f36RPod1bNcbZ3wc zW%^2#(cj_EPL?8!ax;!?ZzFh<2`*Lu{$e)3j|sG$dY1@y>Gz5fsj;NLdXoLgn|~ZS%o5W$$KNr@qH4NgFdzTD!;DLrHn<8!~6B z!nTnH8P6)=+nhTQKOonKj8-C-XT-P2Og@U{kx-9#6m5RG=5fero@6cLOl9x1%bcl- z_K4_$g64El;~qh;oVLo4_Uq3@$%xg=6Qcj<6Z^(T0W!8GSS6YCX2rA@3)Xs&-lW*PD)hz zLa$u6&1c)cP_F49I<{!FROH$#hn53_kRxySGN&NSJL!0*w`-<2gUFZDM#-V~*thi% zy@7^XVQ<;+ryyscBG+{&wobO;)vicoB~wX`cPg%z)C?u_rJNn|i7n(oI5$npO_kTF zX-V!I)YK%Ub+cV@eG}ZH*t)%~ThhJS%w%utw)7&`hjQB@v>5g{TERb?PkX}2%L(X( zgG@p9QXxytJxZi>r;@3YOL=nU)lRq4+Ls~Ud@o5vAAX*kRlyIr8gsXZKSFd^s z{ShU64V;#KIrM=*8cbDMw^Fm~KSkG2D)_Eh4-LWGrJ1RQ{VdaekTcibcfBNS3pula zVJzmauC%UC7qhB1YEJ$d)$po(1N&z8h7cQE~-9zX**1Lz%#!btz%cMLbuJ zP6d{iF!G`{rz*?ne`Ld$trQR4mBY^28x1Pj1&%>fToqrR`9`DVKmskGIvqK0EzFl! z94vI5d&`ZStquR+eD^t1<K_q0x*YrpE0PXwXo2zK8lMx+Vs?iB2P;wy-->p*aq zX_$VX(1AgQVY&mkR3^qaTC*P#pt!cmZTCZgJ`F*ZHpn2&=v)XjjM!;7=8SqpH=r-Y z@Va{CwnW&Ur~^L>h5YAqM5jW;+er`TklRWid(nFQC|yZT;Fh8^O6Qz=l?H}Hj%NmX zrmYgg?$bW=WvQ+== zmq3fTU#x^{_*3XC^@W{IPO+_uO}C~o(OMXbTwlncUGPVZe#B-Ti1|e6@`!mXr`1Yc z?R#(Li*jh3Xy2O6K9?@9Trrk#_P?+g55~pH>Sdf35yhOyY&@!_VK>Ie+^& ze^DoyJT7v5B)19nh3C<3`p}*A4?ko)RN!v(0XlFkIEzUlDVx4YROH9Hm5M@Vva+}X zh;DN}$PC+da-@M7c}gUyg{dlQQZXU?febwXSII&ha$CV@a+5XCa+Q*p+Oj-JQXTTT z842>b*|tqR$z!(5>&BYl>_idK5?UV-wAg}=vvRRl+oHI1^`~C=MM7ZT#FBz;U#jRO zCV#>g;FfD|@EyxbFxO+6?8)e?pJFJ=}nDcW;L zwJ=3-TmRw<#v=qz3#Ml*hkZ*81!{h_T!PGYPM#hQ<3Zom!)f^4vKZD zqABoYK2bCnuu=?^lB~GiQGeQwrHQMCKXtG|%wyl*qhS zAx~F=;^nE@49HWGQ%;+UWv!1gl%RxXAefCmDC2l}LUIIox_FR0ee~%_^7I07lt@Xx z7?5sdlYTxNKjq~_uYr?1>p(U@TeBIgmgyE-xU0{>k#$~G5F;QSSA*~mmo z72C(**$(KP<;fUi%sC*fO4Sq$@>n^o856RR0}M`K4mPCcbkGgWz!X-r8R>G`jO1Qq z)8kRcD`9v$up7?_Iy%$6u6KeT6d^~pHLL5t>Mo1Ec34S@}h);Xu#}gtZ z`{s;*lSKVy%>zI=Uwm2*cpTjaK6rAT^ zZO^LXinI@*^m-qMR4EZ-h30i_QIF=J0zG_F{WR31G-uEuN0~nMCw#xy?BO`Mdnd=W z^WAioCI{U@BYNe+d7w-#+(LR-932Y&Ly4?1mU=EsY4tc!UbKk~Fo*t>Kq7}6R8nYi zKbqWF1|C?tNdK}I#Aus{u*{RwVT_dF=ljBs2v^Ui<>$$1`H-c2NJ~gKJfc2%nW@9U zkVDO|-2={`&($NZtT~*+wMYMzXaS?iW;v=N^f}AKddq9uLTAvYmFIzVUTrH|^11GJ zwxgIFdIN;#eB}if%r#w-)2m@^19F>T7O>n5{egY^FUt>9T$|*TKfn$?Oj0y?n1>!W|T*{jXR z+75z-IUK!^N(<}M=y7m(V0MMk#39A%|S>m^rkRCIuGwwhqXn zeEa6)ZaE~wY4*VZFO%2xS%Tuz-e-eFAjhY{QBhh$Vv%oS^KP052Q-5MwT}cg`~WBw z(t)8?U|LqDa;eh`;;Dn6kC^9y9TQUbWX^I0$;oZE!)J7dd`lhN?(^NqUfK6pIc}D z>?$sJ>dyTTp+Hg?KAG`_@`5g(R+WuSDz{syu)oNBlM9@$>+dq2W5k#gi!m{HHXIen3lYE=t#YnGLOqhY6PwB(>xZ*EcD@OYjewWa z6%O(KIH{|J6)}3#Q3U>Q!zam!87#Lo(#PxXUF8iI!7_4awda(~Z#chNy_D|OZ|w3- z=YS=&*Eym=47!k>umZt#kS;@FiNTZ`ZM%1pM}o?u9KPRsRDL)&Nz1iC4%H-T8JnqP zHU~e9J_J$GV49-mVFN(ex>bUO;_w7coDcT7IqHS;0M{P=d<%LTy$9QsdcsHOKLkKK z2CE|dix0^SOl{0+%v7xAYse;DnUs&Q8}Ee6U=vI4jX*G1(VB~HG5bwr>-w>>{T2BE zWm~5IiA`xj*@{8lJXFVe(Oymm9js&}^B=tv!qaWqbm-WtsbjAmn1;}?pNj#5e#Jc7 zAH5XgVNK2PVrpVa&PH?8z&_U_f-_jaLcHAUY$-Kp2Lw?VR3#Bz)$)t=?bD#w;beh; zJX&5IUDmK0T-l89GqDYK9ldu$0ro(u!AWwI zT}sVIza8{e;aym}1V(61Oh`WGat|u_Fr~PZ4Hx%e`MA^a4B^va8#LUoAKIwLr@67A z*$2gKEROpU5vAj(JRP@2hAlEC6T>p*a<(Eg)@zY6;a_w8EEda8IM<+g`q@~uiRDtJ zq1U-^7Rx5|!i{dRAw-+unXPd67GsbygvRsQUd+ehpX=kl0FxZ)!Ee#x-N?nT)9$gi zaE`HRL=Ii=GIo!+eKvHiIUP%~WZ|t_gmZt`RC4e=>9&UzXv5}oIjtd??)&rPD5>o| z=0{UUe&3opy}|eCnU@Lg_$J}A3lDt{45hBW2OoMFff1Nc5(9Cqm|`r}rql1yKIKef zmOjUThn#@3x8B8DjNWtoe~ob8xCJKEV_B+L{LhDbPswV=vI9&Ii+^l&K${7(i#>px z9gu3yBM&k_8{~ zd8}0E%tM$2WvY3wFylsRCcGptQ4S?hN5@o+Fy4y5#|dxm;e@xWu_;Wb-;A-L)-jO8 zuu>g}R$0ejq#0trI`lmHtzcs!#$j{s*wjKk?P5q|$hii^$$hecmPM=W_tjl}}=44oxy$de8(LvnrFfc&Gis7bl zZx%f_c64_1-e45N_EQ;MI)a#P^4l zK5cd%&Ve#u9D=WsF|5QTE2OV1CN<-g%6E4M%kTIy1V!Hgp=!rcjW6cNX31Opf5ddrb31V@e;Whwe2NUa=ICR-SmoW^w z)x)97u+Zg+<6;wCtw0C1Z74(6^ed2zUIL$)?wK|P##BE}lz@t3*U|45hT$KtE#ATQ zfRLnrV{P#V;vBrTc!aZy=eSrcoN5k2BDzKXN1dFLaF>z0 zViJcZ%7&TqXY5tWZFR`chd^tiu|OzvCfzVADS8QDa@$SFADXkA``c|D%d+(ZpxM~m z?w0h`ZxHtEvWfbqi0Re%5nE9-tkk5u*9`Vk!Ql5AX8ZkcO^r=ffbN0i=Oy3`|$yGOosO3 zCBWo19zhMw;Sm%MFxg#W_~ zbIklDX8xBZyvM{hj`I=i9&3gxMc5hLCHT}C{k>UVgkk$JxSawg(QZT7W#6?J8w-*R z+_!flx*iE>p%Ire?T-S~IdHnMu$}iCb3XBEFJGZ(aF2HHFP?|}K6p4?T`ec$I^&VA zER>`#25PW;9D?@sJJ-4;3qo`z_}_c_kVO9x-3hKGc_E{%*712Z-(R&L6eM^1U|> z(13eH;x^}K7%E)}KQem1Ao&yZ!j^0DU@*Q_kCitB3wTJF^BRVsbxZQ47>moJ_c4VD za@^|(aiK+=dICwdaxT9)p}uGUw0-^E@`nAr8}tMeT-Y9Wf2nmZOd0hQuVbtb4i5Am zP^2pw>=XB9-WEHQNN~%YM?5(Kuowv(n*1L24fku(g;O4e!70L?5mLwsVw8(;Yq6;9 zD>?MJNUT5t4ZVnR-tfi1fL*~(b~d~m4Pw(+FQbZvUjr9v2L5Jea}qLv!>~=NVw`t{ z^8~#U&^A_6P|-M4Vs!_sJIkl*Z@fx0h*9Oi2VowaDA%UoCV>nBk%xl>^d5(>JjKi0 zrr$3rUF}TY;08_l?M%WsPnA?SQy?iiAH-ojDYCJlrZ>e(1mE?BXJIq`VuM~JK<{St zyg~H7EqY3NNe=0xH9-@>Y;BKz1Iuz$A3!It{T-cvhKx%?2ZO)w{kyo=BRITSZW{+aMbE(xHbFti zHJ~Gy>T~s}*~WQN_UX`lYZ zE2Ig+#rBG{FQYd>6%!Y$-`%^>7Y@R`3uN$`7EHW)YV2acW#HGK!?QmTmFuJ6J1h@b zR%JyrD%O^(kZF$jKK)wJC>TL!&Zm76{Q-c-M*W+6 zHyG_2k}kLLerohEFvS;MoUMcxgA*00Ue_m-XK^H|&O$d+t?O6!??6vnpKzJI7<7C> zCNzN#aUOa-GEFAz(w8GaE@k?(52E|Or69t4LDdIXwYQUwjJS=$)5Yk6_))^VB3A|~ zN--U)K*ifQvoen9E*8gh=B1<)1rcutKVS_}y6r7h5x48KU0@LCG4J)hs~>ndCZPxQ zkB}hIXDHg~&gg7G6i@u#4z9LP_5PJtZbdKjr;OskmpKl}LrFWuB<-4b(n6?0d>~CI zN%RD?oz01dB_4>I6;Iqn1H|>~UX!?=DA-C$j^6PNIf7~iEt5=IVC=T!#b4F{PtYLz zD+qY6W?e!ZNq?V?q_m`ldK2!z|z-xPE1@q~*NDrY8&71zr#{XI?S?^VLyG+O$b*DtBR zF(dS2y2&8U4MTr3uXQtK$;;H=z>3q(V=%8ud9DE!0`>8lzWXIs5}H(jpcO*}zpUot z{65U~)Mn`W;o5psR2#M}+@=K;)w zpj>Wi;xInaE~>!r=u>00g3p1Uv>(On4I;CYAKQ;d1gD4Ek5B&*>-7-(0WKN#16=B& zf$Kz3+9;qG=IMOvT-mUv;u4*(r}6gbrV;UjGlT6@1&WH!(LPEzTslY-TwaX}P*{D*}Mt%08fzC8{ahA>>kL5WQ8`;u5 zjBJzcJ^F81mX_`eu$z|dV=8!KPAvRG4IYOdn)Ls>pO`8ZF2%GrH3j(n)v^27lyd&Ay zPLzz{8rHu44kb)Z?9*>ULfF?iAf5L0Qz+Fq`)WqzHk$fqIeuVqu|E@lx*lqAuM#Rl zrLEs0Z2j3pZdzQ$vbgAyu(-z})3V-!E%(Hsc=kO%fagb+dj~Sj*|tyL%90$|Q!uc! z+)3Y)BH62i0oHK!N+f}g>_ps^5ofIgW1!S%iC;`{^nX-9C} z3h-metI)7=+oh--y&XUB8;W7kF`kCs0JCUbrMgk@X25r-0tIvcaCLhz_+a=B;DhiT z<{;B@K?b=Wm&dywC$rQ@?ng2*&5_)tfBP)EyIY-1_ag`EbJP8h+b%yne75u5Z;jC`V3+TUXC)Zi+?|aC2go?vczzI zES@kG#}tqPo?OgEO#CsX#BdwufdlN$L}@Yxtc`Q6E*-(O`nD^^ntuILB*>Z>hHLdL z&Y)xN=T^+{=m$b;nGWe$#j`dS3GwbC*F7cTMS%@} z!bZ?hpVgm_Dx-Evi)r2a(S&{SX)E!)=L&&7Q7bwn(G z0SkRaphz6LqJIvIHWu?8`k5#q=5wKI8}8B+x}M9IZ`)kx=niHTWpe@AN_C;y|7*TCZ}V}=grBkb6-P`uT8e_xz5~-w0v*J;0+TgZ2vRh z@Evcu1)4a2KCa2>=Fy@7(EXVnv)hMOvFc!>n^tq=XPtvJLz@*I+Z_aIt3ZLT+0C}Ia1cTttZ zq|BD)L@D@Z;0aa}t@>6=bAqJ4YT$X@!o!;S9|W#_rIO@&^V+`wpE2xjS%n~VHoXOf z3SB3^h*I*+Q-#Q2w?^E*23rh$%qD`%MK8pQj7DRxSa|g5qM_@6BI*T(_RzCIpHZeO zRwiAPS->(Uql}OPqfBS4%okhO`SV!DhB7gGV3d14R_+B+?kJXf1CrjEfAIzt^2(Ro zFf<$anL6>ZTkBp$Pes`c4U}g1uZc|5AR)@=Uvwf_W#;W+qSDH1o&1-Ju^HAn`2hy{ zbIdF=Oa2`RTpPLrIk;YAztIRMuRz#3xryZ!;S)pQ4qPRwn0%!uw_t1Ql54(&$g26*!H!!Q+k0g!b%9k*^b%A~x+y!cOJMqjSZM zl7T5=eK?&E81srXa~gAD3bY_5?KMd`bRB+IzG2~Dl#Gy zZbdtaHVuG!0=j0Tq5}AVtFhs8YY5V?a~3|g+K6ITi7nv<-E_3{GB)>HKN_tzbfFSn zmlF4=zP71lU2d$r2pEG)RbMBl7k0VF8h{i664mp%+_;y<5=Rh_q)zT~PcQ)K1lZN% zyWGbZfD;H9rH<=z^SjQda+1v(Njjc41JH45^SIktc=Kf?)&k<7xXY8y3dWf&{jw90 zqeKd8@pJrEW^vs5H$igwx|q^n4%) zANJ@x95&(Q&l+bo4$*I-=RdF?tnd!5m{K%p4h1h4WUyn~3Z2=KegP?{ICl{+_+Ts@ zZT%}|d&BdSAzhdH*pDv6a1@m~AfFpBM4Rxp+1{#WE31*;5?j5q1+g(nBYiu5FjmXP>kn+i5!$oS5&-n$5a&h$-jwgb%^tpPY#bS#gbX8= zj#%{X=w@_1ejrxSi_Gvg0`J35jGx;6xYGvM0c$_Tt9^mp|5r<}V~-7eOv?-1N_ZCD z@BdjJbb*=?J_>3gSu5_tTQpkncMzIvcpT|*TtE|r9M+|9P?u(S*Y_LGiCBDjGr#m{ zQDxKDiQd*9paGs!T6gp-ld$Eq>HSg0aYeThzSyBm!c7LgX=Cg5xv)J$i3c3|;(Q;@ zHZuEguEOHp%uU|buWd`_ZWM3uuin5@tO+=|oQa|Z*;=X~G6``-iQo!?xW-U|cst9B z8OfjLFcUZ7J)yklWYB8TA6b?#Cz5nNuavBO38N?W`S&ssS#I-1as?%u^yzY2KY^R} zBlB@P9byz4e;=+_ zzWgx=d)*tk2-gEY_qq-?!32DhyrPIyy#NY&Z`erj%-=wVBzgjPGbeKO8PE(Ube@v= zy8ZwPiLYT4x%M}ms`otuBi_cZT`1vEUTw5t)!WV=0MO;se)hAGIOolDj z=QEG;lRwX^eFtYMTo1;a$ai2)5pZ))GcSHcvKEz4BKUzfd_2y3-cnB!`{MNHGvB3T zMsGq1V_bz=L)oW#@n$jFVK)85{ENKW55^1eKD6lzpNcn$)yrc1^70fyyzFeek7LqN z8c#>Y03DY>&4Umx34wy&1-~kTD+)V`0C8|_QTP0D-rvmk zN!h16d;cQnBm(hnv)F&zWX-pjKPD!uv1gJ4nz#$8uLdHei-RY16$q81bQ$)bt3c=- zBpuAXv{Rg?#W;XZ0;~tvS8?*z3n1H2U}Y@ENR<_7up-SyB;;&i1P?V?+cU7vET2aR zG+#^$TCc?_6_aa-eBczDuavIjzAo)(DeLofHn;&|PVk6N;g4Hi`!xDRcZ!$oF+K1? zAl_5R+xH8LmKC#`ZRB3 z!syob&sQ=xE0Gy)?%!rB_(lPXISjco_?YwTf6qy7V6=5Wxy+7C$n-&7LkWD8^KAZl zXfQG+nA&Tc{|Q_6sZE{c3m;n)PV;FU$}2rS2+G9G%9t+YV7G7L&Z4#*itNGJUP9~F z=LcW(wr;}Q+nkI;ze`#Ltd+5bVq zNO6!e@wTg+X^b4hb^$aldFiuJS?Ed#%vJ=PTjy|DaX^hr0)wH}AD=`eqbiYe;b< z_hsA`-1PA@ph<0g55x1ae1jdHv0&%Z!cE7kL}g%|GG>(U;`OOtgBMVp4azx2ht#Wt zUB=C!7T_!lI|{>9NlN4*+A}#cj~#$TV<#JOKJmCtkwg3_L-=;_()yEpX?;c{>7*Hv z@mX3I3YCs|38w*U8gaMf%Yr`D~wOa6UoaJ$j8%V;{NLGtPImC^T7c(3h2 z_AC5|^9F=?-y|8EMNP+YU58Dn4T77kTa)#7pAy?hjZvbjg3lJS3|o*xAl%Zecn?j@ zwAS0!rdEZpl|iWTt=)YnG@qVDOwU6^KzVZU!FI8X4ykBnNTrbpmES-WkY* za{+xO3&5J8!E{UT;VJUwTY-bn490;tTWX$62NEEM20PUHJuKWt@-~c5O3+vRSYKu! zi@x`r&~G|;9;*<20YHw^Ifu=i4X#EWg0b@9rfjNG(dVn!S^mx0z=OsA8oc`v^n5UZ+pFb#Ne)#2iM-B@Ef6_$G2+o=stRZV zH%icZr`BLvEED9mzjJHpS^Rh-mpP#sd!a2qfVSMFpYtR|!8o>zB;gEgH>XUVq8aLg zS9{Ngy2UFk5O*M~Vgo|mMsl}tF-lE~ykwznZCmnNcc1Ug+|oRgVgwrxjitSr^Hrf% zi3^ULjQY=?04=X#I>Q&vZ@D%R-MNiYvd(Rbo-Q=rCO0%;ve?pR#M` z3h1*~3V6GFf5$e?q0+UqN0y~M_$Gy=J#cZlv7QVZq$Ab}1L_mKBp!!c@LsSa zGf&a3K@qSkqxWs|#4lbgl#x30C|QuxrLX-9XnUA7v@N|y^8$hpY}8NIa{-P9F&g?q zh;eba5~X7|4UPoRx@nC;t?cFT= zz=7!|=n>8*osnG-WgH1%Pvdfh`{Ji^ej6Liw^7RDXmX+ra})S-v9}Dy21`wfMk5n= zvVlkJuTL6i(ClATJg%LO8@O;*k53+kMe`p6L;_L+lTfai@-0?G5(*y6K&0B3?bDSV?0+h<{X>mgi=ZL}}t(7hnpyAg_y&$YtNUT(Y_G3j#2Yw11I z!;9=8&ML2Km%Q>8b`-76LTh4`82d~S43a1ebB#ud@CxX^^qnH(J10;Gc&P})W9Hya z#HYrch$1Zjw{Fl98g$~SZ5#D+GDwl4DWDz#u*|OC_86v`%%2@ftc6R4Vz{so3yUFn&@B28iBgw)mLTUF3Ug zkc@R2Re<>p^65@%*@8_heBuCJh1a!DUU?JU3#h5z{W&&D;^i$xTbzoLu~&~{?@?jJ zH^O(M;=eM;Vpt#g!Vw%ecJb&M@8m$zltUW zV5hCm^6*9MMlnk)(H8H3uMze3=r;qgklWbn-T`m~uR@A%Fd9;On(<*COCSFC-{;wy zKJa}Wi0vYaFA%$oaB)&ta`nlf!_c}5{K%K@-O`Q`QYRO&4J>_B z)J{1n#HWi2^O99LU%quq^a|iI`UCh}TVYr<>e8*xVgAh4$Y*9fWEd0M0#J>-+l-kejPuovKu@z z-RXZKYK*fByWr^Nmjq~Cy<_PJVPCqd_dNX!)WgRZDHoOS2lW%ly=nLvEHe+X7`&=% zeZwcLuuGrGf}i~f3G$O46LqrwE`hJJ_it!J|C|X!ZeEC!n@a)i{aZ{vto>2LaQ$*G zZ3R_h27ih-x{=h=QH8fgU{Vd$1$P-Yn)#uHu9;#Z1Ur)s*pHbR-psdg`;uBSrWeEv zeuP)q;6%L$nk`hq-U%MX&*>s>fhQ>@YClshxyedkYh|eiOoW@au{x9?e^=F)&!y>5;LVzPH2Z+vQcNBIf!v|j- zcBUDZH;o0jo7*R$2*@f5*W)hGBIs70iC{H=&WZhsvH?>B<+}98rs!2}9AW6g57HDF zSlA>+g{w)l>lkW^um^%24r=_+9c)I-{}Juatu#AvpEbm;)v+W4mgs1-8PCY!EYV3q z@BRzlLyNOR^#j<|_dU=;G^oxmD1e*N0TrA z8GA%qMEy*i?Zdm-$#Po&9Lf)0kQqGaS&gszUL2U%eX_Cp5O8v=E6T%o9p_cg^1zf7hTaFtYK-tya;3TBfS!uGnOX# zAX{$xDL6y*mX7NN`G`m7;0Nm$n7%EslgziO(=bGsQ^6+E(TsORZ_8hZ2zx4%Mv;=g(U;TIN z^MsgvHjV6Pj)Lnox$O&ZDb7r*Il@Gjp+~*{w5E@k>tYVIJp&07y&{Wn6<=6-;f>@U zd^`F$a`hze2TB90^(!*)zSGcin)Bn=iODD{zFx(`Vm)iTBOq4my}viN4R}KRE)vn{ zY)&j=-wCemeV*$dS-%ZA@FSNUuHT55ZpRP4nk9TWz3+Dhxi}wd!uOvJaIdH@`U*Oq z{|vg=AMJA?O@SMSmKlO{?G{inLVA1&U;W`Apf zG4bEkUnY1J>4L{1_JuO_-!Lg=T@ahs+*X|QAs~nq>uLK~beH}oVp7e5ctPhq;rtq! z;2kv3+f9I}YF;4VNw%<-l${!ja0P64a=N*9A zl2|mRvIEbH3T6i$*55YkCjmMA$C&@a_q?ibx{I#k%dOmQbBKE?%Y@agg9TX#!)|@%r$&`8g8&_Lt5Y4ebUB22QiP|U^AlQ7Mt=0Y(;4vi5+ z4mHug161F5F9%cjFlfZWjL$R5p$kpxoNCJT$oBd7R8cX%MR=QUP*1@=`+;BZQn_ZAkE&E2-)v8fkRRJ+OWpYM=l5TXX$r z7%^k*mtoAJJCVn6f#)v{OEL!Zv9*p|6mOdsvHZ|=BPl1Nc9WY`WP>DuttX_#q`mTHM^Co@- zSMm8cAP~J0*2<3*t(D2=q3g&Mv{Q9M*O4d2?3ADnpKl%qH2RllMD%08ZoS48q_M7i zo>606*}u6)v3SH|qt-IjJHCuz5K4z^ozs09FFyL_1Bz1_YDm%Z@z@S!GGL%Mn@ zjmV$aVIB^1+dFcVLr=%5kRJ{R?eNKk`*F0o6B`3nini0IeIDl@h?y*Q@~uUAHrynV zLO~#-<+ccWZ7j@bH7;PT*q{62*I;!$f3C!jPdgC38WfuS$rAm6inFYZ0)T0o#CLh2 z*|F~J>c!2o&feMj*+3yAnbzmZkAd`L^htM^V2Jg*dI`ZP1ZT3pusJX#VgtmS1h=v@ z43ArX@Lj~9cC%R!4ZMgS{Q$F33)?2xXXX*P5ckUf?%gpkU(6e>zR03vEP-)92ygrP z@IK-qUt}Q^-T}N<#Qn!7dkv3`dqH?n1ZETa7dzD{Z1xzo#4p%1JFsxoZ#0W?AB#r> zZ+eBj#ISUF<-&g&`^LNyVeThin<1$nZWda@HN$3y?llm!eMaF3<9Zr)$Z@!C_^ZB1 z1q$vXO%qWL-vq|muOvOx5j;}N+ual(?Umlwt$l6r0TAu^-fhM_#I1Z|p1LlF4f~@g zy$c^7)l2Rc%)?={)U2n>v zBOo7S&qH@H+{X_|l0A!!k{1isD6LneOJ3Qt1%LmHz6aqW0(6rBx{OEBwh(dk7*Dc=UMm|;Tq2~|>4sqZR2M%%I z5C;x%;1CD?Qyj4It{a|;^18Zu)ltzHC|3iHCbe?fw93FQf&oWOdE=r$qeHDKuXEIv zH~X8amj^O3r3Ll%H4aoNsIRLFRHzvh^>t0EqqsUy5jf>^NA=Vx=Fjl(%;DNw0zCDN zBQVu9se83mDZ2fSI z|HtRQD<|szr+)bDBmChXBLlz3C7#1w#S`#XdQ*RY9&-9_?(c8FF-%Q+fB(GExUKms zxRwZa;v!r#!gO2&Ohq{bp%Y>9`u=_uVKc(L2=g`o55!|TUJeX#S7dvC|NTrOMARl1{)<-WO+`g;7|2E*&cVkt>5bMV2IGEE9VB;Mjp9w}F*_O|hY|W{*0=_yz@>5c;OUO@2Z%r&ranz1YNe7@XCD}6$eML6! zIyz9FpEi=QFe4@Xro@#Z$C0i=@T>1{{r#)(&5wTp z*M(z7z(szO_k8CN-|ZIsXiZ3Pk4;Iw5M+z7;y3y3LH-KnCj?T+SN?4WJZW2hzhE}f zZv4Fsm;*4%l2n|M8cFb^q^}}xuS)`3TFI}3SH`Afk?6;H7TLM7$UHB&bXh6(L&T1D}G*GMZNWAy_?u}gk!ae zZC_^xe_KZ-G@^CTgFK`4nd8a?IkEBL@eAjS4qWFG7et~p;Tkq$$R|SE@?xKm-qDHe z6WvmxCBwzYqkQf~-4&>iRC<>?ZhSm3xfvMiSt~(J9~$s?5|t2@d?dF<%N(iWA4$ zhLy|0acs8+cvQ&U(U>nuJ1u;(V)$mq@R@U_#g;fHX;?mTI!g}xbpU6}jnJ8hCr!B9 zEv2;BT1Q_uYLz{bbW`HZ32b*a%AEeD*=`2P49wNx#;-7?-Imy$Fl@Us*e-EWC-*@| zen**52jLvhB?G*fmC|8L{38{>tRKllzJ+rYaNfVCzyB-pXTq=J=^TR7wD{2MEFuo6-g25=sFohyy9(Y6h1f zUy31TYghI6JAR5jH2jZ!n3d9#l=$0Z^r2vQzBquBvYV>)_n(U}>5F?X#yv^#W1NaI zA=skQ$NKv@N35qmalXy>u+4sxEZvf1ZDQy|w~n>_X0(0fSZT``d*2va_Za*4V{Fke z%sntBt}5!L*^-@r)Y~&Hg#C$L+j$V83;Y^g^ONGRF4YsIh>2I%+K9 zyOL34cQP{{8Dsx!jPxoo?;T_RYK(=6eYnSFyT!);_^i$zPP4sbv)`U(TbpQaPm}IX zvVSJq-mu%ROOu`%W#22?9t4}xY+J?>{>509d43!r-Qx)PeB4-+xif`$u9um6i_E%r zi1>XX{m2*ax@`Njb{8A5#J=@e@teX&M|NU9v{o-b>r;aKteYAT90(Q&HkWAx;OF4ZjbbRl6{Q_*l)14d!#$Z$^gAM&W`x= zbZ#Daio2{NBZ{Y6Lxx}8;@oDPscKMB6 zJDn&VKlio-RJg_c_k{f(+bc7O{GAzW?)@3e--ozI`g(>Pxj)P}0`NNuNXGpI#P^p1 z;{Kpu9^g+E67ozT>uxJ#*PbtAYp)iPuw4SaTfn1*to5mY9}sY3cJwC}**u5a@xh2p z`;#_ll?{Wj)@FalX8UV`y(>ZbFv0#EeiQ9llI^)9`ww>My(IhhNw&Tu`|s?~YW8RC zQm@?}9!2;2|MAn|b&D3(C`Q=ypdXt#jDyorZ?9iItCz~zv5 zjyA)-!`vcf!CTC<)sJSg99?BTR{Pk{7yW4;?-p>Z2SwVV14sKJJ=@F|h5kSMS^ua( z*U%=OwF2_l|8h;kTmB{lJpsm zUIslJcN=cnuQlb?Vdfr=aJcfE7YR~|)NRgFu`UGcaueQO?nVp;?g=80{(ykx-Lu^S zAl7q;$smYusn~#vwHe?y0B*yIiEl;nvE=w>6VCS};!x`KJdR|W_gFn2Lp>F(HA7VcnG}Dgj@Q} zDxU&A*`QsDP5MzxJjV+7kuiN^mCpy9_$|F@!HY!s2{HX;!D|2?j{cx1f4DRcONF7& zaOGQ3UXs$J?I!=NI{aFpO*%>%I{)q!@bs8|vdTXRIAv?-!_OR_gnqSGx<%G{vjG2} zWx^dMTEmx*y34$o4+Q>9}hexEx2nGA*I0DSup_zILy;|jgqC~xWU$O!oV0yybO ztuxBEnT;f&Vj9MgU-98%;TeO-aCDvmIPt8#)+o<)3739@9_VY9e&!wBX7Aj*UP=KMlZJbxdd{QeQ(2{6FyFTefG2g53!6HNHpC2o=C z8kA2CV&669P9_;7rtA@^2GrI zzu0p_J5QPAxxp6yybd_&;WrHUSoFMW;u)$}$BZ-SG4XR>j?ZMkhohgHZo|PZ5%3hL z>@v5gZ|RdN6P{|yx!5N~iR%C-o%~!HAB)aAOgKNR#wXq6|HFWjZ)@8OxY&b1z8h18 z^Qgnbzs4+oDW?$fhdx&V&UX1NLOzxpwg682L&yCw6TZfjhhk9+KNXE?PFB6-_m?lI z_N(QKq}Wl8|B@0lH&9nuh ztINDdd(co#psC4-qa}bmc{ouDG?q67JjEp2!sM^3uMCJ1gD4)hC6oL)Y*Mt6gGitT zXJa`{s<&k7j~fQ)e`pvb1{(HFDJ%uY5d56MS;byYfu{sf7nob=t!oIXOR_5JYbwnV zV$46wcj1hDpWojUT;TWm{g<5OZ)mKpQac;2{7TG)ue z@K*+FYnP!)Tna~b)#{+4pb6q6gl*>B{34Ivb3visk6Ks`_&ti>04jxZC4b@1FUT+Q z7Q{Mu;mnyO9>`bz44(%zAXoKM!4OY{dzQ~TqoB0ZKQ${?z}2&iQ$z^dnQ9Qd@y@Ou z5EzdTz9|@)!YQ65Ln`>aXNrST$|t3UVO-G?b&4w{ImWr9zr3yzN0ne=d0j1+wWJa8ta#$YNcNsf-V_c zm6Iyg%D*ugAh`KKwO-ICxPU={`WLw;*3Dhl8t1ycj>l=&b3?BE|Ky6b% zHMr!Tk~JmkOiFK4y&s3;l{EoDesv>oR}banoB`3OQ9X0#lu#VYn|S8zUszsUGZ-hu z?#zWX!KNzD&@mY_^3`=Xudl`Y7(pNgQ^6^PR%@ykR6rQY(K1zVtmUbY>&hBP8IHrD z@>oQL(ru__zaW!&7Kenqh?!XzSn4|SVG5X`zeFD{h#w4?sv=`F1Q~;+E-NSJKQKb^${+_S zu`XD!nyTJVI@Y?HUHkc|B>nu8V|f2(0CQ)P3j=27310np95SU;)Fm!5B5Z0 z<>Eb&v;A|SE1^&;nwxWSa;6yW3d&U1E%KJ+`r&TOqazY8TUk@cRS0KAeb7`XmUZz{ zXB$&gg7u@m9!VAd2iU{G5bD6v&5Z%Ur8uF7ST1O4vM3@kG2=IqEi0HpEtg9h3f+-Y zUEd^36tz!ddE+u6W`o$DHFb)FzW$t=qqcrYAf`HmmL1gQ|6p+0A;Zc5-v~Aa0zbpB z--0YJMtA`nMNWfC<3rNFbOx!Kp1U9)TtGg5wPTso%v51Vb@?ITm{E5-V#GT20UeP zUo1{N!*vywn*9-YRdy27MR9jzXnlwY;aw}lJ<7b;->AxVgIWegP4|1mX z3j>(N^~>nAdVLGBJsuYfz5(;X=vvcYz@MWt?(r;{=Px4hZN#s?PH&sblmCNdY&j{5t~udS{?m3m;uPnKxXKo8|1VM$R-SH)Tn{$GaNXXnxt+n?e|Pjs81 zkuEWU*sr)A>vapP zAi}*li~er2{cf{^~beG@EQfC#n-V(nY! zY}^;+lWx+%K9YA<`{~TYa}oYn#A@F+d(~lN{1%(QksK<%qDWR(&JFv_`qnuk>$A?#`ZobazFPPthZ`w84)H5dzT+QrSYjXzvH1E9v%bS& z6j{T}xF^+&Tj6a;$Je*cfjTA{1z!!sRYugRXF=~qB)-12KfU^TqlC!@t9Wd`$^xuG zg!L`{TjvW>yHSGo0pp*c?LUaj`1;nl%XWS<49^!v5c?gD#i|wmh=jv;IW0V-$U#op9 zd>6&!xcb()`&zTURnEXRAb%G8V`Q+47Ma%h)OxeN!yFiMI>+SKqU!+avj0~7osYSZ z!X4gwMerkevD&r5J`{_uZ=KWYX8j%mP3+gIXNBVCGjgr=t^M%rYm6!uofZPCo|PVr z#tF0PTl?BO*BB+%#4?Pu+X!O6<58dVXU8B$#Hv4Z&zEKS#D_82H?qX<{xwFT8T;pa zPQV}UQdsm``iI#=NCZTZsvZ)7^rfi>jnqK9Ryqxl;p$)hlu_bHi%_$|kfii~0B