From bb85374b79086cd8efde24d23a1bffeb97cae26b Mon Sep 17 00:00:00 2001 From: Tyler Murphy Date: Wed, 5 Apr 2023 23:08:09 -0400 Subject: [PATCH] new c version --- .gitignore | 2 - Cargo.lock | 2447 ------------------------- Cargo.toml | 37 - Makefile | 35 + bin/app | Bin 0 -> 37216 bytes bin/src/io/log.o | Bin 0 -> 3424 bytes bin/src/main.o | Bin 0 -> 1992 bytes bin/src/packet/buffer.o | Bin 0 -> 6720 bytes bin/src/packet/header.o | Bin 0 -> 2480 bytes bin/src/packet/packet.o | Bin 0 -> 4656 bytes bin/src/packet/question.o | Bin 0 -> 5176 bytes bin/src/packet/record.o | Bin 0 -> 12680 bytes bin/src/server/addr.o | Bin 0 -> 6288 bytes bin/src/server/binding.o | Bin 0 -> 7440 bytes bin/src/server/resolver.o | Bin 0 -> 4664 bytes bin/src/server/server.o | Bin 0 -> 5360 bytes public/css/home.css | 40 - public/css/login.css | 18 - public/css/main.css | 119 -- public/css/record.css | 67 - public/domain.html | 21 - public/fonts/helvetica-bold.ttf | Bin 308628 -> 0 bytes public/fonts/helvetica.ttf | Bin 317968 -> 0 bytes public/fonts/overpass-bold-italic.otf | Bin 71760 -> 0 bytes public/fonts/overpass-bold.otf | Bin 68828 -> 0 bytes public/home.html | 21 - public/js/api.js | 51 - public/js/components.js | 12 - public/js/domain.js | 95 - public/js/home.js | 91 - public/js/login.js | 44 - public/js/main.js | 136 -- public/login.html | 21 - public/robots.txt | 9 - src/config.rs | 57 - src/database/mod.rs | 146 -- src/dns/binding.rs | 144 -- src/dns/mod.rs | 4 - src/dns/packet/buffer.rs | 227 --- src/dns/packet/header.rs | 102 -- src/dns/packet/mod.rs | 128 -- src/dns/packet/query.rs | 78 - src/dns/packet/question.rs | 31 - src/dns/packet/record.rs | 544 ------ src/dns/packet/result.rs | 22 - src/dns/resolver.rs | 230 --- src/dns/server.rs | 85 - src/io/log.c | 49 + src/io/log.h | 45 + src/main.c | 32 + src/main.rs | 64 - src/packet/buffer.c | 240 +++ src/packet/buffer.h | 51 + src/packet/header.c | 93 + src/packet/header.h | 41 + src/packet/packet.c | 171 ++ src/packet/packet.h | 23 + src/packet/question.c | 94 + src/packet/question.h | 15 + src/packet/record.c | 540 ++++++ src/packet/record.h | 101 + src/server/addr.c | 233 +++ src/server/addr.h | 69 + src/server/binding.c | 245 +++ src/server/binding.h | 42 + src/server/resolver.c | 166 ++ src/server/resolver.h | 6 + src/server/server.c | 100 + src/server/server.h | 12 + src/web/api.rs | 156 -- src/web/extract.rs | 139 -- src/web/file.rs | 31 - src/web/http.rs | 50 - src/web/mod.rs | 82 - src/web/pages.rs | 31 - 75 files changed, 2403 insertions(+), 5582 deletions(-) delete mode 100644 .gitignore delete mode 100644 Cargo.lock delete mode 100644 Cargo.toml create mode 100644 Makefile create mode 100755 bin/app create mode 100644 bin/src/io/log.o create mode 100644 bin/src/main.o create mode 100644 bin/src/packet/buffer.o create mode 100644 bin/src/packet/header.o create mode 100644 bin/src/packet/packet.o create mode 100644 bin/src/packet/question.o create mode 100644 bin/src/packet/record.o create mode 100644 bin/src/server/addr.o create mode 100644 bin/src/server/binding.o create mode 100644 bin/src/server/resolver.o create mode 100644 bin/src/server/server.o delete mode 100644 public/css/home.css delete mode 100644 public/css/login.css delete mode 100644 public/css/main.css delete mode 100644 public/css/record.css delete mode 100644 public/domain.html delete mode 100644 public/fonts/helvetica-bold.ttf delete mode 100644 public/fonts/helvetica.ttf delete mode 100644 public/fonts/overpass-bold-italic.otf delete mode 100644 public/fonts/overpass-bold.otf delete mode 100644 public/home.html delete mode 100644 public/js/api.js delete mode 100644 public/js/components.js delete mode 100644 public/js/domain.js delete mode 100644 public/js/home.js delete mode 100644 public/js/login.js delete mode 100644 public/js/main.js delete mode 100644 public/login.html delete mode 100644 public/robots.txt delete mode 100644 src/config.rs delete mode 100644 src/database/mod.rs delete mode 100644 src/dns/binding.rs delete mode 100644 src/dns/mod.rs delete mode 100644 src/dns/packet/buffer.rs delete mode 100644 src/dns/packet/header.rs delete mode 100644 src/dns/packet/mod.rs delete mode 100644 src/dns/packet/query.rs delete mode 100644 src/dns/packet/question.rs delete mode 100644 src/dns/packet/record.rs delete mode 100644 src/dns/packet/result.rs delete mode 100644 src/dns/resolver.rs delete mode 100644 src/dns/server.rs create mode 100644 src/io/log.c create mode 100644 src/io/log.h create mode 100644 src/main.c delete mode 100644 src/main.rs create mode 100644 src/packet/buffer.c create mode 100644 src/packet/buffer.h create mode 100644 src/packet/header.c create mode 100644 src/packet/header.h create mode 100644 src/packet/packet.c create mode 100644 src/packet/packet.h create mode 100644 src/packet/question.c create mode 100644 src/packet/question.h create mode 100644 src/packet/record.c create mode 100644 src/packet/record.h create mode 100644 src/server/addr.c create mode 100644 src/server/addr.h create mode 100644 src/server/binding.c create mode 100644 src/server/binding.h create mode 100644 src/server/resolver.c create mode 100644 src/server/resolver.h create mode 100644 src/server/server.c create mode 100644 src/server/server.h delete mode 100644 src/web/api.rs delete mode 100644 src/web/extract.rs delete mode 100644 src/web/file.rs delete mode 100644 src/web/http.rs delete mode 100644 src/web/mod.rs delete mode 100644 src/web/pages.rs diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4e5103b..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -**/target -.env \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index 7a41547..0000000 --- a/Cargo.lock +++ /dev/null @@ -1,2447 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", -] - -[[package]] -name = "async-io" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" -dependencies = [ - "async-lock", - "autocfg", - "concurrent-queue", - "futures-lite", - "libc", - "log", - "parking", - "polling", - "slab", - "socket2", - "waker-fn", - "windows-sys 0.42.0", -] - -[[package]] -name = "async-lock" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" -dependencies = [ - "event-listener", -] - -[[package]] -name = "async-recursion" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "async-trait" -version = "0.1.64" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axum" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8582122b8edba2af43eaf6b80dbfd33f421b5a0eb3a3113d21bc096ac5b44faf" -dependencies = [ - "async-trait", - "axum-core", - "bitflags", - "bytes", - "futures-util", - "http", - "http-body", - "hyper", - "itoa", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite", - "rustversion", - "serde", - "serde_json", - "serde_path_to_error", - "serde_urlencoded", - "sync_wrapper", - "tokio", - "tower", - "tower-http", - "tower-layer", - "tower-service", -] - -[[package]] -name = "axum-core" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e" -dependencies = [ - "async-trait", - "bytes", - "futures-util", - "http", - "http-body", - "mime", - "rustversion", - "tower-layer", - "tower-service", -] - -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - -[[package]] -name = "base64" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block-buffer" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bson" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8746d07211bb12a7c34d995539b4a2acd4e0b0e757de98ce2ab99bcf17443fad" -dependencies = [ - "ahash", - "base64 0.13.1", - "hex", - "indexmap", - "lazy_static", - "rand", - "serde", - "serde_bytes", - "serde_json", - "time", - "uuid", -] - -[[package]] -name = "bumpalo" -version = "3.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" - -[[package]] -name = "bytecount" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c" - -[[package]] -name = "bytes" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" - -[[package]] -name = "camino" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo-platform" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" -dependencies = [ - "serde", -] - -[[package]] -name = "cargo_metadata" -version = "0.14.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4acbb09d9ee8e23699b9634375c72795d095bf268439da88562cf9b501f181fa" -dependencies = [ - "camino", - "cargo-platform", - "semver 1.0.16", - "serde", - "serde_json", -] - -[[package]] -name = "cc" -version = "1.0.79" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "chrono" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" -dependencies = [ - "iana-time-zone", - "num-integer", - "num-traits", - "winapi", -] - -[[package]] -name = "codespan-reporting" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" -dependencies = [ - "termcolor", - "unicode-width", -] - -[[package]] -name = "concurrent-queue" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e" -dependencies = [ - "crossbeam-utils", -] - -[[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.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" -dependencies = [ - "percent-encoding", - "time", - "version_check", -] - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "cpufeatures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" -dependencies = [ - "cfg-if", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -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 = "cxx" -version = "1.0.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" -dependencies = [ - "cc", - "cxxbridge-flags", - "cxxbridge-macro", - "link-cplusplus", -] - -[[package]] -name = "cxx-build" -version = "1.0.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" -dependencies = [ - "cc", - "codespan-reporting", - "once_cell", - "proc-macro2", - "quote", - "scratch", - "syn", -] - -[[package]] -name = "cxxbridge-flags" -version = "1.0.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" - -[[package]] -name = "cxxbridge-macro" -version = "1.0.91" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "data-encoding" -version = "2.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb" - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "derive_more" -version = "0.99.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" -dependencies = [ - "convert_case", - "proc-macro2", - "quote", - "rustc_version 0.4.0", - "syn", -] - -[[package]] -name = "digest" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" -dependencies = [ - "block-buffer", - "crypto-common", - "subtle", -] - -[[package]] -name = "dotenv" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" - -[[package]] -name = "enum-as-inner" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "errno" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" -dependencies = [ - "errno-dragonfly", - "libc", - "winapi", -] - -[[package]] -name = "errno-dragonfly" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" -dependencies = [ - "cc", - "libc", -] - -[[package]] -name = "error-chain" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc" -dependencies = [ - "version_check", -] - -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - -[[package]] -name = "fastrand" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" -dependencies = [ - "instant", -] - -[[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.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "futures" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" - -[[package]] -name = "futures-executor" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "waker-fn", -] - -[[package]] -name = "futures-macro" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" - -[[package]] -name = "futures-task" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" - -[[package]] -name = "futures-util" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" -dependencies = [ - "cfg-if", - "libc", - "wasi 0.11.0+wasi-snapshot-preview1", -] - -[[package]] -name = "glob" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - -[[package]] -name = "hostname" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" -dependencies = [ - "libc", - "match_cfg", - "winapi", -] - -[[package]] -name = "http" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "http-body" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" -dependencies = [ - "bytes", - "http", - "pin-project-lite", -] - -[[package]] -name = "http-range-header" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" - -[[package]] -name = "httparse" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" - -[[package]] -name = "httpdate" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" - -[[package]] -name = "hyper" -version = "0.14.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "http", - "http-body", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - -[[package]] -name = "iana-time-zone" -version = "0.1.53" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "wasm-bindgen", - "winapi", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" -dependencies = [ - "cxx", - "cxx-build", -] - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "indexmap" -version = "1.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "io-lifetimes" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" -dependencies = [ - "libc", - "windows-sys 0.45.0", -] - -[[package]] -name = "ipconfig" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd302af1b90f2463a98fa5ad469fc212c8e3175a41c3068601bfa2727591c5be" -dependencies = [ - "socket2", - "widestring", - "winapi", - "winreg", -] - -[[package]] -name = "ipnet" -version = "2.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" - -[[package]] -name = "itoa" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" - -[[package]] -name = "js-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" -dependencies = [ - "wasm-bindgen", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.139" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" - -[[package]] -name = "link-cplusplus" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" -dependencies = [ - "cc", -] - -[[package]] -name = "linked-hash-map" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" - -[[package]] -name = "linux-raw-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" - -[[package]] -name = "lock_api" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "lru-cache" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" -dependencies = [ - "linked-hash-map", -] - -[[package]] -name = "mach" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" -dependencies = [ - "libc", -] - -[[package]] -name = "match_cfg" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" - -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - -[[package]] -name = "matchit" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40" - -[[package]] -name = "md-5" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" -dependencies = [ - "digest", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "mime_guess" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "mio" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" -dependencies = [ - "libc", - "log", - "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.45.0", -] - -[[package]] -name = "moka" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b6446f16d504e3d575df79cabb11bfbe9f24b17e9562d964a815db7b28ae3ec" -dependencies = [ - "async-io", - "async-lock", - "crossbeam-channel", - "crossbeam-epoch", - "crossbeam-utils", - "futures-util", - "num_cpus", - "once_cell", - "parking_lot", - "quanta", - "rustc_version 0.4.0", - "scheduled-thread-pool", - "skeptic", - "smallvec", - "tagptr", - "thiserror", - "triomphe", - "uuid", -] - -[[package]] -name = "mongodb" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a37fe10c1485a0cd603468e284a1a8535b4ecf46808f5f7de3639a1e1252dbf8" -dependencies = [ - "async-trait", - "base64 0.13.1", - "bitflags", - "bson", - "chrono", - "derivative", - "derive_more", - "futures-core", - "futures-executor", - "futures-io", - "futures-util", - "hex", - "hmac", - "lazy_static", - "md-5", - "pbkdf2", - "percent-encoding", - "rand", - "rustc_version_runtime", - "rustls", - "rustls-pemfile", - "serde", - "serde_bytes", - "serde_with", - "sha-1", - "sha2", - "socket2", - "stringprep", - "strsim", - "take_mut", - "thiserror", - "tokio", - "tokio-rustls", - "tokio-util", - "trust-dns-proto", - "trust-dns-resolver", - "typed-builder", - "uuid", - "webpki-roots", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-traits" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "once_cell" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" - -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-sys 0.45.0", -] - -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest", -] - -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - -[[package]] -name = "pin-project" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "polling" -version = "2.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" -dependencies = [ - "autocfg", - "cfg-if", - "libc", - "log", - "wepoll-ffi", - "windows-sys 0.42.0", -] - -[[package]] -name = "ppv-lite86" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" - -[[package]] -name = "proc-macro2" -version = "1.0.51" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "pulldown-cmark" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63" -dependencies = [ - "bitflags", - "memchr", - "unicase", -] - -[[package]] -name = "quanta" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7e31331286705f455e56cca62e0e717158474ff02b7936c1fa596d983f4ae27" -dependencies = [ - "crossbeam-utils", - "libc", - "mach", - "once_cell", - "raw-cpuid", - "wasi 0.10.2+wasi-snapshot-preview1", - "web-sys", - "winapi", -] - -[[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] -name = "quote" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" -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 = "raw-cpuid" -version = "10.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" -dependencies = [ - "bitflags", -] - -[[package]] -name = "redox_syscall" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "resolv-conf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" -dependencies = [ - "hostname", - "quick-error", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi", -] - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - -[[package]] -name = "rustc_version" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" -dependencies = [ - "semver 1.0.16", -] - -[[package]] -name = "rustc_version_runtime" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f" -dependencies = [ - "rustc_version 0.2.3", - "semver 0.9.0", -] - -[[package]] -name = "rustix" -version = "0.36.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes", - "libc", - "linux-raw-sys", - "windows-sys 0.45.0", -] - -[[package]] -name = "rustls" -version = "0.20.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f" -dependencies = [ - "log", - "ring", - "sct", - "webpki", -] - -[[package]] -name = "rustls-pemfile" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" -dependencies = [ - "base64 0.21.0", -] - -[[package]] -name = "rustversion" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" - -[[package]] -name = "ryu" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" - -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "scheduled-thread-pool" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf" -dependencies = [ - "parking_lot", -] - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "scratch" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5e082f6ea090deaf0e6dd04b68360fd5cddb152af6ce8927c9d25db299f98c" - -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" -dependencies = [ - "serde", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - -[[package]] -name = "serde" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_bytes" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" -dependencies = [ - "serde", -] - -[[package]] -name = "serde_derive" -version = "1.0.152" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.94" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" -dependencies = [ - "indexmap", - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "serde_path_to_error" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0969fff533976baadd92e08b1d102c5a3d8a8049eadfd69d4d1e3c5b2ed189" -dependencies = [ - "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 = "serde_with" -version = "1.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff" -dependencies = [ - "serde", - "serde_with_macros", -] - -[[package]] -name = "serde_with_macros" -version = "1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082" -dependencies = [ - "darling", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sha-1" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" -dependencies = [ - "libc", -] - -[[package]] -name = "skeptic" -version = "0.13.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16d23b015676c90a0f01c197bfdc786c20342c73a0afdda9025adb0bc42940a8" -dependencies = [ - "bytecount", - "cargo_metadata", - "error-chain", - "glob", - "pulldown-cmark", - "tempfile", - "walkdir", -] - -[[package]] -name = "slab" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" -dependencies = [ - "autocfg", -] - -[[package]] -name = "smallvec" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" - -[[package]] -name = "socket2" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - -[[package]] -name = "stringprep" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "subtle" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" - -[[package]] -name = "syn" -version = "1.0.109" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - -[[package]] -name = "tagptr" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" - -[[package]] -name = "take_mut" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60" - -[[package]] -name = "tempfile" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" -dependencies = [ - "cfg-if", - "fastrand", - "redox_syscall", - "rustix", - "windows-sys 0.42.0", -] - -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.38" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" -dependencies = [ - "cfg-if", - "once_cell", -] - -[[package]] -name = "time" -version = "0.3.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890" -dependencies = [ - "itoa", - "serde", - "time-core", - "time-macros", -] - -[[package]] -name = "time-core" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd" - -[[package]] -name = "time-macros" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36" -dependencies = [ - "time-core", -] - -[[package]] -name = "tinyvec" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" -dependencies = [ - "tinyvec_macros", -] - -[[package]] -name = "tinyvec_macros" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - -[[package]] -name = "tokio" -version = "1.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" -dependencies = [ - "autocfg", - "bytes", - "libc", - "memchr", - "mio", - "num_cpus", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.42.0", -] - -[[package]] -name = "tokio-macros" -version = "1.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" -dependencies = [ - "rustls", - "tokio", - "webpki", -] - -[[package]] -name = "tokio-util" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2" -dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-cookies" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40f38d941a2ffd8402b36e02ae407637a9caceb693aaf2edc910437db0f36984" -dependencies = [ - "async-trait", - "axum-core", - "cookie", - "futures-util", - "http", - "parking_lot", - "pin-project-lite", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-http" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658" -dependencies = [ - "bitflags", - "bytes", - "futures-core", - "futures-util", - "http", - "http-body", - "http-range-header", - "httpdate", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", - "tokio", - "tokio-util", - "tower", - "tower-layer", - "tower-service", - "tracing", -] - -[[package]] -name = "tower-layer" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" - -[[package]] -name = "tower-service" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" - -[[package]] -name = "tracing" -version = "0.1.37" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" -dependencies = [ - "cfg-if", - "log", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" -dependencies = [ - "nu-ansi-term", - "sharded-slab", - "smallvec", - "thread_local", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "triomphe" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1ee9bd9239c339d714d657fac840c6d2a4f9c45f4f9ec7b0975113458be78db" - -[[package]] -name = "trust-dns-proto" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "log", - "rand", - "smallvec", - "thiserror", - "tinyvec", - "tokio", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lazy_static", - "log", - "lru-cache", - "parking_lot", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "trust-dns-proto", -] - -[[package]] -name = "try-lock" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" - -[[package]] -name = "typed-builder" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "typenum" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" - -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" - -[[package]] -name = "unicode-ident" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" - -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - -[[package]] -name = "unicode-width" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna 0.3.0", - "percent-encoding", -] - -[[package]] -name = "uuid" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" -dependencies = [ - "getrandom", - "serde", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[package]] -name = "version_check" -version = "0.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" - -[[package]] -name = "waker-fn" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi", - "winapi-util", -] - -[[package]] -name = "want" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] - -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - -[[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" - -[[package]] -name = "wasm-bindgen" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" -dependencies = [ - "cfg-if", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.84" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" - -[[package]] -name = "web-sys" -version = "0.3.61" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring", - "untrusted", -] - -[[package]] -name = "webpki-roots" -version = "0.22.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" -dependencies = [ - "webpki", -] - -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - -[[package]] -name = "widestring" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" - -[[package]] -name = "windows_i686_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" - -[[package]] -name = "windows_i686_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.42.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" - -[[package]] -name = "winreg" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" -dependencies = [ - "winapi", -] - -[[package]] -name = "wrapper" -version = "0.1.0" -dependencies = [ - "async-recursion", - "axum", - "bytes", - "dotenv", - "futures", - "moka", - "mongodb", - "rand", - "serde", - "serde_json", - "tokio", - "tower", - "tower-cookies", - "tower-http", - "tracing", - "tracing-subscriber", -] diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index c114ff5..0000000 --- a/Cargo.toml +++ /dev/null @@ -1,37 +0,0 @@ -[package] -name = "wrapper" -version = "0.1.0" -edition = "2021" - -[dependencies] -# Blazingly fast runtime -tokio = { version = "1", features = ["full"] } -tracing-subscriber = "0.3.16" -tracing = "0.1.37" - -# Allow recursion inside tokio async -async-recursion = "1" - -# DNS Caching Layer -moka = { version = "0.10.0", features = ["future"] } - -# Mongodb -mongodb = { version = "2.4", features = ["tokio-sync"] } -futures = "0.3.26" - -# Convert values to json for Mongodb -serde = { version = "1.0", features = ["derive"] } - -# Reading env vars from .env -dotenv = "0.15.0" - -# For the meme records -rand = "0.8.5" - -# For the http web frontend -axum = "0.6.4" -tower-http = { version = "0.4.0", features = ["fs"] } -tower-cookies = "0.9.0" -tower = "0.4.13" -bytes = "1.4.0" -serde_json = "1" \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6c2a640 --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +CC = gcc + +INCFLAGS = -Isrc + +CCFLAGS = -std=c17 -Wall -Wextra -O2 +CCFLAGS += $(INCFLAGS) + +LDFLAGS += $(INCFLAGS) + +BIN = bin +APP = $(BIN)/app +SRC = $(shell find src -name "*.c") +OBJ = $(SRC:%.c=$(BIN)/%.o) + +.PHONY: clean build + +dirs: + mkdir -p ./$(BIN) + mkdir -p ./$(BIN)/src + mkdir -p ./$(BIN)/src/io + mkdir -p ./$(BIN)/src/packet + mkdir -p ./$(BIN)/src/server + +run: build + $(APP) + +build: dirs ${OBJ} + ${CC} -o $(APP) $(filter %.o,$^) $(LDFLAGS) + +$(BIN)/%.o: %.c + $(CC) -o $@ -c $< $(CCFLAGS) + +clean: + rm -rf $(APP) + rm -rf $(BIN) diff --git a/bin/app b/bin/app new file mode 100755 index 0000000000000000000000000000000000000000..1cf9d910e6d371bcf2e29dd51d370bdae31d55e2 GIT binary patch literal 37216 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 literal 0 HcmV?d00001 diff --git a/bin/src/io/log.o b/bin/src/io/log.o new file mode 100644 index 0000000000000000000000000000000000000000..b93da40edd53e33cd4304e5c53e9384e64f4cffa GIT binary patch literal 3424 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 aLObXRm}@Il%)(!|jfs(V*;DzioBu!YbE?+> literal 0 HcmV?d00001 diff --git a/bin/src/packet/header.o b/bin/src/packet/header.o new file mode 100644 index 0000000000000000000000000000000000000000..9754cda84bddd9a5a59bb574b432d4f85168a02d GIT binary patch literal 2480 zcmbtV-D?wB6u&e1nrNGerAWaA^C05F?vO?i5tQh3ZIDI8;FFYW+RRw7Y0AuqU!X!n zGx$>Q9}vU`pL|Po1!-Eb`{*k8x+M>b7QtPFBC<<8=gvLtb((q619#5v{O<3Z`#Ce$ zfBE&8swj+1VTaj9L@Z-7$qiiOu*mvZA8W29AFB}SN0%1$okdo>0R$G%%}+(Wy|ifC zhQ9MA&%plECIA0&$^TetzSrI&Tk=2HevF{M(CjL$vg$9qT;V9@FU+r~9L52@P0g>w zT4u7@)m!BR&w7HRK^08ZZ+uSb=AU}|m0#8{GtM*nTIGI`oNSpo=Q1>;?VDK%4@h{B zV-RdFHJ@u|#un{adH(v`elF14ZcJ~RahODBSyfikFCa=3x43F&ImUxzXE~LA0sFDa z6YiMW@3?7@0J(k5PcZ2PyXGI%L}|s_+8*f1b&A8NG5wr9mxzeW22dz z`Y1C5#F31Kx+$T1vRQXOGc>|=LbA!>{NwE3wM`vB#MW20(YpoUfW*@ph6ImmL8Eo- z0gQTDA72Y_`=F5);JO_H)Qdj_Jl6R~DEV3eS0eOI1kWa|YRz(t3FcVtM5AU^yhi0* zZ9TG`Mm>nDwMw96;}>k(aw-mFR@}*k3sYZ|!ehG!Y@t@zpXsuSl$e0KVRG2=95EXTXd3|_&Stk_PqZiyLupUXiy zZk6;q;suNR$=E}&k0RXkuI+#hJli4(gg=QS*h!I(XOB=r5)9vewB68`O4CfyZ#4HJg59f~o-|PJD;g1XKH~tLXUCgC?I=^0HW6B?5d`&EPD{y#5;e33@ e!)FH+dnw547)Tc0Km2d>%BKrW|2irW&i?|cUYBbC literal 0 HcmV?d00001 diff --git a/bin/src/packet/packet.o b/bin/src/packet/packet.o new file mode 100644 index 0000000000000000000000000000000000000000..9cac77a1e223915481530f9a8e91f832729dccb1 GIT binary patch literal 4656 zcmbtXeQaA-6~E8+(nr$0_nNtp#U}bdh9=su>@Zl;OvtXC`FeA|SUZ)q#dQ;Vjq>60 z{LGpq(ki{C!g7NmApt_$gv1d4AO!z7l|aI2O1go7jg8Mg$|_Z~#T~Q?>O#qC&bjYC z=kCew5M1f@-t&9E^SkHVbMJNf;&A#2k0cSNN#yfn!*WnUZYmq|D4Ryf{bVzV?LR=v z?>|k;tJe@!7iY9od7Um@^)Z{4q7cbEAKVsGe zi7vh4qtXiV$tQ+JG~*ITb=y)Mj+71}OzmNmlGSZd)X_hv(;@0~GabK6r?;g}?>%(< zOsB`C6K<&!zK2eaap};J*x}{8y6rS>gM0t-){I8XK1h%66KMUjxkrEXQExFIY|>@m zci)5G0erp5?>3O{{}6s}lkaEzo)6)NoBST*vYlK$%8zjrTBqm|7R)Lr1P-y&#o?>f)a6QCjhRvKN7JB1j{({M_s246P(}x^x*% z;8NXh=V{%M&2ehgqIB>z^VwCkK-4~85Jsx0ed(YEv%Pv{e-NzwK^?4vVYTmYFl^nC zO3QS9HfZn7IlPk;cyyFL>}Ly?bO`IbY)L3+{um<6tBEW%fH(_?`QXIHKrCMmI6#tJO`NW)2-Q{=CQK? z`-^rOr6jG)24%JSfLh%&aNZa=T{F{a^))K}IZ~tLUsLH{^u0^a5m?4$R68v#xFJ+QT(g{@7g)thPQ7m-@3 z4CC)p@BOi^+UF4WH8of>w?mePwMJs#aJT_^E>PH4I{2H?5AcjfYKM;C(**aER>lGs zMYO(Y|j-Sul z=Y6G*&HdKAg5F=1Z=d&=e^M9ITkqz}Y3*+PSCQIsWfv*SmGstiK-TL&A<1}rhu)jq zeV|W|^oROG5xqa$|Cw-qI08ZWpzF}@gANqpAyN%7=eJAZ_D2B2=C=nTz3>Ghoz$cU zH*b;`fZPlCL;Txg=)6;EXq+=$6m>h@=E!inddc8JBYI+c>(op4XdH5`@nt z=e~g>Xq-V^%bQemPmM8SiX4DXFLB9y`lD5oUvwA88e0tWgJ6T}+p0>3EqHSXVu{<|>->cnugQwhWs4T4B^d17EZ z!3^4URFRig;*h=f4A#G8LpdM0)oAt6+pNOI*G`yr3pm?rz|{Flg-j;N(PhWIShvMu?Hij%IAjo*xGw zXOPM4#6*FA{&Fc-G{*{4Ho?e^6pT^wyfJ3x98cTeuC~#1vQ6%lH*!rUHgD38e+J04!#FLXoz<}ckn!d(A@lQ+Aza6!QA2h zP{2j~zX-U=YqxUR^5O2F~$bk;Qm9PhG&zbfFkCl3C08{EgwF|I4}lLCIf zp!1A?<9|UM{pST-6>#UpLVc0{{WkonfQ$S;2)L*}!tV*{ZxPo0hJbeq_{#$RfPnY# zdxbh8KQ7>+{*wYO>f8`;oI3k+Lx^9@O9u`%{LCrLPP2bE@F=g}Nf++CbKh~{&inLJ z7w)_(>n_}RS4gNhJ!xi-!Dt%xc-)y8xruDZ%$+nzXf$hPN$6OyNJ1lp$;sRlU{eJ% z7lPmZPqQ1$?dPUSp%X^oM9wg$Nr)-rj%V^lb~48!`2PkS+;MC04vQ_yjb~jS+;1+v z4_I@D&)vuXe^AcxqTn6Fb!1Km@bOa|=f{epgnZkzuJeJH(J{#*FhkA%)jtBhs2PSX zHfQ~ZL=fiA`p&pRz(i{Gzl{G$aKiUWJiDlKj{Cdga`q27*p5NRSls^Cxc`6?D3YPM z{qgUER`t7yj~28Admvap^mY85`n6gcU35;=cwl%Outsiwe3RX^1BiriL1-RV{4SHd SS*`p};UfVJ|IQJc+y6hx?+C*H literal 0 HcmV?d00001 diff --git a/bin/src/packet/question.o b/bin/src/packet/question.o new file mode 100644 index 0000000000000000000000000000000000000000..834a5797574391d97a65768c85ca15e5ff9b7eb3 GIT binary patch literal 5176 zcmb`LU2IfE6vt<~1=dn`3yM~O^eUi5bm^8a0Rt_i_JUBbrGi0Rx9x6QX?JmVs|7+7 zmtZ!vff!6oG=>D<^+jkTK@?&&KInrHA2gB>6A`2sjln3^^S}3;?R3~{)OeCRAHVsZ zGqW>u=T7^4)Z?O{h}Cq49E^Q>;_d)ih-fuD*zBsOo@2+wA=HRy+T* zox2nSbGE~eD?-nwQ>4X<8psnFUF^OJM?0%i8lUVrE%cn>xP?4cPb z*&U@X+P=@n&W}vCTP=0zoWviQ++b6EMCzLLJjtAX^*EP~hpLM4;WCPU>CHr_YAwRw;5R&p+Ar=M z8yoZRpN#hH-t9M`eWhpn#hFf%JKsh6zxex~=-Rv89h!Ih$-nm>4q$w*J0ewB@BNo6 zX|_A%f&f3^R8QK=t+;V=@&VR?nD|Y_dM82WisYXuQ`5)fL zHnfM9P^w(fpc}H&Uf}l8UuN$=i(a?yIO8a2zK!wNgG;@JG`KgweUFAtTy_0VWXfrz z6G!E={MQk+H9xXxEA9AtOEuFzZfLIG*l4NNO;q2!rNvSkw^?e-wk;$eqlT8pNQBb7 z@O>H85|4HEB)hC<`s0~wPb#^>nwL>q(>>W6;ILoOn$YvFt*N15g;m|u+&15e)P`%r z5v#VQc2P}jO~eURN~uK;_B4r9iSnHW!{WevM*UV7E8m_LVtv$sn8yUhU^d$Lpz{p(Ok?h%u@B!Sg|&LVOA!#`W4>z8_lm| zCdS*!o#G_5a2z?MY0Q@!{C4Jx4L+N>fz{p2&7SXNKGkrzpLxjO?(UeRZZr5&*3UHf zO6Hcq>zL0qcq8-q247G05^X-6y+G_q)~_=3oy=Pe{xsF6YwIQRF+d!9)wF#CpqDmh zzY=?y9$~uAtE{KNI_B(6DjlPznEqW4KH|Z@^x)rk@GHbI{=+;TXa5t!ceB`dD)^nH z<_R|2gDW|s!W}BSpg_~B z#Bqr%R*7^xUTAh|hKtH1ofrv~rt@=L+TNc?#M4n1CS!eZrISo|DxD>dj#Rocnn=X$FmKNGgr8*7qocig`cD{40@b0!aoHh1IK+x_&Go_GtLDUJ9@keq90{$>iswf z$q*m+714*7oBBDL9`CH^7kcO$G(FBF(Qoq5cW8Q?p`uTD=yRI>W=(&{Lw`)u2Q~fM z9{Mwy9%rYF=Q9ue1x=6lQS_r8`Z<_*GR*TG^oV|e#_!blGL7SG7X2EH>-tAEjx%2L z?aYx)*Latv$9G=zd5zcF>t2BN}d*!o1SO1wPDN?sTI6nz?1@9Yz2W} zs^q>S{mSooO4IYwIRxKznCN9Z(!X%|KB{nLcV9NvPI)%%=G{_C$9rSpYmDt+>Z$^42AX9)IUodC`U@G&3@ppgt` zANrB~Df{Ri=0-OvY68;1cw4y@N^vhmOjG_({c(Rq%vySM6aQ`!?s{{$9Yxh)m`Q^M^jn`ForgVq)Lw_67Hk`O%G+qky(hsaXH7asT++ z9ftnVx7mM;7$i0HOfc?9&IM`XaD{oq{acu5kk2v)%8jOW4{_XU%-?UZzd0@$KZjGV zPysPb|IO_Gu?RUg{c)d%w2s>)JBrHznVdJ6KTN6k%eofp8-A6z^pVx@I^w;bl?q7)klfB_)h1B%_3kuU*>Hq)$ literal 0 HcmV?d00001 diff --git a/bin/src/packet/record.o b/bin/src/packet/record.o new file mode 100644 index 0000000000000000000000000000000000000000..986a54dc40bc9d534207a74ed676fde1ea351f8d GIT binary patch literal 12680 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 SwLgpt1JYmHx58B)|NjE+5Nv<| literal 0 HcmV?d00001 diff --git a/bin/src/server/addr.o b/bin/src/server/addr.o new file mode 100644 index 0000000000000000000000000000000000000000..6d2e1b042bd5a35ccb721ba78c5a9ba2c4a3bc0e GIT binary patch literal 6288 zcmd^DZ){sv6~A`g64PYwIU_K`Ci*lv;IPibDU_}elV4*uFRKgPns%L%%yI4K#%f{* z`z1{vBbBm_y}4#VVxJHaAc2q=+P;ux6>C#vA|POdY7!q1QYRslsjv>MRFzgJ=iGO0 za`UjozmHt$y?gKP{?57Qo_o%{&z?`F4)}dOCW?Wo*4;s~zXfIMbNQ)|#13zWjE`bgm}>e4K<2 z(~>}UXlO*JTFr|cJz_fVoxNj67Vh|_cJtkGdSh2Eq9>g-Zm83z3~lk3apcCpqtfpF-Q>1iS|EVSnoE%2XORF|f6XL_2n_yGEk5hby+obJ0gX3m(kWbaY19qy#^}{M( z8Ri3Ih7SZoDA;GN89EAa1rSv*f2w9EJa};9O~=ry^Gd2Vplj!^yo&q472(FAiv%Ad z``R14zwoecx>eGLY7*4}SB;@?HGyqvwz7@eH?MGS{EPj`X3K)=wAg zF}+Zn&Wsmw`eeCem$IdC-JYGaSm)T-RCN1mU+35q>+J3s8=G<8``ErAz(yGB@9W#A zNBTd1v`dfmM0=t!y{EfpcXv;Bj4@139Ui<)fWiFCw}Kct6pN4gA8@-&TwlH~J-(g*0f*MYf4g$oV&|VyPs`NsCyS$5^CH(yhGg!$U!wSpz6Q` ziT!FI*;-IdQ$2i;4;pFV`s^}I{-^kZ$P!3DnsMm*YjObxJ40~91jy+q^B`V(qs zp{ZZ(uIx}lNi}GwfrG97LFj-qbc|N+LzCo&P;NpE4ud}Q?I_`}HH;0qIQnOXaN#rb z^*O>C+4d5R|0lNLTz~M)g?n*}u!o@S`r#BgjQlb~_(upI1RQN$^vsRJ^$MD=u)o}?H`cTn?OUVn zTKFf{76`4od9RtFPvmkB?=-WI%OJGxCENq^T)9V@SLDotKtvqZhDGE}FSHTY5riUq zjeC!HH%A#0`7;Q8p@W8aH41O!A109J7PKqy)Z;(X0IxQ{7Xe58af%n7pMZV00sn`@ z*J&SlECYt}_3U|#_>;uvu?^U-;Hk&I(g6QG>Cu~@0fpxw)PIJjo}Qb4qH@z;sZ^BwrVXuw}5{<|JK8D62$ zEQ_Z4y7AS6uif~HG54xX7beq4@^tqw!qb`JtlWly;vN*>1Ej;fu3bIpbj8kOPo=YC zr_%XMVVsSZPEJ%#GHa$_v&nLyXs2a*rO2_on13oaN#pE9p_og1`mAEvC|;Vh8GI^i z8!ubg>3q2~!A_S8wk1netYXeCvFv!MvJK~enAy&5pIPdU7b><@O#c(YGTE#(Y0CpH zLQ_cs*;27+Wr=Eo=@X0~cO9JS;N_ek?<5?{DUzPOW90Gq);X!99BH?(}3;tUYjyWdq5S=GpKV&2v?=r#vfrR6aIDx+-;qts+N5xRElIQ)Igvv>wjJ0<=N377e(6APM4CiA`=|A>pb$mFA2e4YBk9=x0SlOFsq_0M^5 zyqB@uaH~ywbTX<#if4qxJ)QF4;@-`9aB;uRd2n%$;%^Nss2d+~U%ukO#eKQq!PjY@ z=DL)6&=k6gt3dt?yW!hT^# z9I$%wMY3OfzX>%$PSjr@d6D0O_f3+=vqdgKPSnR?P_$*<`G3=YV<6N54{g(?ie-}b z+9lR6h-aXI^LyntNdDWN0k8a*LAGA}jJiM6*i~8_#t;63B;-Z>)SDY<>^b@)BtYi~ o-fg%}uRPMcu>%lWL;)yod7SI%@;kqte7wVzf8MP&-(LBD07IZ(YybcN literal 0 HcmV?d00001 diff --git a/bin/src/server/binding.o b/bin/src/server/binding.o new file mode 100644 index 0000000000000000000000000000000000000000..1ff5f6e2d31f66e428999c65cc44c732b7ca20c5 GIT binary patch literal 7440 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 Yq1-VYo=fK%9}s_FK5eV1{yNA18#wl6h5!Hn literal 0 HcmV?d00001 diff --git a/bin/src/server/resolver.o b/bin/src/server/resolver.o new file mode 100644 index 0000000000000000000000000000000000000000..40fa4383bb3c46a32896085b33c97e8b46c6cb41 GIT binary patch literal 4664 zcmbuBe{3699l+luwrjS|=Y&u^4d{v8CI>pt4w@8gKz)hhzO=_+tlf&BSgw6eqS!v~ ze1Vn>w#qKr;d+bEB>q6!`Um_m38ejjk|6NM4H7)*6&JEPXtn`~GDq0Sn0 zGHUoTdZz84sZ027Tv5(E0F9Dt{)CZMQ#}oRd1#Lc+EG`#aZb@8QW7HRVA%l$z5OHg z@9?JWvYIT(yEDwkDc37Fc^P$_Te@={TtClzVs3v1ERUXIF67bY)z_fUV(8BMXTUv6 z920VB>q#}HJ8$XEdrYa>S(sSMsJjV^Mj2yGoy!_;|$>4J-sFWu^PaUm5p>byanvlz`?7L0KN6u>BkA)=7c z=977U*e6S{^N`wT=701FN%Z)|-QC zIquRnTdOkxu!7uD9Y!|}gXw0yUG^|A)>_gY$MWNzW*fS3=FeJenn$=K?~AeGKew=(e?I-aSEup*zjagF|%g_|n-jWp zolms&&k@#C0gjZM1H-*I<6fNje;Ehn|G_vTu5%U#Cw4FN7k5FN5v(MePueSGlEs0b z=eN!WhA#kpozExvfjG=3^RBgb-j91Wt~Jg}5M>vu2$E#4_rsai zYJ@}oNCXen^r`MtKut(V;jsntE_gA_6!u#yNocui;oVCf2 zgo{LbSIUA+8|MxS*9c1lJrSbWwo$3sbJZE8Y?|{6HN~tdrF^-3G+&rkiq*PuPaXBL z`MI)DRBThRj3*Y1y1hl|L8i5Da`HhXzVG2fqe^NlF_uUvW6814B*&5|Lhx`Y@C4xj z4KhHa4l=xyP$aMaA-79LytnkNFB9olRJv>Dj_?vF9|Zm}Z|njb6*3WtJ~uECi9I_w z5mDNKsYv`(P>UqL8`2`Vz_$K0^yeoy-vD{HyWRL;uNs@9JD~}+>H#)q=zW+GtmamU zv2KvWw_@^f=;ODdU-kglj_>v1kNEJzK77W9SAF=mefal$_;Wt|MIZjM5C4@9f7ORy z^x=54wyWp6K70U{b{N+8HQaL`Z12Ha2ELu2kNR+88FjP#4Z}(lNZrU=g;|o&CzJS- zA_dFH+eU7#mdh857Vp;0!n|R-sAkPo?VL!;=1iqN!*#twPbzRTm<0&N?tokkE(yaX zCCe~!Tm?I11{`}C6?4@(>n~IpF&JPb%*mWtb=C9LqFKr1U2mS}T+Xnps+ohJc^ftB zwgtqrNG?~mA$qPbJD)4Tcr*#|>bQ7%@l|t<})bop2ToAl-Lh$?>{;iim*^B*g^GFVw@xjW~E|O zL8WTiMgsmi+{ezn*Pp2_Bx;sfGc5Z!n4&{tHdnIp6~jyD|9mN6k4Fjb3{lcv=lfor z_*nm)eHRSiTBNyx_wL|j07AWeg?9kP!Mg?p_W;Vh@F4fp5Ha~(UtG?;W6!$;zwhYt zf3=6dZY=&-&!gM;gBSlmALse=Jkl_Z?PQpzP?f84zv*+Xdy|;fsya8^< z^}YfPyw}COieqWdzCSOXKkA@70T24@x378j9T*d(-@Xik+pT{X4<`tZkL!>37Psf? zzg=u*hm!)Sd5Ph-0#oX@N1y#`4~U$`0gzAh6|ApI@LRB*{kWI^BJ;BO({KMDZFBGN literal 0 HcmV?d00001 diff --git a/bin/src/server/server.o b/bin/src/server/server.o new file mode 100644 index 0000000000000000000000000000000000000000..44e1cd813e767ce68e3aec8c8d0e20412e6dda71 GIT binary patch literal 5360 zcmbtXU2GIp6u#S*QUPaI1T3O5ja#izmu~sTXtuP{L5dRE1|pEnc6YYju-#o}W}y`m z(H4@mHt=8!1|Nu;V0?fFjTjSUjXzI57~+E%BVveBA)pXnL{iVWb5G|m>G0x7=Kg%= zJLjJJGxyBA{B-w*novlPgv3+A>k%qM>s?+uA)5&i7Md_dFE^Z?1HeTD$DhRV^Dq?t zzA^e$!z606*;sh#7`8-ssc7%*Gb%TGj8`sK0mvBRb1zlY*emF$75CJrS8gaM&+F9hR2QrNp=oY!w1kdd}={7UOim{O=BV-O&Aj^p{W9U zBf1~jM&(L(<#%ZXP0yRN(u3UrNf)1T*{-kCb>wg|IW^^~#@9#&jxN<|Sflbqyec)9 z-c^uiP2MLLgBNdTcXE?;0Me56g-=~olj^DbVN|Y@d)Nmxj~^>nC`wp!W1?qX<;srJ zxT(AR8<0KRV^nUy9!A*8cSajjq?K7QEspWQ};^rx;F%E%cj7QxAQeF-RDzf9t8HkrYfOADSZV;{e zXEGWUtalcSiGA}fI^Hyx29DPbP_QG5>*cO9SnZJODK?~Xc{8IsMLm^Hn)F0X^mtpWEf&|?THBVlwzbC9#PA&G@ZgCCny3+>DqEt1n3r0*39Z$T&PwaDu=?ONl(+D=U$t?SZ$2}J?kt~ec7w`-Au zHJh}?(b_GV-lsKoX^{=e*M7xoMqj`it?APAnvdsbk#?=2eXfk*J;k{jYsuLR*0&dQ zS110Onu%3A&&`&}s9#8T7{jo+ zP4??WgSSKy*`@GdS$jpl!lz#_r5b=b;?bsC#Q@w1zz+uCZwBB;1MqhO@RI>}H30uM z0RJffKOcZ!3&3vxJ|E6iNv*%T-$KlW{!Ht+2yo9e^8vqyIlK zqk+hG7V6#rzOZF_h^2*{8z`jm$-z`1lQ%6<&Xk0cE-8I7FYk2`>+Wd7q7{qfSj4ed zfyEju)?%?5i@4;h!sbd*Dm&@HlqGiO@_FHAucVhn1m-N>hupDS3 z$X%qe$_22uN9;XGcXhh_5T0_=KzUEB!BI{8tqp{VZbmA%@?>@DmD0|9Hof{|^<8 zei|A6HN){vCjNH}$GH%W?;Q&ISppB?7Z3#Te}du7 zjQ=U~gTK<`NB)gK-+w;8XZ-n$f0p^@^ZJ|N4>NuY+9>Fs-&ZHud1wM1#WNM)M+XiH zsue}{*T~Yt6RN+{hf^LN^Wl_l-}m8^Cq>L28FEtnP&<}e4^qoA^Qo9)4m%>2NjWJI z>$hzYvx?Y3dOQY6kar;yri(*EW&tb;MaPW6pTOfXVW|E$(Rq3hvMg@v@H5am@dOIko&3V82C#sZw?jYc^;o$@D#1z6ZcztqSmAhnFprWwou8S;Mw1_Ce6q; k-yU - - - - - Wrapper - Records - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/public/fonts/helvetica-bold.ttf b/public/fonts/helvetica-bold.ttf deleted file mode 100644 index 332b66ca7e870b2101567d350a02920262ae7198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308628 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�Iv>Y-=Ib@D<$Q%8;w40R@4U+LB`gm|h<>rv4 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

-XhL))Sv<*yi z5cdF4G8RFijlB<19F&kGXA&)i^wo6@paa5cfMZh;#$9DVWutG%{)S{8>Mv9p7iU6N z_q?3$1z82iT9o4}vm=~_$z*Z$lR%ol*aaO5B9h{yge5jnZxAACuMsA)q`tJ@BTCu% zfh`x_bsxb=3?Y>zjmk9;B$b3OIoAJA2&2occ<1m-&v5t%&0XtJ^(Of0rU420hCeP1 za<~gJIXGR5X$H^5v>1R;&tTIOwR*%yke|$!|*OTtc@YO)@rwECdS6~2nUfa;5n&c;ZQg1rH?Ct>%8&IA4 zqTYh~1U4B{stp3|IX-a9yeR^bQ<*V@<#NJv?B?+KWs(x^@jrW9a%mnbQ0c_qJ~qx-li}Qm4pdW;pjer#Cq#8)int<>pyBBo0L> zW`<)ee3~&US}_Zuld*Fgc z>Uu;gS5924KLxM&WBP{)>Entw)()?p@!UOk*PV6vnq8L;JCDxh|J5-7xJ>e*rAb`~ z&w-&*x<7Sj@2Z0QY=lgU(xN4Qe7**r#2QR#}u26N6VVndeRHJ-KgYL7^u*Ys}1} zOTQjnSCm~K|620YrmK2;*h4m-w{}VG*uOq}=dj$|^UsN~q#S=EzxTrXSD)LR{mUMc zS(Fl!5SI`$VzkBL88WZ0Jw7`6`P-lFlUX{%fBN9tUb^*WU+%JjBa3VA>^-kfR&vF{ zIiE#G=j0U4YUsaZY41fnv);P`6m~-Ex5^uk$9hQL>_%=V?&nX}Truuh7^GDYLo1>y zS%K(*?c1s%(!R0XK|d^(F!_amTc=VhB+Z;kEiT(Yw(e|j7BVmpf}3mOMB+~#*RO}v zBgccQt00@83W=ndsH&{4DTYfS@i7!~RWQFiDz*@u$@yRZ^wFO$Uewt5{(WCP@u2g< zIV;axykg<1v#-8!=H(mRtZwV`_ctxNJ~RKE`D-_Qbk@v<(Sye|Y?yY|lu7eButloJ z{Jv?-Z+Ga#NM9u87qbhBLh}oQk`?(6pf5nYM4DgD%3yx+E%lgW5e`wz@5$E+1xG}x zg;VN_Zooto>!VF; z=bw|GdHtfM`=8&6*}?wp-}@V#grQxM~G}R<)>aZbPt?*U4AQ+ooKkm9bt}IT$`=| z{c8L4sxB`rDa!Zd<{&$!y&c8krZEv|*jND5x4DCr3MXIv+LNtGh26WG3-w?}%ebUC zZG1haTZ*j%a+MJu9c2wIXPcEC*}X?h73@66oQkEKI z08s&MfC`rMDIG0iSEWJ=)>SFKG?ej%cLvin-P55yIfLxCCpi+kCD*!Ot8f9@L3YW| zcK6}VNXW(AoCJR%ccv^3hL8Tj^>Jv>RTtfR)>1L0$%!{!yOq685GdT~1CkcvjKr;2 zTv@h6d2eiT6dN%zcoJCp#8+Nr@?#tcRh^z>mCYlQmjjI_&PbX*UQSlMm^%n|$h84B z3_jPGK9UdM3an_0phvV(tHWa3>n~@72GmI$Jr-T zy<~JVpb8e&IH1{)<4#YFo{+V(nerIwk4%^4du2B9(I(1c*z~}1zP^ZuvJr=~06v%3 z`Qr)@Ei@Z9PZGTQO`B3_@YsULqv$lU{+p!IX5;KFMsJ+pR8o@QW-(5>Q3Y@dRko=S zRYMiv(bu!EqO7o2&t5eY$HbQaWjm=+tzASg!BSF~YAy@&wM{m%H>n%XPj#uC$1$1N zv&djjn~Y#4J?~Y|P@S>0E#o>0Wzs*hdMM{s^}9tplX;gNdfJ#fs!?g$jw~xiQ;!O9gSo%%A_;&C&Ivr+wAaDKLnBoRcN|3O3gz2of5qfW|EIp_@yxO-m+xuTC(1eFJ-zRl zdb_+mFk@xSlx=Uza7U)`UJBsMcUaCG=`ToqL-0n3t#qCRR1{VR9B&}7u`m{3o{da7 z(5@LcFE>B#q49t466IJ3l~QB{9_l`-5{{CIIgsH1FNi}t z9s@-WqDcB9vQt~=r;sk`lk>~u$Z3$p5z)?o=r;RvF(HBR@;!V)0xu}VhU$pV3+WIr zFXhtPq;a&sZCfQHOcYTNnwx4&6+k*R@Uk$2L(<2^&$lVZfEz3TPi2gw5f#NRlaMlj zZu7|6h}8<_nDY5`UblUx)ByrMMFEE1wtiTr5c}fG%ZiI~2;hKeEF(t*p4h5geAFB1xC+CecWbi#`HJ1zlDKMz(TwiVqv_(R(&JjD;vqj=jj+yiNk zc$&qqTu1Q;sNJ0Fq8vvantzevC{wOw>^0l@w#GB>jq2VzEnl^*n4+B5vcJ2hyA6$d zTU+H+_>RR(!$l{l-FnnMdGF)0{CHsG;}|~rPQ&`VgZ0T`DPrHpWD)Gc8IPy~ z+_FNyT8&>}S)rqmfmr_t7cE1+gPLAJmL8(ySVJ==EjfwiVDU+LOe$nev36RPG}~nV z6lE=t)hs*#t5HV+N71%f$UC1(@lOR`ys|I-i$|$peAQzO9%Tz&rF4T@nbLiZ&L+X}e zgT>*-UD(=c$x(+%dD7-R2uBx6gp>qWI2o_V>?So}JBgEGY;NNvX4|l5p@fMT?TMwu z4hPAFxoQfEDC0$OZl)Awtg-Y2bEimCsRKsURW<@DXMdC{$3?DKv~0OX!c4Hsp>N|c zuX)}v^D?#M?DSVoJ$v10J#+frea5?|73^O;X3@=iyX7yRe}A)k>)4!r19FB;CBS5Zm2=5 zb!=HNeC}w$T?tXR@A@--*O`n$h-CQesFSCZNcAJeLxCx%G@K5qr zwDN(C@_xSZfftZED{RhMwsK}0J|%DK<9Kec0%@}!8H6-T0kiRGA`Uwf-_MAw1M?Hl zwds78Yz@#SIBe!DWpe~IKG$O5a*DfylKxz%#-XRsqy_CtW17qsF-_5xNDW3o776$$ zoR9gvAV^n;yMo}tRp(|tw1V@?)Q7Z@^%EC-KCWjdXP9B7GqN~p+I3TVF#Z`2#GZ*rxp{81?o4)M%lZX1LELCzq`@+Su5u2Pr*Ddd)C`FUC|;f`0hoCFBvP=GJ$^S_Xhc|T zM#LDPt%h&pIHacg@+q~Xq)A151@k?aG?5ru6hr5Gah|+wQ*lXFF;kvA!+X$^9G-uRWqv#Qi9e6( z8zV1K10RpNXV;*z*ua*kh}>KHw;4BFbjIcD^o$i(o__A1XzasV-?COCUs4{>leLiK z5joa|yjHlY3}y?uMci+yvVgosWYs25B{3c;_M&m4xZ&1Jszm~6k;xU}M%&UTfVYYU zxA0IkASL}-J|9fRy(-InCBBlL1<-$WOK~SUVIzQ6CCr)VC>>9e#|+I`Trri0(UXio;P zrgDgpAT%1l_S%96>B4Axqo7R}@ZmsgOSnHBk+wPA3T4A?z;rmSz+_s=`;Rd2eHMeSp; zTW*lmyYKvQpMKrEnLF>aEL!p~TkdHYrfz8ZiCJ#HQ)Z*}X8F$B^(h1 z4=-6nmfx$uKW_vd;*f4M@TGQ~HiZpBs@?&>m-63$ItCp!@TCs$N`i~8r=u83?wllE z5Nl$d9pTDCw>2fE0tKVwC4$D#SxVs#$6^^cM`F~H8RFhd-3?4B9b~W~V%r!xFGq#E zF&s+T><)oQWfH=TZ{mF6=2Q44aEheY41E)^lJre@(f*r=6wyoYgl%88`&RC&^KX5S z@-hD&+>3p&MwwERKR&?*ZZRGr4nCAC-f1KVB_s?9=Gt(Qgmnm6(!uu9I%EY)q5&jd zAu|Y8Gpw8+6i`**?kKB^XnlC0(0gP9bph||E2FGOCUeO7sGwSs^TCjbmA--t?lyEn z5c%88f`TxcQ95Xh0soa3wESHk%>`d3U9G<&Z^FIjkYklTY`y1$?Y=9+=~3%aZWHE#uRgR87V(av@*0LS4V6vwIsB=TF$_fL+0RP>n=Sh z#uo32K^{}Q!Oe_}hZtWx{!)TZ6?2SU@KBa@}OTb`&S#vvpj17Hu1ZZVfiiLZyGmzzyLr!ZL!&3TkVQn8<{`#{loH* z35#m;ll2$bH#tKdpS>ops(#Rhewh{VDRDjf?;4Zi(n+L`{J!b_C^yu$Fs~{mmjP~w zl8P&A8r_0?eR;lNa{BhWgD=q(a_dduWxyx-9g^hBO-_nKhzf9cHjfn+G>4(i_cH8B z_@NGfR8mus1kw@@Is@K@bJrd=`lq_0`c?Dw$%o&cnm)I7al=|=G2p~DxOZ=jnvN`+*pkC8b&U3 zaL5RSVIiAM4cTe|Q*b%i&0`J~`cm@a^D9ysJ=xJ7=jbsn_vo7**R3>TVqrl{Wr8;H zX}cD8x5F`Q+TQ~c^&1|0EH3K4*n}~oUr|dsc<>Db|-8W$XUT_+!N+hcn5w}kx(6(v;06ckR(DD4)P-nYlgV@5kY(b=BH zlnN|yim&jH@@(Jh^=``x3T)PCnr+V97uf0x%FFFhQ{nZ2al2c;M_k3Jz-UkNN5z3A zAO=?Ogrz{p;86l0ywM&-DhLdgD^IiNqZfz02Zs{$4J)6gJsymz)`>-ArA%^&v+5$8vv3DEcG4S`_S- zh`bT%F;yKB>b}zmj_pD=@<@%xw}rY_m!o^^&(hY<)Z?JFDd5z<-5t;D+%`?hf$ro) z6BUi=v>Ptt7=_(#X#kAOaC;(rg14h$D8LggG(bz7!hM`cD|5o4NxUc>o)Z?OR^d+- zK15JGtKB*UM@S^liWiVzShXY%1S))Dis6;+h~XYT;HeC^^ze+BE-qNXG2M|^`rtnH zWAii51k+)@Ub_CtA-Q^-yu68(>95j%O@Zr;M3^j9UorcE#@oi~za!oo7O-z?tLjrr zVcYCHCnn~!>ztUR!Vk}h362nsQ$)EXZ#E!>JQ)bgC*Uw3>M7T*yO7o{EoM2!>Bi#?rq+M;bOc|t*y%c z;H+Du-oZFav>36R%>Zj?oDp)FM{$I)WHh><$Gj6B^O~LEvSCV!{&)SY=hzKTvumL= zZrQ4q9Dj}aa3D|Uo#-P*8o1XEO-sm<5ii&`uycyhPdxuwmKO6jbjQVDoH0@ih4iqv z3bknF#lNf~4Lz#w|LwIGUw^-u)$Bj|#(q}Cl+i8C%J7!Qp`v&O$#~H_^^eV`yQ2pPtECt^CUt+0X~mV7Cc!ZD3VWB4gLkg(wU?wY4HRsLpTgweI~c{W|EEwHNTU>GCt{=?c!r52J{+@D!ivEjCjiR?(rJ;;=y0UW z8Zk~;(__NM*$2GttI&0JlS;5bF%B?A6s8S>oe$b*f=G;jU2*|}($1Y+I&=Dq`TkBhthX*#>G~72U zOrsreuW(5V>Rma@9n`y;%GoxB0BR?3AI%!dS@S*UvI2anK_WT5+v{-Vc=K{eZ;>n# zcJttEPEVGLd?_RcdG9>HcT+E&3w|AGzTvb}qa868(p7KG#3_jU_SbH-XKs zy{3NijDAGld$d*hv zEpUS`iI$82;}FRpP&0KZ%ptf=2o}TXK=3&|5z%W%(X&_B^|9z+K#7Aw6m*C8uEXr} z!-w_s!)mEMkKK0s2>Vs1SUOBvr>{_c$Nd!zY2J>A+c>CDJdN5xW_etqT*fsFbRoow z11AVfB-VR8FG9LaH=Y^4M!X@-CN4V?EW8d1*i*r3089G)5xx8iwoM=V1v~AgM=*$q zdT+K-zCG~yHEffh-^zN7OOr~(QAj{{xJ}W?1oKJ-?*kS^oHcr_@)UsBXcjPnQbWI)5B;%WH|a^uaH493Wk$UfL_TVMWXZgcBjw-f(IG zM$3#@9dm-B@cuE2l847hw#wP{E(Q?RDreWbC>l0aascyDQI$T6e~PXKwh-zfKP+r-Q|zU^TO{2#wr2YN}`=f;$<+>X%Otld3=7*=;Wze z04mxY3ToOjU)Wk(uAx|_zCs?!bSD5s$MPbAmuB@5cGlys-@jwdP1nxgQAm&5?kyfvE+gLh#nIF~& z9u1Y0eSmB>hLb}ZE`w}f70SJzWAI;pVU5oqw&J^Huu#$DMNrS++&iuYKSe}Bf!(qZqlQnRO2(xQTd;AbO20G3o#V|+cW0+$ z)5&wVqBty;MC&BPcJqXJzA2_N1+F?s*YX?WHCPn5TE3sKW8mVXo8w$2owK{N(a8w?0BZqV?7umg~9 zEmVb)V!l-d;T4v4)DDtHI;s?W7!_&>t@Q&ASk6HQ6*)$=`JICtr70L9*Dn}h54S+u{^z_^nfj`#^EHXxMfZ7 zNOI?1eZjr@3u))yrhoB8SjIs8CG)h>IcenOX=cS1d>qPfbcKuuIDoE@=;#jG@z-|TL^Sw@Xv=i$JI#(fFdelhA|U(SrKP2#N=J!Mu>7Ew*Z=1E3y1bNZPmd+3*YS+f*`0X%Iokq62I^V8i4kib5pzCSpfvngy#s@W3eSE*|zA z%L#jxkvzk&DwhZAVxL-JygG@R*wbc*MkRCs`OB_O53e288H7m(CF`mxhvenTBb!(Z z5Qfk$c3~3(3uvwrfd{G;p6IEf8bLbc1#Rp@5yrC2IH$|QS7*c?Uw6^Gt< z7!&r;IQxY-irhINc`$rLz>STEZBwyY!x5da^-^rCBi6(!R=24VQxBSrcsrtcbd=ml zZGXR$u4o-^G=rUD_KpQg>f5`#6hyh8M=p#*4u>1QBREnf43sovL1-VjjSwE5A2m}! zoJ9EewusQg^UIVF;_p84LGy;3((W}NfDy>haNHv~sVTR@O|8=OThq4AoB(`e%T56h z#W%>()vfQS=L6f5BUMXJ`{N+)DplZRvJJVF6yqiES|+P2x%^rbD?kw(U=Qyi1I}ll zC^+vQ3gq5VHLypWSA!m{ZAS(h8eT_0<9T?2_}tvw>fGv_L?U7o$sIK8gcQu%mT>tT zS2w5i>Wo@tBsH`Aa5~j50~q?J{iPk!r>vYSSwv#HylVZBm}khyOEAwiu#D#tx=@9M z84+zkhiHxo{J@ghFz6UJ{X*jgo#(2hGvTg`&+kzTDkn5x+S$ zH8wTHos{TuA|0P$4vKLVrpaXKP{<^tg#Wy5&4sHkSiku3WtU#KeD8VTzsMKrQP5Jw zvY!I$*>}22zEJVEeS%p90#5x{+YFbGc&|3}D%5na0fh`YX z#O=s2(X{9CByyp(a2Oy^msY?T4DnWQHnbf@)*f;!%xPO1)2G2t-K-_bc3q6K(`XXk z8RY_0oE*r=T}seKxQQ7l3(0LF=x!je_P%m~j6JZto6=)VGTEpB!^(BMow&~Wai@VG04wDvJT0(PH z?n?BPkt0F`ppe4wh9alAliN%u=~dM4#Uu_W=RTd7yogDa<>XY;?~Wyn%_28XF@?9b znd0N4M<+PR?GAG|NIuGb)AmEhG8lfU1cntvFA?vc5mGqTiPQBM0t2;wOz9kgj;J9b zAK{HTs4=Ts;lT6q-814-hV+`&sO{Ik&rish&~vQ*0Gm*o)^p5a{c|y%fqXn4V$a{a zn@3KiA;1bfpM^eibrT*GLFt&QJ?r}Xe9C%)6-6q*(}B;_hyx}4j7BfZpTkIJv9KZ3=`@p}aC17rl}b)-ea znh>iLf}@1<9A}-m;EaV!8*iPlWYLUU)F1UmcAq|--5dCd-J#Esu}7)>Xr{BD(SC|l z;P(NCBI5~K9mH`Zz=`9Rv0(AYfnR1L3}gwTL|FinkVYpgI&p=IZJg&CSmrs+f0`>P zJ|)SP>b5D}tljs}QpM|Hg_jSVrtJ$nB@e_1#OLiY0X3IVj2vGYHvSSz}FaCNFvW^cC6?`=Vi%XzS6#tM&sXg1oXyGh2uK z8!HtxQ*%Z(X|TXygfI9TQMz5c18^h=6J(}Ieo(Z(=q%M~Uo_N8?XTMfZna(eEZ9B< zJszF#xgjjKkZUm4yAZ7sA5aVzLJVJg2U~a6qPLgGtapvl9J_1X;iKqc=psURU!(40 z(=3e`zYm-haV+G6K=f!VTIUXJk}@1WQo5%^heoMtgf6~{M^L_|vaYUj(%QA^zWTb# z%DVcslP0aDahvVNNxA-Pz$pe$%bci&2p(;T;fan!ZhYm|?TRFB%&tgc)6nK5YFph$ zO^U|R#%VZLG0@kiOZi|gL9x&%DPKZR6Oe$;awH|S&yiHkD(0^0IjA&!YIg4)&gjHG zL+Z1f%G5R5!R1q`2KkEz9z#^>-adyb%Ud?0fA+w$)?+R(j3goq)vf zaYUdw#kfi~WPDrYslZh?9@VlhyCR%~^KAc+{iNm75gHl5*qZk$N`!D6m(x|D&;a z_p~oC=5}S7R#n8RG#!YcvO#D8T2Ye@2HR1%6vpgg6zJag2+>Y~dO*Hd z`v~3E>=wfrwIdg#hg=X1q#q_7s^G9u1`&qlK#`cu#df`X@0C~H^OE+F{_)dKGY{q_ z)ON{kSXvqJnACOz9ZT~geg$5VkHj2cZNee+<(`YJVKiOtwzhswO(jtFMT(nF+Lb%~fuZ>hY6k`am z1#y?abh1(MWcKu> zD*w_pubJAu+Zr=!3%*r+>H7^Ie9-Xz`}Ca?*V}U+(`BfEZ*@>QR z<(0F~>{C3awC@04Zgo`j`Z#Os@?ql#Rt}^VTYpoJ$h*KFr%R8CfIGOzh^)vIOH<%b zVz`c)0DX{cjCVYZj1g>8yeAnWgLDdu(XOmQbO&kT(PX$TQ4}ies1P?A@It`$(rM+5 zKxU9N9*xIrjD!mO+3Q7^Zx`md5O`$nA;vcetdzwNoDl9?SYFr_>BYe~Imtu1Rh85R z4&N@@lFvA5p-&k{vo!KldVzuC^^9Jy8H=gDHIUYLh?Z55q*pHQAj;*WNd@QpNWpj6v5taRW_Giz$r-_;>Y@YOx$+lsk@_C?wq=)< z^Px5F8n@ML^;vy2eQFOp)$b|%d!Y7!dVB3tPvPIb2M+Xw$3NAz%MLkL{R8{5$X`It z#EA|B)q{3s5FG}RDN$-H{^BN9CJlGGy*U7Ex)cJBBdbew4H+|&-K4@#^8RsaLR7RP z#o}~VxnrX2_DgP`ePp_QuLSDReJn))c+9qsB}BmW1R}0Hl(pp zdpzJleUJPcdtYq@9qr|>f|LWrtG0lAA#kSy%uP}XZ8V6hM3KnMCBd6oLiu7?o{GG< z6%3EIFl#tB&~|J{&-1NTo!JfLqcanGj~L?Vvvm6T)gCrcc6A?9QJJ0S>pRC&dDgPk z^Hk;1qLiLJi@eV0IHw~i*FSpZ@S@7@sa{`}Hz_76E+sj;Zp4Bm<7f^n(4qaH{($v^ zycSJ3Ta!(fr7^Ss96Kw?Ly-`d_MriJgu=Z|wz3cON+C@=I1css8ZflQI&v ze}DKebE4hVT68c~gLqZ0p;EOQ(5+RM@9b;ArCHsU8izoX; zQZghalg|j;f?f(X9|P(Gb7u5um1c@QNiz*j0V+KTgau^~hf0fkKKxx=@EuoX^D0zY z9*>GVzb3!Vgyja;ndrTO_b;FEkn+i9R!2klKR5~{hu!Hw~qocfT^p9PBI^d`OAlEKmDYdprrzy?yx!M7z#d0$rYmOd` z>j6k9p_@RPgRo#H)+wM`gifJNJDuw|awByd4M7zL^eTE5*qQ#M4iP#ScN-nd{e}t# zbKI_MENi2KIc}(6WNEd&T26(B5b=x41m4Ka{dx&Ekpvonqd<9&9GrpThlf9tl*yrD zBrBwK!D?bJJ5Pn(9MOi|)L-g=-6VcsJbP6kxjzBo2<~)ZFz2*U6QGO-YgQqTl|SZX zt)!JDjt9bKkSl_$X)-@xeHi_>>Ech`W^Z5g*}L*s;(eGGjkjy312)QR$6%slyTL>$ zD-0%z_EsyRQOSRnz5~w+q#*@~OoC?3yu~3=fJZg%3u0PR;gf-{3*#rl3ecitv@d{- z4@8(DRAr0zg0%%k0+ttaX7Hwl_!7>R=61=JuI`F0eW(MjRF*ztx3Xs3jS47fji8Pc z9th`hB2mGhkkj@dG0Y}kN`ekawV%C)KiYw#fz3zxIekjGmVL|b-Ez@#0*)AN((ra8 zA5p8OtBi*v*QZ$VdlR(-bvj%Nr4HJ|Q)-W2j$E-u!dU20SbL15U=RCt;(M$ZJsn`yhY8ql0@%$YT|qP>vFlC(s{f1 zc4{|x)-B;$#P)PL|@X9Fm!ND2;MBGp8j>N@r^zCX|JMVwW9ArXE* zK$=Kbf}g^4i4G?;i8Zb*{^OyQ4}F2MEiLK+ed8(WH}#DX`pvL5 zPF>%sZ;a5lw%m&G{DATN$NFtOx2=A=Wr2F6H3#SL|2jE5@LN{|uM;_(wOpaet(Goz z>*Rsbaz#kF&RXW9PTq;@%r_VpqAe}gsE1nR|BB8^;10udRxSVPT4_c72NtSt={ee; zLED4+cN~%+N$*T=MW(~RLZP@qJ95jjXy-6*hwCj!8-qxX)D(`OutJ_dZ;|B9MWcG$ z{{8wM-tdtl7++sa*2e>>o-Wn-qY-(DxncB>NHI<>kIA@(BzYFjJrn?Rx&g6<{LjOP zkv!Js`PAmLoNTyQa!rlZN1!j^qa7#5GcRRFugnWPAK%@blCLHgCRR-H*kfZdEArGS zeFr9LKSbFrV-?j?5?hdxSdg1;>p9v|o9*=Q@BdZZr{DD7*4+i3Z^KM=rn{3{maF?) z)Bg*4BYjvqy-^t53Gw}>Wc$){+uFVYo7J^}KeSV^eF2;24Qw`yUo_`|0(GrEm$zXh zYgR{lE^H5mb0gFi+0p_9^XI=Vnq)PwC3QTHw1Y+17s!-w)$4!(4e~jh{R9gdc-3S< z)%`&h6z%i#Zn+k!=0s_d7_*xUJMeHNDUB4Lfa4k3>TLSa3_@p?X{)$~k{f7MhoQW- zVt2PyULz`(w>>fV6o)KaiM{;@z7pem9`xvawDuR_)8-T!bFNjTcxVEpM!s8Z-vDF= z{2Bq>+P)EW$VIsA8&QY6b=tn6I_(~E92<17oD~Ub>&ZPt_^1jPr(3_ZE#*_64_DWN zu1r%7>Sd>j^U%vW!+D^+X0&(eI1ga>!*CvfX&nPSXuJ{a|C=}uy{r?QN89#I3ktD( z+@{0T^Nx3r#C!5rZ|e+m2nZ|n<=rZD@*}Di16pH7^o!8*e3S|{J zP=%s6I5A=PcQX1HWeD3rG9anE5GNHc1#pr|Aw=!&j-f<)i3ugrSBIH-@y&k?JfOeS zx&wQJuuo`s5z#`D@VG%yhVTa&4`T{bFmge!DsT(!fFW(+EO=r4V5_A|e1#U|g#oa@9~M}qC+L~bn#M|Ae-`57 zVZUGkNy}s2UvPGlz`>OKVN- z%4nAuK|(YVCKahUU5S*KB#2K(+sSS{Q{Yb?fQQH&BCdH_5$g_Ler#Ggg=Bi}-|Oyohv zK2&66)Yy~j%gH9_w5P%f<66)swZ>qla82_Vl7U@wW@Z!*o3{Fbs@_@E-n^uIPi|Ue zRnKH^ig%rT{HW1O<86uK<1Eq9Ni|s|HhVq>!~#xzu)YRA{pYrIed$Ts)&raM+Q1*D zj;+#&F$SYe;3^t>%Sip1*1@emfH>8OJ0?|Z_gPRUL8~){v`Tcz09yhAOz)({?O(Og zA6ZG&1`>CmF0idG9ttez+$45acRIp!A8cQ zIN~N#`~{n-hGOb)>;>X7lfsIKcifE#q1`*L3Z|0G9NAJftoz<1FXFmUa$0WSuM8$& zGXNn~9P0pw<>Ma+PBSBc&5z_clhYeGP~>!CJhS?!YLEeCS?+-Z8sT$$EBK-x{u7&u zDO&|?Dy${cW(WsKb{YsnAh{f!$+?@(agdrY+?skKuuU8WiM?=*er2nS^+}NCij&zH zqQ+PXgRLj+KEI?XKA*p{I&B&I-~yO1oc2--pI#G&!^d|8#&-+G=Qm=l(9MAFp2qKN z4k|RdM|4FDir*PvEM%|#!0EA#ET37o2uGL}Bb)f(Mx9E0k3=&Qp~rS!d_`w(7jT;>w@A#5ydj3yv;{5ph9r_Gx-w;{qsa%)P< z$U1p`o&JnrPmv*myaO5JQ>=xRP4)_@M|4gsb7Qoti=Wzz6dlt8EE5Z;QUw|+zKUAr%C~=)kshkUANGxipwno!aZY>ECOg-slDdjprnWe~D5zv+=Nr#;-1U%g~y zuk-}ANWXGOW^L`Rv(MgDTbt>JBM-*?in>yN+OiO`kAWd$VHmQOSHeJKmf}bd84HY4 zzS8?y?gdS->`Jo24+1)1a&xQ^;f*P_D8)9TunD9D-jta*y?ks*F+yTQCCt7!&*hEN zl7`i1FYlchJJ(j^O|LDf>NX^K_^PCZS}b6G1d(l-ucjON|C6C#bXFtjmjE;T@3TAo z|3@bnp=0|m>%f$j>(o81l14spRw2KW#yS}%iH;j`FYvr1uwI82x=1xt$5P#rrisJ)%nyRPh=in!YG??eR zMyMDlA|PRr9wB7YrYJNdS3$LaV=rvlWLzOhi9u3o_GXjJ?x}ECYRUootG8qx&Jq12_;;Xu#_3X1Ui&k zt_Zwt=q^s?Oa^%hZr3B*-U}<&;39>sL9f;4a#<>5-@>99b^*>-c4^-tp(@Pc0NIKg z9QeAF>CfoXAYc9Wba)yj#9O6LtNVl`E1)!5&QULE?PqaIUTLB~*_8m1Hyeu&qVIIb zvfqo9H8Asl+=Ev|3U``5j#S~Q-}aB`>fW2<^yN4a3bK&Z80hEz3K`X)`Xers0Q3rZ zlUf6l>rzTG$}251)r|6y<#|K0{38Y>^>kO&Smvr}<)bR|{Taj5yS7Hhm*w{uT9N5? zT$S}Fdvx!jyt>|AXWaF;z3~kT@eLcLH24Bnm~n`6VGgJ0OVe02{pUu95T zkf((GtS=0HT;-S{gL?!&zHrp=p~K2No{|!er|f6*2km0f{$C5uz^Hr~vT;@M0BN znpG?LZd)`)7(Jb{;3j$J+LK3v$w1`Eg>;5yKA~PwJyt*G}{@Ug2=C#2*Blz^RB|fqO{p*nKo6;z@wBn`eKP4 zo2SRH{ML6tXW{=G4G&=OEAUhTDfA;aTYD@>64zV<3sQvydsUvK++*_q2&t4u2KEMC z4(!!``o}{LeZlB|y#1C>0_*jMTWpJ3&0e@0^gbIc?ZJ z$l2uR;|d(&pp!H8&;IxW;2oUTyX7PLH{pJphA*c6jR`D_@Wl+wg#EdM`{@#j66@HJ z4!lDJcu4;p=1Pl?jI>oE+AKv2%?Ptdq6l}h&@}D<#4oLIi>3J3U zD9mE%b$ZESDO@Jp!ub_0=-gs?jlIX1$C~a>oR`p@xWeuUYhkfmIlKR=OE>$oYim6N zJrYGhA-+)Sj4yOXvV}CydY1l8I5txg*i0;dfde(cnH`ihu$iGX31Tyk z->yfue$Vlzv4oh9A`dKV1CS>+D5Qp&W2H>jvCb5@(in{yIMTqE<~p-%fetm=K5jne z-yXK^C+nZxiI@}Npw09x>RYYjw0{d1qHhV}LRd>vU`wkC`Gwn!Vi99aFfN#jSZM%M z=F%K|M;u&_;|sN; zW+rlFgb=b3LXshY5FmsQLVy5aM`Yh3A|fInA}X@uhKNY5O%=HcL92Bk zZLRexwp>fC;EP zpv=`I=rKIWR0N~N^N;bF%BJ{&lPH!(AK+&A>8EorKuz#@j7l94oymi82P7i0b!cwI zpo+BA#DN0_Mn{E*B10>IC4hU_y*6ccs#G!Mr2zS(^zyYpeb}8%usd3*^%NC7jEn%k*mD|KLwWaEcgOD+Ey~-0K4`@p*<0`D+3bkl=PKA9<7R?py0p? z`l&n!U*+2K6q0LCOb-nW4M`th=Rbvo+7j*bImfH6$JGVe*Tzqf!U_Kks&5hXg!Csl z(Xj*66FWySLWrq|j)KcCkRcH*mSvXMyB=rdrJu5Ui?j=+?`dlcPt&i)Li~2lM07b= zGqSs`UXY?BB`Z}zd6AJ#0``28yFkDu??{*v?fpqhz8_O5?;M8@Fk*0PuAVV8r|8g`d4{`&7? zH}o!JOs|)*%W%B0yRRGjb=hdT^G7`y8~12$u)D8oBNO-NezpHeRsSk4HLjD=q+3L+ zMFQ*_@?uX*jg0;*vQ8nl%`FTG#nNfnU%g`~!$=l0bV@Mp~qu+EO99M3`kE z+Zk1B8W_8sL_eUe4NhN@3AzGSFJ`}3Shcue&+pPdAENz9`>&SUYah@S)g3K-diKy^ zU#2z8Z+hddVW@&>nGziozNYDcFC&8!>%${PWK5sbHg?EhY@h%A6P_lYP%n-vEFD!V zQz5fZ#u`SDitY#OF73Aue4t&_E`GC5`%>Tv%ldpjOH;@6-oGCgfS^SA#Ek+as}M8l z1ZMX3Zjr2Dhm?Rn1|`aM`u{uMwDx63T_5??PKotCkqC4FIrlCZUR9u*so0XB8 zJRmVHMha&r*@ljTCB^0NdWKU89?Aq2_6+y-P*G2`1oz5i*gc#r(K*7keel3>5ry$3 z`Efa=PoxAJtIBJVBMeRQ?GtB}4GW1hh6h?=qVg=k>VTUn#?G2qr`lrDCyfb4rl2t_ zt{^j)1*tJ1F@th4EIIS))6?s;x5Labt2QcW=G63}=_AKB24P?2uJ@Jm+RMfe$gkH_9Mbx_)o-s9L6fgN@HI{YzD7=Va0%=QGJg# zjYpaA;0!(s_Gos(;HKOO%;frfLbAm%K6?~fil;$-yQKV4`x(|LL7J{tPo%Yg zHKk{>94wk%wm6(jmQWMAgHdBY1FXbeAZWLsd1(=(-SVC~qMwSpr;d(1+Rvs0lvXy| z<3^4dIwEvR_^mT<-ne6N%W6YiepORRL&Nfs!nLgR1H1)j!3@(f2S6w;?)A)dI*C#OTv>;^#1 z6Vn0yaX@N`&L6^SAEHiuQev!yDnf_^a(A;*m}NQHh(UNiYzS`JP%y;xe#OK|8@RQ9IbQp+0?#YqyDL$+b$v7y|Y@#?C_iudN$%z5Kw~Qi` zJiLGdDiaA%qS|l+c-R4DED(Sw>*u))=`biNJ<1ks=lwPjJ*`iJw_Vp~qff?Lh_9=4 zT53Y>P-kXLWb(vDT6=`8EzTM}N&5|J zEsoEaut={(=o*PVsKtEE(w#!iy=Lt@G8v%OtKL?dlU|8;*rpv4_up`7JWp*r%$i#a zVl5;u(7w4wb}No&l)4qiBOG##RW54P#{HmzQ=LKH9+pD(NdyFPOAzm&LbO4e6=}UK zz$(rv;CUsj+uubL9P@U%#JE6$IXN1}$R9wA0mxtA+B3bmIVw2L6dn{|jjqhCtu^l7 zKURBkK#+lrHmD;C*<47=tm|E@@vESZJlBw7-l5`Q4Rw_t(?H^%nHm_Pb_!*dxk`2& znETt=ogi!o>T-Rq*KF%Lhv)nP&*^WDHKV#hdX9D1pL~+6jnXTxXjimE(sP~Go=Xb>mCVKN6($BFzD|RCMyBJW zi~71~*aowyw^szG-X>dF?8h(ufkj?^|K)FzpNrqJa?d?zJ$A?Hi09;Ae{e$k6?#5s z?{uDDx8u*$WNgbkNL21UPmq$?7a|HJ7q|fShU&SBNk%d8MPwCLj3y6<#K!Br@rbHm%!Y>ONeycmV%pO@H)VJ9384DDfdnH_;H8}5m3@-Yf#kWny- zA~wi|p{t7zXQvkzWoF8@%%b9qYXH%#Q-kAsKE6;G8-ii8NCMBG; zcs^h0^SRmkxqQLr^C|n@ zmm;jN3(Om01qI50?S+p8La%^w13>KZT*GHFBD&DEgnMNui$O)Ex=-g#RB5y+R_r9c z<=WrNsUJM<`t6hF*t6{HMb&WpatnJ+bIP;jHegDpK2|fVIoZ-3rvgkqHLOvO3(6d7 z*u$8^#V-Vf={5@QurXVV8J2Yqun!0gyysPnpO-F%u~;U<`{^uehBY^p#0)Fh(~Twz z4CwgJXtS1BW5|x4nPGylj(&tWgnsFi7ruJW4pn`(ZCt%9?>}(Kb?7X+u&$v_mS@a* zL|e=@Z)lk+N5|SHtU-$5@%qNMKWr2_XtJh9*g6PI#dRn0BB}A|4LloW``zOz41vDxLmxzqqIJ=~I~7;gujMY6 zs?=Ti28*PPYS-f1>0MGS#`!4587M8H0<9o#FuRg1md0!Wr4{+k)mSu6bG;h{4Tp*= zaYKve62jd)p8{2>NCI7BFjP!?5$)r7`76CcA+zpK1G*koR$XaVn!7+Kp1E?Oy+f_y z<2r%;i{a}x&pj5zFt~f=hIo4Aign|OKJJUkL^AaAM!Jc#@uDid=U#ppW(nU@O_hDf zs6+j9Pjt#3ojvQa0h?UM<(A7W@)6f;nw7Nb>W7B6kQa#x-n{KUw3nZK_H2MDB*GGzw49l)tY0TDTB2RnzHeKvRJJ=< zSAYKwn_4oow5T9&u;ZkvwjcZavr{jt>ak-qZs{fbvkCa4 zP^>%Qaxgyj6L(AGg!2g=M3*X zBdC`^PyV53piJk-83iDsDFo}T4d?BpjQ6nu)D&h&0|7F=*5x`WxBOcRxkwl}LjI-e zrLH6LxpNvH3wXF86Js$+4Pu_rpfhAfpj@AxT+mFEkqX?)C?Bm)JG}d6b1)7)JBwHy z{gEqwFIzs+W~ka+P_)Y}>MyR0$VnhP830z>dkSufB4*$Z#)s;p^?rnR_;^w;;setyaExK_ zCoZ7#LC0@gDTWRVw@uxN;qJWBhUEq(&jqdC%yF7zP!C^$e84m0b*Y&1HV;~h0VjHx zj~f`r!-M&$y{`f@yD?jD>+uqtb>c1bJy%V+aw%MuuV~|yo4OuqZztZ;2*x6NXk`>Q z@q2<&a&9sSGXaIv#Tc)?=I5f&mUzw*@gaYA5=HFuPNIZ)6p8Uee4-#Z z@mA;={Od(fJaQaG^_$kM>Nk;-U%fFB2PAdlu1RVXxN9b=Li$qAgO5XwQ;*nq&#{lu zMO{vZ=qk9h#JRM7`lIMD5j#{D3T6mQyiC%S%w?Nz3{N9qCrVl*-ptuP_yiS}hKETAJor^CAQp!5**QfLb0C4oEtz^Qae+tw6bI0!EFTe4 z^koLRlms$F%~=D9O-_}|Tz^reu7ArmSEo{b<(+o9NRDrBcYWr1yB$jedaj=2^xVCt zL__&m#gh6C2iYgM1PP2hiCo%&<}4{o@DO*tDXvqlyqBUw&?jkG4%4ja7R}nJUT)_S zGvo4dF5Vj;)tolsG1y0)qfzm8AuxOEJbDYdbIlxrqY#u)*&n6-Bh8dv4D=y3R-mMG zy59YfJ;EONSf1~CRBl!pT=V5e@rnlUu61~)5&Dr$y6039x_-g_Ew&;V{w<6HUVd~x zL)5KNVlyyNECL$5^3Kg9#Pk7WoTx)NZJx*ASw>}iw}%m!V#ESDgJR4vW^+so@9$2s zifpF>xtVm(5kHO?7{WOdTp=nsLt>T67iYK1+OCd&9yz8SJivlFSm^$JvU>E$w;kI3 z^IA``8sp++?QEsBt47`Rz<11e_=pT`|HxtO@^=sHQje>%t=fa_%NAo==+h|~60r`! z63G)-eO^CSEW`gsoviv6j?H1LPUhN8Pa1s*dmFK;EmXk5_5quTRwVR`{1nh;qj+C1 zTJBVuwYN5G4AVYi@nIV`uoAh!^~m}04MEDKu9TpL@#p0Qn9qEy@p;JZNzw!-I!(i@ z%Bm8>L6mUv36W4}24QcQQdl(|I3I2vjo&%bp6mgE8UJ)l27L7-{FYdY(xW2nYE-0w zQdWx671E=DEfyIc%x5iHyD36`RDQ&4)Y@5#>n*le-LTV(^8X@R-krxbe;G`tga}A%|jO);)#^XOlorni2D3wqCNqhmfDdNga zW!zRaA8O;efN}4GCDMoLuyPtdY)~y%zfzAF3t?-5?cHoL-p1OcpTpuNvlBn(#wNh5 zyZV*V#bJ=b#9`$e60zweT+KKItI= z^N<^+1LJWR{{t`;{5i{+{pzoD>({S1kSxZG+`}YriBryCN}HvyZN(iQku4#56ZC`P zq5>6^&!&#rqD5j51$nYbFl_lA+T5NuP?uhQ7nD78VD51f+!WnkKmhbe39?eRTLU35 zIU`e&von+PQu55^42X+S*5Fu&U8Kc8Jp^?vvWfqM;SyCgC_;;vyncQ_Xw^Km+#VHc z&rGPz&Q&*F_+m}ls+HeW?9G?s`H*SlBm&O za=N>-BqUZachc@rdKCM^t2q(bNF#Y@$u+=9-AnBbgfk0Xzh0JqWTggq*{avt8X6mv zurRBwvSRk;+EMb189NG#aAsBnO_sbSMWXPK-%EX(D?xBWwIY}$p%qmCrjZ!GXIM!H=D=7e@DJfG;q@3OZL zJ-SMhoDSs^7)a!Rms=LOsY2)?TR*=FBIdbBvO9@0-7X@p26iM-!rso)CVfiSgUf*) zuy3{Bq*`LE`N6iloActLBBL;vve&iQ9kueW8m&kJ*%u+_M%(Q9t^=q$ouZ-24x|j6 zzm4E`7Ercb&d}&6&>Dz977SOH4U<8!U}D1Q^2mrpmjqT|n*|?%YN$hDwqzFS1_ONQ zeVK}FxS7Qa3P75oEBowM@XNYvZqtTH_i&_ zW^hW;sK^fpFtR%!mRU9-;?8K~L5kQ=J(5!xs0bHs;3i@EqO*1bH*o_N++Tf+jKpRb zwA=%v1BkH55tXGSg$08L*`fxf1|SHJ2Zqwo;#MrA^HEeUg+|hPgL;urLMM@@$|6=0 zqKYR;1DjP+ARk+nmzQU^$0Wwb*c)2bG)@R_58Ax>>86H;n(AzaJgRDHQxT5u@C`ej z-MBHRU2bS-ts7A*%eAALR>eYHQ{_(t(4-Wdz}bT!m2=NbFT>|B^lwzhCD(vij-tvE%XdhVnvf>LO>4~dd;d! zdcr~{0j1X;gl@L@OQAK8VLZg5cKMqNy^%?jxysu(y%cw{LkE>NQ&%M^3L(QNBb zM<*p&8&0YlzGQRd4)w!FYe%0^GS`{*M9T7OugcodD|^)PznkQFb02kef>7=P{b~kJ z3y`v;e5!BE2aLckO3h%Reqwj)G*=lB+2?`K&Ad3h91w$bTCySMW#?z-4;q-38X1A7 z2iO9TQmb?5SQD{s`os4azDL?!`om91W=4q-dyngx%I-4flgBD5<<9u%p(U-Y_ub#x zT3ixm2{GsA&7Jqe(b;qI^TW)YP}|$v%SvUX;L?M;WqJ35m!=-rwr%l}^5L>PynM;x zZQBlP*|KHD(vhQNdDO_IE4FN@{bBC`Sw67$2kbGIv(#*`=VjeY?#aGtcGtTrG_dQ?DMJu3Vg}u9M9d6E1z{)dU~e*6 zo66q$tG4e@hnlU8Wv8?at{JjzvxeFW5?sD&J@6w=LakWhOwkBG=R|?th`UmZm{8s_W?VTyt7bIKM4D-3KhQG)7GQOz z8PknJ+)^Y{jg+fIl0qs4m@=bE{&s98ol{=jNX0=lnan0P0rSB1fDi?D!vTjdVf|46 zL470>1*Muy9srzEL_*jRAkTwRX@><3qu4tmh#9=>gyTk2S|-f49cSdyl0ExNiaU&B z2P7pnH`y~|X1DKKs-97^UH9*-Z)~dHA+PDWu+F$UQZ}YpYj&#JU0pQiD(p)>=4_Pm zDGnF{y*Rode7A`%bB{p?2#dUge+JCc{f|+k*E3tyZ;);3cvV|+8hG{sTzntkxvRhf zz5oxXk`6h8D{v!B8hF0GkTyV2JSZ|JP*-mvX3mXEJjSR8(X+y~3W4!>T;f)m%EvK3bL+&D;E>_E$&2klfq>De~e4$Lq_>9FF*CG)=cX znUDSzfigomJ(liDjj0nnzYUh^NTX3eem($VB15*imBJs0xc{VG3HK zhzM?S=R2c7qj8idxmdqW-IkFtkd$bN3N%rQiUBDqL`OkG4KRNYU+@rG;-dInUiHr% z_sW~MT$MC!(`I?+4%tyN=ESqLW98j>xaFzz>ibMex7kzo=<@_HcrzH$}Xbn3qt1(SC}st5 z6&1x4MM!fLv+n=8*JnAP+x-Ru7dL!7q(p)GhT*atVmu&|7$AI;?xaldd7=o3Bcni^ zEe*a$uvMy^)`KFGDcfwzQ@8Dv#}}uf3`0gHYMKOUQ62l#>?5ufzT{bcsB4|F10)GA zdj>R#_Sh`hqz45RvQaPw^g~hvII9dthLTs3G8oJrf4&!#GR*wJlT3vpra#b~hlb`? zUQ>EF&CrRo1Y4RlmCz+PP%<+!(h}^%T8S5P6)+Y@iACChLYxhgn2IUOyPg?2LPjaB zVa>-zK`j_rt-UF;kH6WlVcohPn;RSR)Q+8y_#fWiR+?f}+uHU&ylx}gDCZjGhYo#z z>FAScy1m}@6{pX2Sc@2}MYc3vtOVM3U{@IJ3a}b56tbmwOSkfC^oi)~O8^|}@k6$h zoe&4Bs+q7J)4(4-kxY~cz|S-Z8yfzBJOK4c_o1*Rll)pJ@-pml(XiPU_Z^gXZvX!6 zO}BMKXx}|Hwoblx8ynDoAg3g2nzjO&o7s&GMX@oFj`eL!`g->+Szfv3Z5CuwSFPC9 z(cD}Sk()Q8e#WdZ7>s_FFJNwwQkt|Uf z-NE2WM0l8ihyV5jB=O;NM!Gq}&i&`MZl@lzxAr{w>V+@1_#XVP=9jX!wGXxz3>csiCNZUQ99YwPvqwWs)rB|(DR61`4rnR2gokXKE)xl*s1a?sCV#p*+L08MjXPG-uQBcg>?R9uP& zW}@mT{i0E&T%R+D?dl9-x=yP$;2P|15i5#E6blfgaC91A8)B!pWL zxDkoijD;91_$<60-1ua+DWxyWY-yeKY=`po{%g-}IYfrK8Wbu&xa)`Zz2=o` zo<6#Ci7YQ!di3cvE6sbu9=!iY_G8+&-==8+Ki>af7>}W({!J^?`8Z=K(oe)zK)N(Y zDRGw20E1CBgnq#J>pO>S}{)(+Mc&?7;a`B~J767j4i z;4v@$i*u_3aaJ-FZ}Wkr;Fi-Ciwz zrSEDpSgy^PADv&?Tu_|-nRfDBBx3vn%b6D+ujYlww`fgrn5)F~L#-Tm1S#mbxntRr zuD9in*f-gcQ81Sf4(|e9lmIVm(xOxFQ9xkOae@k^fwmIY1@DB=OHF0HdMUNPL!l&I z=2(X!wt{|FU{i3nf>C*|bIOD5Pe>rj1HqQ|oc`!;7QzQYYfxKoOu~g-XA%+}j+-68@viSX&gnNvOnhcp@w0U0#`#^Fo>iA-D-Yln{R@fZva1%|Xot%HqPjQBH>= zCRe@Oxu()Nb=H3_7*m(1#?;j)&>42u3vEf(@@>F^h7TomGB#pZ%O!#ZevHJp1vi1?zsO6+9vt2MzOX+F90mhEJc_J$^HL&`0@0Z5c~4bii*LEv&0$d^UOpW!&5*Oc`XSYP8^e`vBD){L*VAKx z3xfrYf1Qr9MdjpBfjNKiXeENH$57-gBK;W;y){`g{6wVv&L`@2aY$E@tjrgYx3i*^ zv(f$o)4uQq-tK+N!v0E;x0_Et#`%2Z)pN=vwGq37&YN^D;Ackj1|t>h0A^4IBAoz= znKqe3UK`PN?k%E2N`B@(;PsQ@zRg73AHBk%=kh2}im>8bJ<9E=A?Hjt*9?f-VQqF$ z>4XCp^PdhlaK}qm*0n6V``_>1vefwVfb!9s?r5%-mp!n3(LF5q!t&|wKJw}L$9}nb z(Q`{j)~uTkI_aL9%{w;+VVjY#jWTemf#<;?%9%JX*ZM#(VFp7yn?i~b=GGTHw%Y)& zl>0WE7)a{yn`hXfxMV{jCmG2^6Lq2Gb7xdRBo|}Ifszzn-F(NU(d7X@H!i*9{eR!R ztYzJmm+m+a@O1vg0~1PvwAt*iylmb4bu}ZGKDTJ~FCRPq=_Bt>Uw%RR_dScYKR}w! zv#>}0Xm}Y>9lUQUX(YUR0N5uoRbVtUz;n&xO?+d~{DE+vId?Mjz6z%iMcMHJI;X7} zi18D`sKqMkK*3nUxLRUE4ny&?Z?NBd{Lw%Dq*cD51hiQz4rs&J-FF&Z{_=}oKHa5l zkei1c8#NqFH6W`oMYoH%rg1sJp zi{X0oX`nTFN|2k7C$CE82!Y0Qa;>OnWk&3sHB~aqd&Am!5*YfgfBtz*dGZ?xd!Exi zxGFvSN&8D|G>c`0s`|ij?Om-?)3jgyblUFEAA9AIcUU_c_1<5#KZ*4@h*-8*!z)sh z)Nq>gDq&?O)TU-Vh@C?DIiYL_a>YMIA944m&M^L?@WAjE)~8S@D3WtBit5BR78V!5 z^?^z$I*xS?*#6-1ipK{(N?iaKHAqiwO0+V zLQH>2sk!n2dl#eadPS+`qdh`vDN8jNZ#i`Mc*!9>D=;WmLcDDNs5cyOWPt2$N3CH4yBkT_7HwmP_6Nn>)0)~W&+cw4 zz0kgE7rVcwN!9n9CQC25GpWUC^L#I^l{sF5jNE&$4A~P$*sT}=M z`zO!BOYy;TdlKGAE?@KKfBsAR_l1+4);Co2{LA?3d)mud(>ss6^4RCQr~QmsWBIxX!rkX5^r))sm?th(w8rWp|#%94+uU&}kx zpRzkBc9V6mJ9zA-A{_$E2gYyU?+*v9KOiV)W&kq=!mCQPIADzA#i&5_Ni>3x(knak z8sHE?e88RQejbd>AJu?z*W&rq@e_e&XpX6WMFhnOGd!8%@$EKT98&YU_A1$3A1E8H zyv`y!I#_K-hvC(BZCJY&(r)~Q#{)AdQEN54X?RsCMnq*8WPCOlp>hKljIp{6lM3&0 zfr;W_cziyeBKHM)Lyvkx@tJv`obZ*wN~}VK==nGR@*pNmD-5z@!I1ocIp6{jCe#+P znngM4*kr{L9VVMlmanKnDXCD33J1xyG<*Uc4*6N#sL7GlQ*JIDIHRR0eQ>!gWWey5 zBb;}%-ISRyrl}=2f7HO}+~(USQ#fAjz4sF zQNgg3Ao*DtOPZdwVD;^lGxjVj4vCHrb!{<3K*Gjm10R$hO*Igy1EnPb8xpWS3ZjyFnY(n)9N@fZr^KsOi3;ghLn?fZFDIo?4V8vwm}Amo z24(~z^gPU9OBIblw`1b?YOZ58$?m_I+dJR_>L-bMW-EEy_ zOv5QThYv%s_0+`pbZYQG3y&zxWI5Kr&$o(wk;_>DKH=sioN?4)#aXYw@5!=74O4Tc zZk_)8Pp!_G!&&-*eY5ihH?7|KVC|kiK2UR}a>=fS3A>h7CXZZJuU($|zzoNTyWZTg z;dgr{s$u2J8uGTU&#K6`ht3yVm~)6!z+MxT_kuFXwpEqEluFP~>SD$}$zUj6N%1wA$Ym41OoJbc zY}cuH5R4bR!lr2=h%CafL`VsD`N3=?d?Go0!eQ>A{1$Fbv+w{EI@tZaBaYue!94xF zL%f4#*WWwDJBY?-`I!e+lN-snp2%k*;EB5ThR1IEg?HLKkH&Ra)DVV_FmMA|PsPf5 z%%>pfsPSD8T42vGXQgGOf~4E6WQ`_~z#7l2L@EeFAPz+bF+!D$%pxk2TVX6wA7+l> zH`O_En{KVUDzWITZ`@H)vF_(9Tt8@)0SSdI+h!$Y#s*tc22~GEi3&vV#rA~qd1J@S zFHcZ{Tt|nmJTiaor-$1@#00C7A_x{c5}S4N$bSP z9sp!Obq?52q4vr$H)9!_AnEz!L-v5-%jAV|CV3wLAH$v+~Bye{FqZQ#lr5xfbWza<*8mZtAl$&Ke@y+qHlIb9fLdT(EnFR?40kHoY>9CB(Y+i2XCvLB3NU z?=N=-hK2+h5iaC$=o8C^l!ro(WVWGlCcd+Z?S47Ta~aMR&y948s42lw`ZS_~-36zZ z4J~y%vBC2Bi`w@)wDo7@cUUA6aND|Em%lzs(%u|bq5M17b6tDoPd=e?63}H1P+lL` zWtM9~m-(oNE+Zp;@IynbsT6+f9O+YMa7rXB5;@GoqlrmeOocHB(W0neg@V24IfHE_ zqbp8e6Ab=wJWQ8})3xC&9FEAvwc*6`h)no{!wK+tuQRE~&_smHR2m`mk0L=2Y2H~G z*3{%A6b?5_=Jd$4Kx8x1xkuQ5&M``qWVE+|h{scFndsvqhlDL?m^eS|#gchDCr!O? zP65jePS44;B3Hy|-{EIeZ@T55#rsOuqno1{*96N5rqOqBdaW|F!&wYVW z;eqklMM>&IT|<=ryz=7mN9N|nVK7WOq;(qda7KcqIf4=(Srtk1bSOA~R~o%+g4V%% z8MB9h+jAKyRXp1s&Tvx2TIdP}rHeEi2L+SiES1)(7Z67n4-mX??uSq~1>7^;#G@=Ls3mt@ zaIM+HF-p9Q@CFrtkYezw+ibRvqp#Xxp3kw# zI#NbZMn`vD`2~reb!)|l~11?ha?D6!ec;sZyBg5e7L^_VeB1x7MOGsqUN6+Gi7%UjKiPL_Cx zAIp>vLE`PAoUy|i>jo-y4@@EKHDbx~;0w4H-@f(&N&?<5UG4e&*=*I#o>!Y@8r8Irl3AsW0 zPBUyhyH!)Pf6FsmKi6co^{i4W-{KnCrO8KKt^E74eAacZ%=^+X1Y6*n`5}PFAUqnZExTvUlaNbzKLk+b>GBo zF`nU(0@25GjFf3dG?x=(VM6Dbnk7Z~)QBz`i6qeEJk%DJyjYts$Ut^Cnk>TJM@n91 zfneDr-XnN7oCQ|S7@kzzy18!F?m2n#ncRk@o9?f@<<0x*r!6a;H7axNu?x4{@u#Qe zn_f5M&)I+TtVfoW+3QxaxV_AlX^69rX ztbAs5Y2MQ3H&-qm??|m#Q9o>UO{V7@>3m%0Q2y#j^(<}Y4~7Inz2-~L%XC3xF$w27 z;iuqGKt>=W;im1-Syle(<4)CO`53zGboHsrRciYcgh_L~!;r^iyCms3ae^E{x;PgA zX*vJ_4rKW=5pCc-&Pd!2sU}Jl>Pf)r$1P!=Tb$Q{rbmlFKtTl|11AkgOo&JNfF(LA zQWw&K{RnA3QNx$Y@0P1atfue!EMe8$P0JGpy}nsa zI{anu9qKNg8(!@pn`0cXHK;`65*gxZ$Zil60wNI1L$_d8(0_p#4zofKF2`Vt+<{!g z_9^;a7+0vmx4)~xv_d4t-&Juhz1ZJXaW945C-}S%N2PM3W2wbHFbqzb@l9%s)Wt2yg!0f2<8T3z4yRrZxV zoqeeGu-kEdYK*`>hD#g73G-VKuYYy(!o1b>oV^~y3-$O=1M-paFMk#D4x#Y(5tSWb z38gmgnuDJpgY+hRy_l7ilR+lN=rFQH!$%NVoL(?QjfpgoWdU5uZErMukx}1v z$Mgj)7Crg*y`$%PgJZrJZH|~RTZwoeBIoBuYBo}z@~KMwNm;# zIU6yQh0u<;AOhq9^P??fS4H`kt7^^7#{YBIv*!kCICzZ@6Mpo)e+RBSrC zZQI#R6|SP=+K(M`=XS7w^;R9h$K+dKJciB|F2PiD5M}k zDGo-RJwv2J6xqYSwm@c=gS4pcSQ~5mPK%O*zSmZ0E97rsYkfy9a22}3p#L4iy%-nS z_I?Gt^tJ6Vbu3xtLO4w}G~x_!1+ZJvNwOl_=^#o0pq575riveJ%7vr}vzM0M{EJ;po%u8GZXP^u+89e`r`#Hz z5EYVr)6ch}sL`P5Ypdczq7%a87a&&ATEeIC17FJ~!S|wIaO`6p#igEW7(uHCI@-){ z^uK)EJPK(&pc8-p=cs%A$UG|c({w+^5H2kiV~9tg3FBCOAn*X9-b$nA`fEf~s()K47Lp1B zU)xry1MzLnqAXLj(|K3-B@lS6R5X}eK!yY)7?Oj!7YSa zbkbB{yPiPzN+>U{A1x<(1i}_KAR#V1F(NU`8W8}qA@;&!2llm!VrLF@`p!+B=bf6` zaF$EAy-dNbA30)Sj$AkA`X9}4sT;fW0Rlh>-#lH=J3pl8bMc&l_JsiM0e}{#Ujt2t zmtLMqFtk_B(1>u)oTvaCwsTmzAp@Yt3J} zXjW|wbNyDSoB8~`lhVeno>08<=9#0iY~yeJ>0fp}{EwfvjZSWT^zG#n9#~QtQ_#5X z$W7QI;2L_moWLF>OGBjZ#4cqLy1-+g*Bgc7m?U6q4X@~7GI``3(QLF|;9h~MU*KLb z%NHDENFNL~qUT^Bx44IGLIX5j_Kgpm!wT6__xuHA+08N3(tsjJK}z8dCY?>+0F|m~ zaB0Rze>-&cv)~2K{&@Hqras?d8?)+>U*ERs<^3xsw%QZKl&lR<9e(0HLt~U8%Pfd<0^-G2n(6l_MMq2wKQdtZhqc(gU z#HdJ+&DsHCwZrvWi`LZ*(rn+Eo-oWI1Dm-X~pn%CD zTrwPd8a=F)N(N7Z2&F>wWP#PBU+2+R$?}jAt0ARR+fzQNEITSTEj~gGl8r&3L4OU2 zi3~%=dPL5|n$+eAC8>qgHv63UGi~ymPOT!LxOj*qIVUm17@eM+P&9m04trW&r38kD zgxiNU4nLBVmz8M=P0g)v{AS3E2B#$?tA5kmn$^=Pqb+d=vt-855c81X&J;^QNl{F+ z1>&hJHDA4`)~O9rfizY+;tVNFfGS~#ggiqcKPB>|B2@u$k^#z{Ui&H*-Z4^C-DW%C z9?0nv4#-b2H#&*pf_|D8n93`GUr@LPaL)Y-3Z|z}!jV-NSwUWwJu^K34jjTXiahY? zJ`IbtE*c?ht;CLwR?u$|VQ;`jgdvKR3rlLzHf7}6$6M?7t{ycYB`i52HaBJPsJsL< zt*&+Ln2NTULx;Ak9nNwc`J2|=c549pDrQ9e)PX~qD$IX;%X&pu*HwGdNTW=^LbY02~ zzAmUxp-E%AE~t1anIo?Y>P?HkE+{?Knd+Vqj*x7Sr}UT@FDHp@MyO&#JvO>bDk~|> z$ts0#K&MDQO!}6)iM!`a@e>A(2tlP4FdPYHp!`}kMca}h60#}^>*_bostC7K%(%UA z=1(?`4N0$F@%V~CH{CQRD>^eZDkOPGX3mU7x7LhE%}tIpx;jlUIinVip0KpWZdR;g z+9prBwLZh}cDQ43z9l#!1ht;zvYYo!&l+EDuiAR{uI#ouH_fjM&#E0dV9cTi<~WZ& z{aBf^VNf&#P(w&uOjl`gBUbFi{wvaUCmbTS_&G@8AmNDf@=1N8=0u=g8HTyK=AeU-=0Tx2El z50=Who&DzQo3&+==MP!<*b*(VgT;-RGb}D{*qkxi=PYLC(&QnPR_&acw`b?rg_)_h z&Kh@XQ|{i_ffbpVm5$i$W9tW&rBk3UqxmSQn2$jkBItm}cgzRRBd)vqj;TyjH`noY z`5`T(L(MzVwF-{}O&XwGR!`uW=;0A<5eu1(!J*)W`ta%i69TP;<&6_-v`&WP zF`j?SVJCZFfoIO}h=_>Th*-EGEwIobge{vvy94Kfh)rsg*$RwP)vmMc_YW)_5Fmeb zu>DExc2jtKwpF{#jxW9R$>(idtF#t&T>j_u*Ixg{6dGp(&aw@(GYwsia>XIe1dc;O zL}?X7jKS|?l&J|l-$LFt)?*SKcY+Rbzrcmiz=buI4s^f3y~Q2+1x`n_|M{BxX$(aY9jpC^%d;sj;LBJWe@*1 z>Z?E*6;%cMaBuS>UA?{AWZKZZ+c0r(@3yjWCY$va6ghhFW9`7qj#h2&$Lx$Y^CFwx z+99t;1xnTR4m9<6`j!h=7gePc<1M&)QRx7VjbdocWJ`l{dlWO6h&dC_xUL5oNT*lt z6=J&RKI>mh_jtvXzlG57u1swls!7r-caR8ENUnkP&cMDpxrdEYSOfp?ArTQj2w_V zG;zSlVVUD^e{{mar*0i>I%6uXn>l#Xrr6?XRiRdEYN)&<>aYREx$6*N~(2Mz~QeK}gP zp3ZHOaeWFL^}OtLCZWfKk)VrRSx_88P)aO@727nx0RwR=aizZxAA_N^RRTo zyKpEck!OxZ;E?<~y~!m`!EF#}!mHiB@9RN(9oZ;BIt|91>-ez+G09YXhR>c3ZETp> z81geVWcsG@0~n-gS-}Q#E|fNPGIoIpx~yZu8?jO`Xiw_kUG$meT>m#%}MB zlm4XzvaA2lTCuEouFJAf%XB@%K3%2lr2S01`l%X$_r*z{i}>}RVDPdaa6F2G52jyO zRS+t=j)23un@d_35XfOI+_`jAJx*tztHK>jXVTwQac>N+dR)P{x3^20cDgT!YdVWX z8DMf0$EMqbqgXM@RN4fg;#Av2Eg_egGF4j`U>rQ@mbwAi!I{aHOj~knxPq9h4rP~i z^-b-{;VN_B(eSXWF}FOumhHT9PS8k_souf*g-ft!(inR=c*TM6^jGT*;NtnMHea?w{DhxB&69#?LU!|D0_ z8mH3Z;oaWBzCUwD3jr2s4eZ2~bL^sKst|rI zdX)x07rknNpNn3_z|Tdl3Xp3FIwiy=eMn?J6CU6!a_{uC7nJA$#O_=qWldH?+xYQo z8?v$*){YF)TicmCN6PWj_Af0jU%G!<%R&18V9VCu@0&1T z-|x5H^*;UoKHe?lRoWMmR3vZ(+J_`hgpMleB=aJ)RP4d5hlvgMy&<46&s`kX%GV@5`)e|#S^26Q6eBJsZqr}UI)lz;-(eOXoWe5 zv^-G{l~{CtZ$mi__ic3Y`+HlQ_ckI4{k_fSZFI`|dzQ>aIrPZ#e8?$6|nwq!QUX?$fYU{7JKK0q2ssXtr39d^@$CSN(9{gcMGD*$-f^gx?QfuYBJR zV6SxF4`43ar}dhf3i1lcUe6kf6?vYpePh#drQEEvn4Am~Ij9UGgo7s!Qko~IyElNN z1S=RjaMZlJoAVaUn^v7wx9O)dn>Np`%C;!&VH;M|tr};~8oOlV;O3EogV_4a8Pl6a zWX2XxzT+oLx1HbDkUo6El$Pvew^yuqtab52^YU!fb5X{P&T|0>3ekS=c_#YGT{B=| zdhnkas)@q$0K|oE=b5Lp*w`^`m+~+gl_|T92t^dSf>y75foI1_ZO-60GlHNZpsl-Q z?|8f&jZ54`*0J%tc4j;enI|sY2LLaw*~c~93?^yMgpSI~e-Y#13#(^T6<4y@-?Ai? zCH+>rDWz~oLHW4+tXy;Cu+)M|^Kh`CL&~Bn$D3}SQk)WOG8{LC6K8DBSUYV){Rb+g8fsU2NCA{{jpbJC-7(!=$T0ddBlMxz|5t-D$s zOKwg4618V7O*r0m;2SA^O7o%w5l1lH1ze^(GGODiR`KTcRF^ zGcd6oH@fzM8rIGlGSS;44+y$ARr_>fPLm8V;fHLbr>oZTm%O6 zT!Zd`0e+{?;{q`KyE@qBj?3rW^H+A^RgllL%g7ofS-w`hCtfnirm@`LubX6~MxX;X z`av@^$x=NTY6z-XKvAlcZvZDueck;2hMkwY^w)1A(VZ{9*aE^c8D3*aeH~+<9H}}n z3UB(8m$~RJrE9wM`3hXuqmR7N#oF_70E=tgJ+H7}_Rc9<@)@QMo-{noRynQsd+;P} zS>BWlQi_kgwU zNF;`i;&0I0exQ7WF_V8@KUHzWOeq2Z8^HOt*Zb~PkfvkYy7Qe@^%M<(w%1a2ee;^1o33wO^K+AU z)3wZNer~$HdCkvF*EFy7bkcjwYeCWJkk_NrgqL1Of#ec(Th%xh(vwU|tn46L75v~` z!>5(o15boDuYa(1&B^tZmFrKgY1+G{G5QyVoa$)>W0uy~n6^uvar9*Ru)56IJEuD) z9eD5dP46FU8q~UbZhm8#wS0ElP&&KYuU<5K%k^NqS?ppaAv`KIqjr$!pT{$5uyu&* zBhA<+iJs(|eu0auev)MR1ujzbY0vrvE}l*lzhB_=bhz)`v*eLkq-lHSDHL4Fjl&m+ zBPmq)rrKJ%(&P@brd+HZdj*NXP?|LX>UZ0OEcgFc>O0;IuD|oyC2bv>M~>Xw(YEaQ zJL>}8?dYY2%PY0ARWIC84F&uzQpiVbdAUtPw=C>c19;unpaYpwsRZkG0=6O$oiZ6o z*fjZG&iU|a67H|%oF~TT3@$BpWM!tuyM6PdhjeqyqZJ)|#h9ksFOLvQI1;VO*Ju9W zoK(e?Fsqo?e)lYPQ)E97QFCQLw!| zZAcwixyF#3Jt!(LDy=wYNAbwqr0|N@22XV6M?_nKyIu zKe8MCf_hjxWhsK{VNIf46MiMbN%AX6`BD)(Bk;H&*zH>iar>62YM^N%*-H_J=61c1 z+S9|&bi=oLHPRct)vKT0@U7ylB&FZ*t>UeOHP^fqes#ag zThp8a$iKy_XbsLA)ZNb&+7CaMyAb@1_`B?o)KFWjpKdRumRBAlSvC>&DWs?arw%#8 zf>5F=j|IR@Yz%PM9!rBd;Ya zQNk@Quhss2?`iHFH~dAr$gJ2$vPXTw<&;K28LnT|iwi0}h{BEB<)sHVa+jAB+{j&C zo7Iin#f?|}u2$x;Vo?-Bj)Y*gNRnE3xiWa55ooO!!4l=ljJ#Tza8WCtL^rP4+vFBg zY9CzR9C{+qUOsL3T@MDcRoX6Qt64gxU|MyKfwj)v-8!i0;QO0yfA7E~$Ml`EGwX(> zpFFyEXxr>^YguDHUas#a`FKlMve-{wTOC#B@wG4NY~3qw_5;`}XZ8cwD_`~l*eh4| z1DMN`zV<~iH)456UhZjMB*T1(R8o+ih8iRBu~fk=Cm^Q<1X5mJOq)&zVx2H!L$DDZ@Ey^q8&l${a2C&E;|?Hm(vp znrezo7cs_ARD6B7^<5leLqLkHFrdi5zy^#AO>N9A_jd6L;9J$q=Q2jYshF-4cE93Fp1N5tJeAF!>gc%r zsi#=Tv16p@VOZ!-B47OoHVj%5>X$G9v2EnG6a(`#LV%dUEf-iq3W}wImK4?``Y2#f zJubqC5ox!i!iXU@9;|_HawaW{&6Zm{AfO|za^;k?v}e#HGdNg0it*^a5@Zte^0=zFcipXGBKnX=r~9a?MN>6v_lL^FW(m zVVMwe0(Zmd<}}X~5!4|9IUG#M*TNtoecSPsXI^z3e{@>_ek}*Mek3aZ+v}Z-XNDL* zWF=4~BV?sC=^kfL3`QM@Q$dOeNvDWLQz%1BL3Ec1(A4jflKYW3#=Lc9{6mF#p!_|C zo*+`mxNHzimACK}Wru9U3NtcEo#qXvddNvsjZ3Kyi%qIaE#5Znj9Wq)I(AyoxZ5TV z>OhyV@`SX+qT#MLJyOw!;pwR{_VMc`xxV-8nK~Kr57pvY)vXp6i9!j4jZn_Wg(-6O zDZ~Up0-nk(Fvs~;>+)Wv5Dxbhxi_!ac12dHlk=}}id7j=cNe$ML(%fgp~n3Xti`*uIxoGc8Gdvi$eMdgO+&_u~D zPYNe6wU=|JfAHMb(?3w|`f*0Y$H(Wy=cGqwa3@d@1=#y>0x5c#Ej{w(8a|=sUU4w~ zy+nqud_!UgAGj@6x3|v~a!DLSVMU##uL=A@o{CxGgnJ8Wan9qt?605}8S#1>$07Wh zt=u@SJ#$8TMwn->oI?<%5n~cLSxGpTL|3+n)7V|j2rwA}bgji?GB&}v66z_Y?;jFu z#|P4x(oG2xkE7Dl#;IUfdiB5VqzEn9(U+J0cuA2r=$5^!)w7dlvP^K=4_V?fl%JuQ-#t7XNT?;@R^L*mTti4*U$&B zGtK)@?}UB9X~&!qv9YnX*t9fW{}2^@U_+urHLkSztUwg3vU*q@8MoPlGps>7!LmID zV_3K&9pg*W(n`lWVBjX_%aQNgMs7Jk+v#KHX3~3C&mqs|Yxv+J1s5-dF&NR%sO_Vd zTE?^j5gJKd6-bl}35M?nNjE`3Ty+hY1l80MK;jrt@L_%59m0ZxffBkn>h}r6&4%`T z0uBs<-4yUP_c-(?^&Ek-==!%J11i86Fa@Izp2!~)#F;(W{NZyS=*Y>oN7>Ny1`T{e z!5Pr}r6kfSx<=x*^xokC1TTdIbWD?aM#i z(V8GiTB#I-)ZZX)Pa_^@%M{Vo z2y`MiIB*jBU~mnU*B;?!OQBeBKl3#n5FBiRYuaSOV{pz%vi7-|cIkidc4zT5Uaa?5 z@*O*GJsQrF8l2`#dzv+Q0C8?uPt6e_*duI6_m)fKip8-(!_4lTm*n?*bzT}D{KsdX z{ZquWzWXn2eOa@r1=_HuHha4;5$#BZ)L3qK1+k)G(yA9j$;YS*F|i0sf*i(-atn42 zNs$z)>6Ko(U)D2jd301PL89_SxBEptWLQW@NLWZ1msuhLP(6X_64EsBFX|M^qc5Q{ z;r@4z{^9Z8DJw7j!|=-GYWAfTL*Md!@)XxkIlV)=xbh`rM;db@D*9oV7&C2WtYjpQ zs1f!l3Me%ha7y`@ow5993fl68AZsu*{Lm0Q3ng3eg)AbgXG9P+tcnu9aM95fi#yrA z*VsGfb&n&w`kQ^p1227-^b>??)yS}V>sV+n(vM*-3xp=qZaUWXnipT@m%h` zNrXj_9I=pwr%}1w@ao_|1Cm?B{`g+iKR2R+Gr-7Qi}Ib8Xgo8D?-BijF?;q&AFwrw z@0a?y*spuE|9bXWcGJ5(ca85{f$IbL|8n=<0a4%g|M9e$?>`xI5Dki0eJ+NoNBGW37$BJw-vDpsfs1g@ z+*Q-a(dhotGati`61^E8Jg4{dq6Q2Gd_FDnk z`WI*`0Xp5=Zhs>K(UoD^B13SPC@fwfpoI;rVCqro=jUmUQ0{|#N;w)NQ<-_C!Vt7YE<+8`ls8Uz}<8gqQC zz?_3m_OWm>g^c#Rbz zqpmG}bi4Q)MzK>tqgLUt7Mm5G7A;Qe9S*IvtCNL$k4rx}FMWJ`A{mRF(wl472T8wY zkwNR%GMCUYdI!<4_^XTYM8m=yoag`F^R2}R{m3Z7`Mz8=k7m87h4l^}1+1cn%DL;HtuO9mm?(dp zzfK#B?oNIdG+|~QxI4UXzoN2$DSb1WhAJwDnlgPgnN7o$l?$3OHKOgx@&fi|-Rdcm zCQVsgcd%i7cUD&S`iAnW3Je(UpL8esK^PPpsneuFK;ui%>o>$OO!US^$}r##o&;aL zr!&MvFWSUK+z#c7fR^$i>b2r|iBdTqFPgB1XAkQV6UVcMDTt~!=sa0C%$)ddwqD5^ z4LMaaD-%l$ky!?dJ=q!|-S~6#FpL*}S20v)3)G$r4T>u0ue|UIUJrgm3E=5Grw07b z4`)IvO@1a4r4zRcGt6@)pw@M^J7EpBdp0Z)=8-4YIjk7|YR_&_G+|c0#G;hHGp}e* zDl}kpeRh#v`s77;gmwvUE}RkIe=xwWq2%H_v`0~q1DSVDvk;Mo2t|zIhjMETf4Ea& zj6<{Gg;YMUIz8W^kczm8Ox@I1nbMyW?dW>1P;d?)cZMPDkQyLB9MBrPK;*K7Go=aZ z2oP7S!?n;GvAMBz?gXlVf!#FmeG}Gs^mm2A+qD&^3D+fB&{rS58pui<1CClm{%RuP zF|e=fNJ~G?))c$%v?j-8ri5f?hNw13=YKT%M`8EIU;dc=c*Cb3VzOqevSv!R+UL80 zYGZ_t^zg+ksuylzX6fh5Oz;EkD7VA+t4H-poZ9=r_ch-{MGm0|#Q* z6+jGP!N><51LMyyyg*en5sJk@-H*JCzUzPTf{}cu!fTxX{%Y^i#@_#4lmu+jaXavY6BFs84qK^MM@jk$$oT9szmwPU!}z;_h*R9 zp?(9pf1o!?1WOD3Tad5^8=r!i*a)?olHIuOXnduhIjC2y0W)z^|G+>+AnBp7^mVC- zo6^T3qXOYV?X7$Eh>p>DKlp)gV88Ih;nCmhA6>}rfaE#`spD7C7oV^&3d!R@S(O58 z0nCH?d;tz}dpX2GFmM2U6|Y)>^SXWI&!%B1)C|h=$?$&&%Y;m+@8AF4yG-a|A8wUS z?3bMEEqpv+5H20}c^WW?Pz<;OA_4_e7nk89$^4<+z=eZ0G;ni~w?-pOCB+?)i7|i8 zRSWnNb*sFN%eb4zDM{kpa=SJs# zE_Ciaf0Hoz&!cmtKFDEOEp7}4oS6d3reZ#HFlus(H6GvHL04;!2T#1=&w-0{vx^A%lt2r4VYr7 zWLN%P^-o2k;NuQQ8zG@037(yDhv4Iz!!$lh*w0kcSBWSHtONwY{DJiT@NB9vkwe|D z@b&TY1>xXl6g(D1u4ILmLkm#&wZn8oB?{8@Xtqlv?*LBeqgB^>nV;Hs-v9hIl2z5; z_%@%p|HI}8^R9W)vCZLi2uv$gs9^D&`MM{~z{{W!Tn)DW_A<4?uV*6A+%^CAw`epz z&7ODpXlf`EcB(s$De7vgDoac9bF(s2lcOR)C&9Q)m7Iq3 zdC?<>ZXKL?_U6M(_+r=g=eN5uj@DfqjMZ-dUJ$%`o9j} z9Q>?y#_+=a*8MC*d9Rp0>CnjTCG%DY@87U*&5BnZ-s$$$KEBCY0`~2EeOK3z%x|hCyZ8=#^tJ4wJEDg9_}Y;JXjGxTEg=+$t!1cg z^x%30T=%|y{{0HIkH$x>p$5NDVEgfpLfMBjIUltzqHTVD0qu%_04RMLjiQ~}{sGm& zygR@>Baz}EM*=FZ@h+;L`=4JX(+%Gk=w!mq{!ecsM6Z^&cAd9jCgit2DWSUOr2qYO z8o-KY4~#=_0@&PT-*#JL?-3DN61v7Ngh!3YCtT((DK0{LB@F%zM=vc?7)6b~72-PV zo-mRlM+Gv_+x3nd8#-+1%pn+W!)Ju+#dr2Bd9d($$lL$(S>+Fuwr@OKks69H2^ARSlDg6s^Y408CB1@d$$yrPpjCSkCdfN&Z-T@)XM+yr{^6!Oa-(vLl! zMRIIGkdrf-1i6t%X_oOzI!Z2tN4%Y_ZU8!Zt&J?|J@vJ{><$U-(+eDMoeNMc`W zq~l5h-G4)q)ZduyzRUGm>xG(dW6``;@~A ze(+SlD^xM)4u+=-b`~(Ej5;2VsT(ND7StlF9S!UiC>*pi3LAS|#c_b<74pcJ&``>$)DrZ}e4p4WW%vpYcp&)I=(6)8=g*HQAC^vdfG9jKEoKKOq&T{f zO_q7q8tBQN0G?rr`ELIpa$}UCcGA1&cyuge3LlZ;LWqkqr4KeuDMpk-#65f0SV7MO zG%3Y8+I0v%h$0X)9u9vH*G?q3(ryvnmn#MlJiU3|V~@={=>hZGQf=%TELw^sP=EQQ z3~ctP^jo}(VIq}6{SUxerLhZ`WQES#OBE$F2sa2QVFP%PQY3O+-X!x_sGe6m z^)4k%H=HSg0t3JTkplp+s?af=54yW!uQH@*<3@D`gQRi^jxluo3fOvn^eX|B03JV% zwxrXk9D=_tHY9Np-@60$bUDZ0>1P1XtM^VSxuS?N{MgB8JC9W_Ep z4|5o4+dyMkBXzJPV`vQc4m~Cw-|NL=fHqb>MTm1Gp($d{iVgt+w{KpoS^`W}(YdjxYO{_>40OKt{7oZCY91E{v$`(<%3^%|`=S4yf^u8;+=|#T@P)rq` z5{<{k(T`vW{F@6{1}fmHArT!7WfRTykZ}i2(5g`j6ac0>=H!jkm1{rsE+q=T(mcfO zuvZz9My+bDbn__=O109y_ae6w2#)M|y4zV&xoQjYPx2JoG08Cux>B5{7XazqX(V6} zdB%_wy6CwSdSJ@A;7M`{C_LE{GRTlQdd=lXJA+lJ;>m>GUILudb6we!%*Nm{`Iw_)K2_6VU;6JX6$|@+Ize);dCPQ>W8!{m~L{wee*w?pV^o3PDiEmDNyl`G; zmoq+ppg$)&${22nwmXvRl+rKm-M{}y*0y=;yh6$lQ8j$@$Y-BD^3mR{|gL8m|1ITOJbJ)q<#=OI`J&NL7V3MQb&OB~thlgM06S;0T7}Rm_u;@zGv*8R zGzYwT4dEws)bQphprZyDBl!=2qGoL>Lc-eB=U1y7$BtbXBBrAPhsNjUOJ9ip0G;@I z>!qoZmRJpCdGR4~V;&rk5PGe`b4yzM=?hFg11*Ap6;WlIY&eIU;#q95iJDZ*yOkJIsl1y`Og3c`Dg9`oL?BCbv$#5TH45j>PTrCVN??vO<`n=|@>7dS%8 zG3o*3;hN&G45^7Q3R0{%1Ko|wZn_yXG$uzDbw*IOaSn=7{#K-wRv<&@XoH zR1q2f*Of+5ljFBpC*Qc|vm?aM!;Z$(r+;1Tw7mRdb% z5mKPfhI5PjTLef|&G`&zfi&%}f=<$Y&bF{Ef02}2U+*71CP>0hMqd>QMw9U=7SPmB zfn!067I#n}&A>pmn(X$LX*`UqERMer<{)WVag%?_zgM&pa`R4Nkdb&%kQQTy)nVhq zFXX*h*hcBd>rhyI&P#jQ$SIxlC+QD@4gLMMv$beJ@e}C_2=x8ZB98kt(s51YM4bnk zxTxkcFc^+68#kh;X@gq9hs?QS@ReG`U<9Bomhxd2o~0zguhK72CBT`ESL+c9r2yhQ zTqI_vGOY);{k)_hD)HN zGwA1Gp+NzjNxh<1KhJi7waUyD`IvIrK#1_(JI7yHeSYNld(wR?Th0p~B?~|DD3-I5 zPc8&@tddHkSAhc9^D5|=m4LZU(eL&n;tra)XDp#DPxEXUq{=3i#1`xCL6klFx%Ph+(}yJ!!N$unhyo(?D=l?lt=aaa?Xm5hZq`z zk>08D18fcOX$R{e9@G?l3j`@qu_-YdlAkE96frXb?fwO|5+)m=uvbW2{Txpi>@_SR zS37OjfcaKnI-#6}^m2kc8n)UPJMTdU}B`vEt}u|9^&IuzOgRZw_?Q%tbr$A3;I zkYg>Rh+uA5aFCymn$m%^OiOdaOaxTB)@e^L=pz|ow!&|KwXYn1kM$DHUQ8ZMhe>o4 z_$qxV?PA|y1-PCGu+)N=QtTKTxolrpBX5gyQV(0lzT}^SnR@ocO?2X=7&UGJeu9@8 zwK?XoZIL@xE9Mbyp5mCv>dtpd4Zu$y!byp0!SXMCpuUJ2kW_RH+a@Dn7Lpcy6h0a_ z@ja@UKdSRl+oQxhb~uaWOb>Eqj+Jt`GrsY6M1@L3m6rEceE?2FTAD(UW>2$cW#Y3_ z&DJoJ-fRj$h$xP^>_`bTW+NdG2QcbG$#0BVW7H>)a|jfp0ylD;E)|@}W|KnmvC=$k zB>eabEc-TQY^aUUUpS_bzW?IM(shRPP+-?dQs`}3y)cCE;t2^0TPu=Cg-ACi8p z5kFr&OJwGke!73z@PXMs{h9RaGqwFKuaqoE)So}cimfH517qVqy6g7OrNigQZnR$d zNL8h*`k!G1&HeuhE5mhR73PH%Pn8Cw2v$@AGXYirlkIX?sWqbdO>Vo|lEiobccYZDd>75l-Tb@K3EbvJx=lE2rs8#g2dmPDvN=yMq5a62fLE@m# zI937gaT{|3{LrY#gIq|v<7q^sg7G?)NOeV7nL<%kTUJ|LsVG&HrdZQCrUW9V?wc_M z-7V0<0zn6-OGk))`aTbJyxN1MWpQQ0~D1NjNApB?*O@F_^;Q&?h4 zbo%*k4blWIu4*l{q((e=O&o(wO*r=d34TDh{{p`-FZ`~LJ=cfd|A9hD%^rD;YSyJ+cxvQ+!E5A5A1YE6LT2j~&1dyUuNrguMSA!#1Rco_ zXyx2+fNf3#C}mzv2{dxGCKhnJed;+UR0(YuO;L2(#{4WO;pNQDWOFE!=7e4RH+QR< zQahb(ak0|tzOCXxuY2vQ5|_O+S}UxVWyyZ2NctBuSjwxQioh(|I!ySK? z*9=}7#T{bJrBTm4%kS|Yd(VF5zu}I;8sTX+*Rw``&!MsR>{kw4`is2g(qBAl;0@Q@ z$#Lukj$^f#ex`n1Sqq$dh=0EVHsn(r=Z1dH_o7O^3g_hhHnd;#x8Y~nd-;CBLuXw2 zK(!k(IR+5$_$RI8L__iTJZu5nRDl#_*mpD}5}8yg)mViOEQPBU!Z1}`J_y|%6dN0B ziM1qJAa=u{ZV^{>7_I1r2sAVoGw?}hH41Hr!f3LH5H0p>h3i8IR%QPcf)z}5MA{*} zeVg=&ipy0Nr}>CWQ&u%5O{G=RUDEwh<9;C((v%H8OSpU8SrMLyI2^7J8#t(^a}Q@~ zTs+9Fxp`kI3|;uI%jG`byf4+aSuVew_oeza%jLI|@=miN{_AFVOK_SMapg)(R8leO z_#iv`;OgeV_-oIK2%{WEUd7JGdlfOGCzDh3WOh!QFe+jO9~H5s7M_4)8Wk~%Mn$l+ zCO#@6Qzd*vqavzq{^(kxBBal~qar|$94|GhP%Fkb67KF-r7&c8a60Pu&@dphoQ1dnFdQOjQ0zJZup*E>jV9lNj@@Ms4`XSzfHJ5%k zMzbHIFgXQlh9&v4zF^zsHEg?Q%_Q`NIin)F-a9I<$>nrS@8NU}ecW{EU&>5g2lFGh zKMZX+HpnzU?2kM|R#=0`>3|A5kK1PGYz)3e`A_h7p>CVfRmW%MU4J!1z-6n+>^EQi zZYbGGVT$)7;0ug)C&Q7iR;bkTK>FmffM*ysBKC3BT1wv_8!%cC9c~Iu;+`i|Q^0>g zbt>9$V2j0O=Y`Ua9KoznToP=fKH@K>TaV1&CB60DbJF{9ry^fkeBk_=M`vPS*H7=i zUwR{Y^-<|}zkBZ04_57(ea|tbgJ>mxP!oC#r{I%5x&mgD4s?Aefc<-*FrEbQZB|oP zjQZ0Avv0GS-i-jnb-?DizRR|9Ey#sk4msqjj6?1y0JlI~Cj;*N_nvzXaGSIEz_WlG zdvqe)-udW*RYyl;xPgWaL#Cyx9|t}zb5 zPhNBBKF=Ed9!^8@d-g-tkW8CML-KowhUE9`S8ltChG=f}A2k-NS?;0f0k#qEA=$Xm z^I0Ub9Gr#@`N=die7S4{bu?XiSM7sXP%u0MM#V~*bYgJ>*Qs6@Z)n6Lzi=P-j4k#A zJZOnK0k}qmS`(f^bTotJh))WNYShbznZqnrGpST)7-xhFiN|&l!t_jUOn@je>Y3G; z0Lf;ws(l`LQ#vBu@z$w_UT2Hg;2V!z*tQ=oTkXD?!52OX5s&Ya{v!Qt|LhQ@HAMJC zdgo(Fy6_R3#9TjP>Pw1`MpJ(9gM+WWBAoca4-S3jyObl`aOquTB4Ro6xjk{YxUr*9 z=W_~OLU_SZL$(dc3pWMsWWXRsKvS#6){)aGlqnM8W1#VZ$h^ZOjH?(>oHs`zr= z40;K{dy+Z5to{|P*$dt6N_vR|FZz>;=;b!9Q|(ncuA&$I9!@Xvd-f|YTtzSPdx&1- z_v}~ZTtzSPd-||Oe$OFQ8QbKcyG@?6%kOz(>^+B+n=XAOuetP@XAKHym3Q*}toO*S zUthH!R5FO~aT$0tP=-(E<@*6`AdN+N4)%$!ckWFDhyuFBWUq2fSri^$CpBGzlb$9n zT(O26Tmf{43ZAS>PI);|7Y?rH#S0hTSdD^rPmm4E@VSWVi&d~Yd=-_lZci~C3ZUUB zZ`K0t>WKlM^X_FKwy_m(x1S|zNFIK|J$&#}i&djv!<8zW@dnqFcHjZcXI{eLwb{d` zKIiZfC+G}tV5=%QyzY_p3ROLa7uLu+1GbofH560PD%#wBhzBB64u_h@{c1oM2&$Pk zl0!3kJPFRIp7UflPkc^b^W!PRq4MC*@fZ(zaukculR)N=}?T-)wZ?Jcd5pYXFI{{Pa23QeJ@X;Xk znfiISBk0SCnc(sYatu>c171S>p-diRa-c}U!4pjI52mPNw-#3X!H=b%cp@)9c=uhF zd!9ls>@76Grr3+r@(l8`dEiA*+>UDw037{bMYqcsfP40OR6TtG#|I|64dV}KkUT>| z9u^U|3lBibFnC+2zahW?e&@&hh~If*`9>|{-aZ&46wY8jw>fIsN-Ee4>F6DOtC#gI zVTXfYEgd8jOzB4Fv4FT=e}7zaw`$G3P> z=zm)#?~AOHZ}GNRzHEHw7@FBi+UgbCkNzUP^{zWUJ} zuiPu-V24XDy~A_dGZil*zAabpljffR%>({^45~rO65D^oq%lBB zio$r)TvRGeJF=#AydZ$E4l{D-cObXE)h{8J=z8m6FRCC z*k1ZT`9ev0WAh$#n=?dd(~Eo2tp2GtZ3$KH`LP?7%1DuL>ju26Qj4k? zyfm5xx?!0^=734*siM)tsS-#Ianj|EM!t7U;XwKnd4Q;)mOOssTI-N?e%U%=MAuq( z<@xfl{7e9Gb5L_frL4VQd1em7YplB_46m{7%J=b^ z($`pb<@<=Af1CaBJNd8gqdS2bL6rSZGKf>Uork7#0KRY>=;oJjC8h zfydB=Z$TT+w^zEdc3>Ek=T=PdqSTXHZ8mO<|46uqtRl~ygoa!Y4~?!L=~)I5aO6@j z*ulrBw6q{cI1RaR!I->lPffNZnxhSZDhXYHA^s`UD(BaG%po(HCm4A}3b-2_>Tn>V zyv@vz=SSZ=kFXODo0%}|Zcc7ok~?eacIg+94@;AU#pjx`ZmwG`E&2og2pJ1kIQwU+ zUSM(3uW#>Jb>q}bTdK4F;hUB{`nSJ5GFU$SSbiKEy&$OWVXsTmTsQB_HYlY6l46RX zOFt9y#OG1jsD3g?!IDrx5GNSoFl1Y9yvk!v2DOG_QGDz+pQ?$1cL)2z$B=9+n4BAx z)w^?Y)7I%ZXg6|_@^%av73t{}nGsRxC5hQ?OOW_{W_wLhWJYsGzq?{hk29%dq$MXI zG+6Kp2}+HNE6z@cndG(htd1E(R-2*r#$yLH9s+fjT&N{|Ooe#-gK5p&D0vf4i$*&k7^8BR_3VCT|g@tv!?#e}t$(Dv?Ek)hcg$2;JAoHYlWe;r2G;~Ap zIg^`iGvEv^oS_J9AI)fdO^sK0PhzxSx&9&U$?KfcnOEOnblP+$Vyi}`J#c?P*W9jx z!d0i2ZGC#VgMIApD6cNG+9wYexEHphTMKI{oZ;YHg&TG~zaoeEMW)xxt;%0G#ZkNUiTN3G2j-*?4lBu+Z|x75k8 zhNRG;6RS!}*PU73wsCs7KDuFGOUsrQ*B44bcOAX^uFf@$mXx*;_RmG<4@~Yp@NB>6 zThTLTa&E!!oio-RU(u0-4vglIM3Z=Tgdsd7SmUc=x2u&t{>q5HeXnj>`op{XlFK_% za;6lU+YY?O^l!ZU>iL}6`+KJyoa^Lz!JyPGKBWu+PO6{u6r4D;Q(v?gT@TGGK&`h9P z`#7Z0UNo55coakiJ?>7a+Y?~S@7>31(HDPI5V`iIXN%Vw3<&nt~VuFc(0ejk%gbt==PX^)KIzVb#rpK9j~7Tc zTboj&v#o}T6?b*_J+`e$xRBg1SgKSOES;8{-nyisd`WxeKPGp(YdflIJ8+Nak96s$ znmM?~EY9EZvV)Wp=<5o);mpm!$%eBH4JV}W11pmpt6sce&r2(^b5=aJvuWE@ivd zf4ZCo2uKj6v;!Cwn#+iQeKm5dKgm|!HOW1_IL^NC1U~E2b6%`WH-DSk!&TVt4Vn=hnAv>6vuX+VcKFAiKZ_+oK9+ zR29#tFwql@R`6)M}R~kH{S-k&$CES!y5WM`vV8+A*n-z%7W%RZ9 zuHGPOFA$SVnR(wx<=p!01T7|?SUPsiowcdasPs{%v~B7hzGYfc>F|NpNo_@@C}*py zs5K|bpM924I60?aT8WW;iq>U$EzTwDug{LpJ2&N(l|7X&v(9(#o^C2?n>n1@b8Mut zX5{v^&O26Cw(WUlVEz-EYahy+xvjo*S!Z@yE34>s=$|YazO{S!j+yBJ3HiO-x|csVWUpIuH=Ck175BLdW>#7E zY}>h#iO;%{1}c`crYDxPrBA)FKRbWnvAI%e$=0C(sIPgJ|n!=wiLEq0^{*l!r@GKdUH>ETH|#NDWlSf>ZxjJG zQARWqCiT^44lT@UcEkmXpK8L*uEw0)?oxByq~fyT$exF{HW8u^Y-uoSgoPcqE~{+W zdVEU#@@W;({=x8a+z)*eGfzVGhETMsd@!x=;J~vlr#B7&4+;C4(o?4&9&B4P#bpdQ zIBDbuN0+{FOK0WsTd7`!DN1mMpQv^!DskR|AUf|v{$d>$_}AnwMB}6qKtU2uS*z!j zxmR^N3s;|8^UI%}wpI_6mJGLM6i#1}7nu?g8p49ZjJYW@J91Mhr=*w6t+Af9mA0ih z=QL(0L-YFUGJX7Wr>f0BUkFlH3q|(fs^5ig;TAww!%4iDp z4+ydrP+b+y(E?ui74EGO=cuN8OXPaogaaVImhO$2tmX+Sgkemm5|X;~F5I!_#>KC4 zmpy@#JOTu(Z(dXpuTO|>%ggO{TbP(?PmarLwcA_r;`aH6MQe4@A?l16WAgk=d)koG z+1Kojh>8tX`uE?vqVzu(>Noc}GMWbR#Hpd$pag$Z2?z;=ow>=4g_h|29yc>48#IB2 z*pTF^sQAd|z+U}=0+SM>!{d{}Id26{R)a5~?(NAMen;atX}%H#ZL%0r+6`QZg(mJQ zRyhoGt3jfM)27&=PMfl0`tU71No9-nH4}#%T3FQXiVG6|pb0bOHal}W^W&n@@(K$h zl|2t`toMy8oO5`vV$Hmc{Dkk?W}nzrGOx2bF2gmjwaFrEX*)1n(s%o-1DjsEq3Xfh zS=*al`JT)LJ-m;j-$+MJoZqp+E#KQ0QE}_-`&V~`q2X#^ge{)cOv^VTdS*zB@hw?! zfX>?poII;quCU>}{+tH+T|!5Kbvbrln56;KQ;KJcm)$pa!|_>3Ct@LtO6F82MkeJr za*`q+OLf<|Q`tRp9vmqv9XT;5e(z#q`^L^RTm4X_v!lAOu%w}oh7;K%l-~ zYFB*>TCgda6|;~{9q9HOo;|gtt`w>yS3(8Xm`vlcpUYunfFojW6%s)qwh5R8&g=>z z!wtL;OnUrFVs$n?8E8yr=&#@V)&^a2LU>Zm%!2&s<%waq`i*bzZ|-|iy71tG(uJq` zl;3mC*xnp!iUgMQLU&m$wW}9^E@$8_(QJq08Q6t)RNHm!3Q<3%5-5SU zvV!cw7-88;=LQz&RCudvUY<^=RvN2UOr5{AHoE`O&v)+1=>XzRFP zrlVltT{B0YhXtCOv+~8=b9c5HEgie(u)nmeZb>p1cg|T_aIAb`Q)=v_qB3_>N?mS3 zLT*z=l|=_mrwuZN*o#d?ojK0_8XBKb0o?i*;LxrZfUKO^l@fH7F040DAF<1=oCM32 z9C)IY!!>2qI7M)L607X9_V@MNG{c@b^WdC?cV#BuG}JuOU1$k`UFLEOO?K2C`t)|` z_tIZZrS#r1xaL@&HMMnVH55T^0y(q0%aevzIotE&MjzJO+Y6n|IgydsO*uJjd2zzl z?pqcV6b|j5+rBeiJ;7XdcNuz>{m>1}Qo`_l>M? zt@viv(1|sRA6(=*ZK|AKT`{N3$inR1HH#Mrr&X^!-n}M8b;H-&y6+jOax8sfeZxq5 zT3p3~CbqGDRa@HPnJ1slun60@?5LC))rlS)Z4SU^t1h?fz1T`zNM^SlZC}<^J$nB& zoCIhz0sU3DFQqQdtF8{Lua1RLZf@E*W6_abSwqDvlZ2uvE=QXyhJC6EiO*?t=1wh6 zsNMRc$4@Yyu{`(*?)3NxHnE_T=6H+o!C-?XV*0H=-naPtzV?#ggB=a~msHklIyJE3 zrJZ#TW%q1toeZ^xJXc;d6qwO_!&B?7sfYThP*K3)QH;A-B7Vhv09t>*!#kmRuo+6_tXy%}@ul4kak)Pm=qWE$*2P!vHI{xx{98x-SnrnWSSY)AOUxcYlF|A3ey zoS2{}d#(sGqsf&6B~-S~s*EMwxq0>J#54?9ErnGxi(~AIPp=<&e0i>|ynF7jWB5>d zV5Bu7A<5wTmO9*)V6=v*;fS7Jm+XJbj=F`l7E9eSWp3Z5W>Z>uyUp5GnPzHQ*FE~m zlDBT{YT0#mVCHR0Te9?3S>G>g$qb9hu1ZO+%#KOOsjytknbfZkwHiE2#N!x~}r3a@*AG&>JW{3m#6Af#b>}8HD3Tt+FB| zD$aUGLX_T;HGR*t`bBk?^4ZHWBV&AgMgIW*Xl+bsX<=qeL{@E9K~rYfONL3c*;$oo z;mP$wTmh}vcxLImW2;)SbZq6W_i8$dOS5ZAp5MCtb4<=_9n5Q=U#JJmf0X#XCOA6D zWwAJtWBmiIc`dm{vpy^=)K$@(QaGa~LlcnGxvHuA{&lrgtL}dCIl8Yp;N{EEP4uwR ze9j~o0=Q3u*b$M&m`xT2w1cwX#X9z%S$i^11Y1jI?(SLo;DVg`HMb9y^_Rp6EY3Z< zx?-ThWUZMmzFe6lq+HxD+gqL_?*v{WX96Me)ngBMo-P#}vSW{5Vchid2%; z_V1jWWX`QJB~<1m-g7doCOdlSy!o9hzHsvB-E+=Abu}~g z;M!E2d9q?Y&OE!j*biq;gqmx+7FY5p4W6@ee#T$aqXr4>*p zQp}E`D7LY6h9kt+-!DeHpDjx4ylI{^5|Nc0b;y{S9uSsRZCZBMjMNj{aX70iA)$1JTXrQXw^%Aox{S!54oQ2WoiP(#gyc>X@4Q%8u&Tc> zyK8N2(Sp_t?lhEnM>^_|N+EamgLjOykjy8mS+>X~I<(;6Ag4R$;3QDF8(#J;;YJa; z_Ao^5{o*>5tepp;&XKbl#B*fp4)@P}PlPjgDKA$eq@W)%b!}&Q;H@gHG0vW(3Q33# zgeI#FXTQnmugee-?KFpn$AB_521O>-%qlEwaan>?uC{rurW>8b zPD@NgGJMHWyU|`8C-~}hK~{@@v>`;mpBvfCw%bx+{LtNgllJk-PT;!|Sd6HVa}aSMwY%ms}p@%GHL$N+cG;{4IC&GA7xgP%4&ASiIL zE+(=jE2Xv6mXPVt`*d!5U`pN`Yr0h(8d8{(SZ+t#M(FK*mp&9%sdk|!zxv6%2!1yn z=ORIr-_AJy=J50I?{PLx(E=#y6K>MO{`pVX2jN-zs3;Z@rO(#4mq(@-nkKoeAt$va zySZ~tsI4$1wK_Y-T0YI`gwKA`oI4i`?C(i_aCq^;HAPcrCWhNknXWU0XXt0o2}`LI z`;o514pC$-GdCtaEYLR~#Z{gd6|434HOy;_E3li@qCTlGX;MY1K@{Uk=QY-B>UU+$ zJTz-$7GhL;yzNe~{CpM~?qU56MW21d@;BG!bCUh_*O*B?PN2PQ*8i7?Nxo3VXJ`d$2ja zb?;r!6q}v*_IP(2Veih$6iq zJUzU&%@E+5kQHr9@(&8RD?p4$i8f^#lv@9kylOZetf56sz1fpGa{QvATjs2k{+?Qz z8Li46Y|Zr1rz9?Uo5el0=U?Xr&2X&s9#}d#Zshxi+V$2+Q3ccM93eizYK`WopTDop zH&rz$B0V)#=M(PZ=eHx!-_PJ{4$h7=#>N>EO3NxtbrHt61bu8yURg?XW~@3Od8E~r z>>H+w>Kt5=ThLVjM+X4zE{b?~ zJ<1;I8)tC0k54Y1TVt!=`ozGT$G0`4wG5Yboo>5H`u)bzo!d9( z|1!OGxU^#Blx)}3CHby}U9R~$ovnY_j>ft7E-uJfaQ~vF9n1P{y6~IQ(hWwvzp%M- z`HaT6xTgMPWmOC7lWg@1IF0Z)74+mJ(1?{{17zFE{AGgQNfx){nCGeLLeb_Y7G;;N zKfCDeX4t8*KuQ-c6RKDn@`WX+ct&*Kbsf|OW?pYNk zq=t$c*sl(5<)2?HwTTY^Kily6Dg5(g02MHuSMdOQ^x&wxFYwpPgJyETz{@2w1opj# z!Lm3@<4DI)cUFld$k{eMxqWF>d~88a@x&0qW2?91&8khwtnVEQAq3iDD14UMFet7M z&nRrmb@Wvw9}106jWlMMq64EUrwkV5&1rV}1{8NMDIyU_VTDttNdT75Dv2iwzKf_Z z(mA;>tF<(X;%6Peg&3SMS&@%wRljr9C5{Y}KjLRNqmE{bdhHP?%moY;={TWBcaFsz ztvK#{DdOtCtSs}uLIG38eE8vq)@ipcYuqy3;U2uP?zPwIZX9&y&%Lo_$^Q0)(H9f! zrN*L8XXIUzx+_!Iktj!VPTxRc$>d2V#Xb9O*;mzibX`MI%j&lNjrH-jBs6a5o4lqe zv327ebycIc=2WGIT5IN&wFTO$gf%7e>yvxBvMW=T*^AVB~e1H6Z8(`KzQu=V!c%R4gD zTNiFUP``v6lwH#Y5A-B$Y}mhLVRO2D>d3A`HPa(AN|R;|HgA}cIa*Y+=B_C-I{J^V zt`zly_b(|ZUG>mFmH1_Fa`ob)Lqm5jtxM5b@_I^52b^;cPBUp!>z3X zysseokg5Cj5hnQ$-PB>m_^0^hU6R$@v3F>2S4%t_&A@s8jZ0hx8lic!{x~nH^HG_E z^SY?DG5)IX_usGK4?FkTYwx}*e)aCl?}7)Qj!$(+nT6jAQ!JNrSCgng8Zz<7~n$VhW1Ub$4EMjv9eX7Yqzp~T=ww9Z3XaIm*09Wn{=iK5mY z{r53*%tno1#{PNUlR)I`YXQ(^bSA zI3&5sRc@4c^uPSpc(L36@>{&-E%o}F6VdMgH4xrC%HzT)V>wBYWHDMyp(!S0Ec4(G z0@Z4aXXjmI!3RD1f|cVgL_eHXm~kup>f}E+4t95ceEbj3J`%cq#>#=ArSn%U*>$*Y z`+kG)*{!cVc+=p%xa4JX*BrnCp8qay?BpF{Or`?mDzSod_`?n=Q@$?$ zK33v>5#d()VOEi^!f{rER7HUzEPB8J6){HvG7W=jkOz)r`ZMVI5u!vB z2sD|aw==ua@5RyIfAWG5^e549@sH@#{s%FFK0|;OZ&aRCYS3#uLb0g+bR^zxp!Qe- zTGdikxi=45?z2uA!a6*lgn5Aycjeks-kULM;?IFy&7P+`k=Gp>6o_Wtp@9)W5umF8 z79cmykP}&OV-{P2QX8%?Cny{_3Zd_C-=T|7ocN9Ow-Z2#HtBV{))QvyQ72A2vZ5u6=&gFA-spHIMs&o z;zS2&^VBnfKA%QFU<399%-K?l3A467G<@uypY2-p!K=*vI~K+APdA(jS-RoTx=A-2 zSiCjzRNP;md+%%Mi}%lbihD&3it=S;9P;1wn4-MK9g}D_A=5cL45NJ6q|69(cM;1F z%yAo-P*Q)I2n{Z38Ek+q0b1d$8zkrw|E65&o{5j#5#v7v9yEKN@f6@QX(=ftTy_}g z!SISu(;I#?up$^OVK6`tI^gMNHkSd~p?pq_;gf&7R8y9iH~Rh50@Ak{ti}p@tWivv@O#u8GQnm8 zI^^bL+cIsLX(^_Jm?)$wg$4%!_pHo{=G7|XMRU-Q(Pp(7@ei+`GCM8g$Lgn7&i!WmWe!;6ZY?zcCu`c7Fl6P6G z^zW}f@JX(JVrs+6@JCMHu;biQdzZYD+L}Ij*1{Rnr!23&ZCmT@Jz0|5u=B&aqFI*X(e#KU@CltM7mO^iN(Sq|IX<yKfB2tm!wuPaI5t z?m6d(wn%0QxpUzK6(hd}U& zMS5;3{WmB=P30yPCIN*AMw3EY%wTX6d_x_@0-7i*jWTTudFCWL(K^#co3u$nhBPXj zWT`BL6gc+d->~2l{43&P&{oCwIj=M*yxj(oJ`KK0&1x9q1s)(cPc2d;)kY0ny?_KZ zI{bu^xb_FK_%dH&RAgY(V#r`P>M2%hnykKbf}UE6%5MW|>S zEJ)T%Z@H&wq*i67rQ(@>H0bs2ag^`TrkL*biwA21R}j6_5QUU)Yzt#jv6{Ek2`;Cm z5>!;|rZIZxt9JDg>Q#mg{kBBd^JsbtVc}!cK()}yN$Yw$L;!tBZ9FtIU<|m7_%pFQ zDy0!~{!xbnrn&6lH$R@5T&waGeKnt%0)3z@l$2Dr9BE$5{wh>3r#`u0ux<2tb}G!$ z_+)WfP(-jjuIT2nc87IM|1%YqtIpT!_KO0wql9s+stP@&k!DN#zX_R`GxSRATVx&9@=S`T;M>NYMG2EnUsNeB3nGP3mx(W zy(xvz-Bg#9C{=<_py@LW&Z(+Ro{C%h6TdI!lyv;6td91wn~UP?!4W}e#ZNX`!q_Ro z|3*c(@;32l;BG_xX)0|&FH5A2W2?9=RBaMZCLB{JtD{jJgKK1BKk)LJE2f^cX|>h_ z8tr2QbK#cZM#O3SZLIwt5jHPz{~dhc>G5V?Iia52?6g zJBAXBo+k2+zuoVk_9P}IA|fU}CO$4UB03^El%L5T)wkC<6YL5dQaN<&*fkF)?f&5p zf5?7taD;igkV)z6O9&QhTKQe>;W=Y9|_hDBaye2e<2ShFglboZ*8^|l~}4e+wbhSY1AeB zVW{P%h9=Z3TE?|NtS4dp+daOX^2vZ*P}Qh4v251Ue+8)_W9?Oasy;<*n#g?rBz zP5{Gxh^~335_dJ^OPEDs-;q(F_uR!&{Ju!#rqt(J1_dD zb@)m>aT#x>=gi4WPqHS&Q3()L2~!7LU{w(aJ{T8IDoz;4o@>QW3eeWW&O3r}iRRLg ze&Cgb)J%)jl)DEFb(Y2|Q$g!*(t>?^r_4?wlomMS3id9v+ZRZ6;Squ`-A9=jkzsGxJY)U} zYUX+cjNI;`RHjf7oS^8Ic_@dvu~OX_KfA0KKzU}0YaJOpPEKr<&x-EtvT_NX2tC7i ziI`S4450lH1h|mrh6KAQiW0o+pM2uB zjt!~H!wNOw3DvHD&t0=-F8+$yMOD8(dGgm)`AbGm76z!MDaCwYaPQ$mH{W#2p_{>n za)cAg9|Gsq&{WzKz3%RGFnbMjv>Hs=6w5%NAXSFxEgC`NE6k(Dw;HH$Xr_;;X?}v= z6r2-+kF-BMQvDSTb(Q6q%#eq8Pi9I|qQw{=rX>n61wy`M;51yQd2w9M26Vb?9#1{4 zA8|~a)_c?BgXf*myXLYtBnB)$Qro1J3y^b>RhvrmWfC>71tAuxQz` zMb3aAO-Nvvv9i!@NlY;5vma3M&gW-PM4#z zVQv4$;v{O(+aWwA{7wBcg;o(qoeOCOZLp_GnMS|Du>d2ik

2@_{8LR|oXk?AoN z7;?qKspk^S;TCfU`Xr#u5|IMY0OtWH0Ok}Tm$*4Q)}<`3yy^7GJEjy^l2!`Q1GBrf zMrZGyH=zERwB42W%8O^dNQrdLVB1FS+I-7U`TF}gjz1#2g+2Q#Vihyp{y=PKib23x zbWx$A)+lU86fi>+m>?=p5sK2Qc9b1)o)?W5kiTLo9+N1Y_>?OGvC#${`BF40%op+} zML=fV9D~DnfK;vrrM7_fY__Xw*~%&XBLjajrLA3-zNUHOvk%`jMU1@d=6$;l?pyPK zuvh0~n=kxvu&U(8k01Xh@g%$Oi13-}Z3XpQ%5i7mCnUkC;|iYAY;8{=tEbnJUR7~L z3nfxLu5Q35??*3kGefNrPFMp2Mⅅ9hzNe3fiE`HRpF`&IGejrECftmzsN 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 diff --git a/public/fonts/overpass-bold-italic.otf b/public/fonts/overpass-bold-italic.otf deleted file mode 100644 index f4929aee6b7d62bf8327192c90491964e6116f72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71760 zcmdqKd0bRgA3uKX%-jKH6jK~jXqW-b6;W_sQV|eP1O!|&b$|gzfx(#p#Jx<@G_x#s zP0d|%EiGG2OIs}4%gU|A_I*3!b1{GK&pmSm%%11@KEK!N`^Q)N%sF%KSw8#cbIzHL zS$TO`tPz{b^lVVlkRkRjb8b1p*tlB8W?oE9P8rhna{D=qeRz&BDLFMeD|h9dPU(z& zWM{0$*QvQ92M>9z%PA%`31%!LEi1Q6!o*i&c7wI?FP4^XRqgHGOVmZ-9cQ^Z8^8>{4r30r-T}`UKzHpB zo~MED>H0+Q3C|&mT=2U!+T}=#SqjMlV~@qV2|5Gw=#H^UT_om*Y)BrGljVZfOHek( z{0mjOiFTr!Xx3;V{0XOoQNS|`;Gw{5d{uH}Ir324UF3|O0Q!u^_ z#v)^VxU{iq^+z>dJ1Dd$!>>!4F+DFAb%V9(M9cRVv;HwQML!07{Dh6uwP&|U&$8)&8tCP8K#e+9GV`kT0K1Sft}WD+ zK)-vip@7CZl4~xY4NHMOPC}pN=-=G14Sh)#BnPcTopi4rq^Y__`bI!<3Vh`@{m-+(m)%I`$WM^12Fly6 zf7g8J4W;T|g%w~g$9eaaTIi_C>*F2??Po3U&6ODDh+*th;S*!t_N#Nc70$PRTszz#lRjr4be z$6uhF#B%iG(2lWou$x6>AG*mj&b3rEPE2Ei5li|?cd!;x9*dSLShzHj-74LQXYE;{ zR0JP44mv)K`OvNu?b6XM7wyu}E)(ra(awu@PPD6*EF z*`PpO&!X6{K;6KaLpq|p%p%#WK;6i~*s4H12z2fa)Pph3yMcNL#<>uvoAfqT8>pL^ z#Sj^&H)7$2u7P^vTh<$f1nQy8+5GcBJ&fg9(m;n~2m$UDmUV%;#BK?16sYT1c=)Y> zx}Nn9PYBcvtbKTSpf0nX;VS}lBWoM}dY~S}vcrE3)Pq@gi@||<2G8VU<@THO)SBOH1ee$Du=_lYLT8!7GsW&MYKU*L zv$V=-AL1_ec|~=!%U9xYl^6Tm<+1i;2VM?#xJsQh+8lNou-xvhaF*M>?n+OA(_Zb& zFTw!!B1f64w8ri#_g1((UF|j@ z^-zj4nd;B$D{n*4ytBjOt9FAuz7mJ8j)3cPw{J*C2Vz1+Wj^F+FLakVT;*~0ku*nf zsXO0Ms`9|@aXSj_URQCsqu3dH10(FtvV3=;%jvZjI;n}h$nC-0PHoU)x4RJdc^pMW zn4$p8^|(vz-WspZSw?-zz(vT^2X+v`f?yx`=xDbIKMd`=+YE_MPD4{--X7J@s_SFi*xD?Co07z$d{kRxbNP+AFM zplsEyLde16f!NWm%HeUToxD&NfiCnVKsQv{UP3xXv=;#{SH7#%<*T9ZHFoE;3TFY- z3cM+E7dk!Vq-mr8?qZLlqNFCyl;QT+1BdCM7f%bx$jC&z^t5$rdxopPS?+b3Om!Yb^(Fyb7Oo`LWKv~7 z#%a&humd(wJL+9%uPg^wROEBhGwfMpl4|3?@UeEyXT-tJr7&%H1Bi4;;t0FL*Vh!F(p%thRe%_;t2EB-DeeN3GMP-R z@yD(rlAV%iACi@sXU|AaO3BPkv7724V()BE=xHC~%=c6}JT>s5U3-~KojZ3943M3Z zk~n;DMheh%+Kb)5hqQ?F<8SoY+hgJmBrlQ UTcN;Uy~E-h5Gu+Uir>MF{hA2dpV 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 b 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 - - - - - Wrapper - Domains - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/public/js/api.js b/public/js/api.js deleted file mode 100644 index 7a29d65..0000000 --- a/public/js/api.js +++ /dev/null @@ -1,51 +0,0 @@ -const endpoint = '/api' - -const request = async (url, method, body) => { - - let response; - - if (method == 'GET') { - response = await fetch(endpoint + url, { - method, - headers: { - 'Content-Type': 'application/json' - } - }); - } else { - response = await fetch(endpoint + url, { - method, - body: JSON.stringify(body), - headers: { - 'Content-Type': 'application/json' - } - }); - } - - if (response.status == 401) { - location.href = '/login' - } - const contentType = response.headers.get("content-type"); - if (contentType && contentType.indexOf("application/json") !== -1) { - const json = await response.json() - return { status: response.status, msg: json.msg, json } - } else { - const msg = await response.text(); - return { status: response.status, msg } - } -} - -export const login = async (user, pass) => { - return await request('/login', 'POST', {user, pass}) -} - -export const domains = async () => { - return await request('/domains', 'GET') -} - -export const del_domain = async (domain) => { - return await request('/domains', 'DELETE', {domain}) -} - -export const records = async (domain) => { - return await request(`/records?domain=${domain}`, 'GET') -} \ No newline at end of file diff --git a/public/js/components.js b/public/js/components.js deleted file mode 100644 index 00def5f..0000000 --- a/public/js/components.js +++ /dev/null @@ -1,12 +0,0 @@ -import { div, parse, span } from './main.js'; - -export function header(title) { - return div({id: 'header'}, - span({id: 'logo', class: 'accent'}, - parse("Wrapper") - ), - span({id: 'title'}, - parse(title) - ), - ) -} \ No newline at end of file diff --git a/public/js/domain.js b/public/js/domain.js deleted file mode 100644 index 36af422..0000000 --- a/public/js/domain.js +++ /dev/null @@ -1,95 +0,0 @@ -import { del_domain, domains, records } from './api.js' -import { header } from './components.js' -import { body, parse, div, input, button, span, is_domain } from './main.js'; - -function render(domain, records) { - - let divs = [] - for (const record of records) { - divs.push(gen_record(record)) - } - - document.body.replaceWith( - body({}, - header(domain), - div({id: 'buttons'}, - button({onclick: (event) => { - location.href = '/home' - }}, parse("Home")), - button({}, parse("New Record")), - ), - ...divs - ) - ) -} - -function gen_record(record) { - let domain = record.domain - let prefix = record.prefix - - if (prefix.length > 0) { - prefix = prefix + '.' - } - - let type = Object.keys(record.record)[0] - let data = record.record[type] - - let divs = [] - for (const key in data) { - let disp_key; - if (key == 'ttl') { - disp_key = 'TTL' - } else { - disp_key = upper(key) - } - divs.push( - div({class: 'poperty'}, - div({class: 'key'}, parse(disp_key)), - div({class: 'value'}, parse(data[key])), - ) - ) - } - - return div({class: 'record'}, - div({class: 'header'}, - span({class: 'type'}, parse(type)), - span({class: 'prefix'}, parse(prefix)), - span({class: 'domain'}, parse(domain)), - button({}, parse("Edit")), - button({class: 'delete'}, parse("Delete")) - ), - div({class: 'properties'}, - ...divs - ) - ) -} - -function upper(string) { - return string.charAt(0).toUpperCase() + string.slice(1); -} - -async function init() { - - const params = new Proxy(new URLSearchParams(window.location.search), { - get: (searchParams, prop) => searchParams.get(prop), - }); - - let domain = params.domain; - - if (!is_domain(domain)) { - location.href = '/home' - return - } - - let res = await records(domain); - - if (res.status !== 200) { - alert(res.msg) - return - } - - render(domain, res.json) - -} - -init() \ No newline at end of file diff --git a/public/js/home.js b/public/js/home.js deleted file mode 100644 index f615632..0000000 --- a/public/js/home.js +++ /dev/null @@ -1,91 +0,0 @@ -import { del_domain, domains } from './api.js' -import { header } from './components.js' -import { body, parse, div, input, button, span, is_domain } from './main.js'; - -function render(domains) { - document.body.replaceWith( - body({}, - header('domains'), - div({id: 'new'}, - input({ - type: 'text', - name: 'domain', - id: 'domain', - placeholder: 'Type domain name to create new records', - autocomplete: "off", - }), - button({onclick: () => { - let domain = document.getElementById('domain').value - - if (!is_domain(domain)) { - alert("Invalid domain") - return - } - - location.href = '/domain?domain='+domain - }}, - parse("Create") - ) - ), - ...domain(domains) - ) - ) -} - -function domain(domains) { - let divs = [] - for (const domain of domains) { - divs.push( - div({class: 'domain'}, - div({class: 'block'}, - parse(domain) - ), - button({class: 'edit', onclick: (event) => { - console.log(event.target.parentElement) - let domain = event - .target - .parentElement - .getElementsByClassName('block')[0] - .innerText - - if (!is_domain(domain)) { - alert("Invalid domain") - return - } - - location.href = '/domain?domain='+domain - }}, - parse("Edit") - ), - button({class: 'delete', onclick: async () => { - let res = await del_domain(domain) - - if (res.status != 204) { - alert(res.msg) - return - } - - location.reload() - }}, - parse("Delete") - ) - ) - ) - } - return divs -} - -async function init() { - - let res = await domains(); - - if (res.status !== 200) { - alert(res.msg) - return - } - - render(res.json) - -} - -init() \ No newline at end of file diff --git a/public/js/login.js b/public/js/login.js deleted file mode 100644 index 3bd64ad..0000000 --- a/public/js/login.js +++ /dev/null @@ -1,44 +0,0 @@ -import { body, div, form, input, p, parse, span} from './main.js' -import { login } from './api.js' - -function render() { - document.body.replaceWith( - body({}, - div({id: 'login', class: 'fill'}, - span({id: 'logo'}, - span({class: 'accent'}, parse('Wrapper')) - ), - form({autocomplete: "off"}, - input({ - type: 'text', - name: 'user', - id: 'user', - placeholder: 'Username', - autofocus: 1 - }), - input({ - type: 'password', - name: 'pass', - id: 'pass', - placeholder: 'Password', - onkeydown: async (event) => { - if (event.key == 'Enter') { - event.preventDefault() - let user = document.getElementById('user').value - let pass = document.getElementById('pass').value - - let res = await login(user, pass) - - if (res.status === 200) { - location.href = '/home' - } - } - } - }) - ) - ) - ) - ) -} - -render() diff --git a/public/js/main.js b/public/js/main.js deleted file mode 100644 index 615b3d6..0000000 --- a/public/js/main.js +++ /dev/null @@ -1,136 +0,0 @@ -function createElement(name, attrs, ...children) { - const el = document.createElement(name); - - for (const attr in attrs) { - if(attr.startsWith("on")) { - el[attr] = attrs[attr]; - } else { - el.setAttribute(attr, attrs[attr]) - } - } - - for (const child of children) { - if (child == null) { - continue - } - el.appendChild(child) - } - - return el -} - -export function createElementNS(name, attrs, ...children) { - var svgns = "http://www.w3.org/2000/svg"; - var el = document.createElementNS(svgns, name); - - for (const attr in attrs) { - if(attr.startsWith("on")) { - el[attr] = attrs[attr]; - } else { - el.setAttribute(attr, attrs[attr]) - } - } - - for (const child of children) { - if (child == null) { - continue - } - el.appendChild(child) - } - - return el -} - -export function p(attrs, ...children) { - return createElement("p", attrs, ...children) -} - -export function span(attrs, ...children) { - return createElement("span", attrs, ...children) -} - -export function div(attrs, ...children) { - return createElement("div", attrs, ...children) -} - -export function a(attrs, ...children) { - return createElement("a", attrs, ...children) -} - -export function i(attrs, ...children) { - return createElement("i", attrs, ...children) -} - -export function form(attrs, ...children) { - return createElement("form", attrs, ...children) -} - -export function img(alt, attrs, ...children) { - attrs['onerror'] = (event) => event.target.remove() - attrs['alt'] = alt - return createElement("img", attrs, ...children) -} - -export function input(attrs, ...children) { - return createElement("input", attrs, ...children) -} - -export function button(attrs, ...children) { - return createElement("button", attrs, ...children) -} - -export function path(attrs, ...children) { - return createElementNS("path", attrs, ...children) -} - -export function svg(attrs, ...children) { - return createElementNS("svg", attrs, ...children) -} - -export function body(attrs, ...children) { - return createElement("body", attrs, ...children) -} - -export function textarea(attrs, ...children) { - return createElement("textarea", attrs, ...children) -} - -export function parse(input) { - const pattern = /^[ a-zA-Z0-9!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]*$/; - - input = input + ''; - - if (!pattern.test(input)) { - return null; - } - - const sanitized = input.replace(//g, '>'); - return document.createRange().createContextualFragment(sanitized); -} - -export function is_domain(domain) { - domain = domain.toLowerCase() - - const pattern = /^[a-z0-9_\-.]*$/; - if (!pattern.test(domain)) { - return false - } - - let parts = domain.split('.').reverse() - for (const part of parts) { - if (part.length < 1) { - return false - } - } - - if (parts.length < 2 || parts[0].length < 2) { - return false - } - - const tld_pattern = /^[a-z]*$/; - if (!tld_pattern.test(parts[0])) { - return false - } - - return true -} \ No newline at end of file diff --git a/public/login.html b/public/login.html deleted file mode 100644 index b03324b..0000000 --- a/public/login.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - Wrapper - Login - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt deleted file mode 100644 index b1b4ec3..0000000 --- a/public/robots.txt +++ /dev/null @@ -1,9 +0,0 @@ -User-agent: Googlebot -Disallow: /api - -User-agent: Googlebot -User-agent: AdsBot-Google -Disallow: /api - -User-agent: * -Disallow: /api \ No newline at end of file diff --git a/src/config.rs b/src/config.rs deleted file mode 100644 index 547e853..0000000 --- a/src/config.rs +++ /dev/null @@ -1,57 +0,0 @@ -use std::{env, net::IpAddr, str::FromStr, fmt::Display}; - -#[derive(Clone)] -pub struct Config { - pub dns_fallback: IpAddr, - pub dns_port: u16, - pub dns_cache_size: u64, - - pub db_host: String, - pub db_port: u16, - pub db_user: String, - pub db_pass: String, - - pub web_user: String, - pub web_pass: String, - pub web_port: u16, -} - -impl Config { - pub fn new() -> Self { - let dns_port = Self::get_var::("WRAPPER_DNS_PORT", 53); - let dns_fallback = Self::get_var::("WRAPPER_FALLBACK_DNS", [9, 9, 9, 9].into()); - let dns_cache_size = Self::get_var::("WRAPPER_CACHE_SIZE", 1000); - - let db_host = Self::get_var::("WRAPPER_DB_HOST", String::from("localhost")); - let db_port = Self::get_var::("WRAPPER_DB_PORT", 27017); - let db_user = Self::get_var::("WRAPPER_DB_USER", String::from("root")); - let db_pass = Self::get_var::("WRAPPER_DB_PASS", String::from("")); - - let web_user = Self::get_var::("WRAPPER_WEB_USER", String::from("admin")); - let web_pass = Self::get_var::("WRAPPER_WEB_PASS", String::from("wrapper")); - let web_port = Self::get_var::("WRAPPER_WEB_PORT", 80); - - Self { - dns_fallback, - dns_port, - dns_cache_size, - - db_host, - db_port, - db_user, - db_pass, - - web_user, - web_pass, - web_port, - } - } - - fn get_var(name: &str, default: T) -> T - where - T: FromStr + Display, - { - let env = env::var(name).unwrap_or(format!("{default}")); - env.parse::().unwrap_or(default) - } -} diff --git a/src/database/mod.rs b/src/database/mod.rs deleted file mode 100644 index 0d81dc3..0000000 --- a/src/database/mod.rs +++ /dev/null @@ -1,146 +0,0 @@ -use futures::TryStreamExt; -use mongodb::{ - bson::doc, - options::{ClientOptions, Credential, ServerAddress}, - Client, -}; -use serde::{Deserialize, Serialize}; -use tracing::info; - -use crate::{ - config::Config, - dns::packet::{query::QueryType, record::DnsRecord}, -}; - -use crate::Result; - -#[derive(Clone)] -pub struct Database { - client: Client, -} - -#[derive(Debug, Serialize, Deserialize)] -pub struct StoredRecord { - record: DnsRecord, - domain: String, - prefix: String, -} - -impl StoredRecord { - fn get_domain_parts(domain: &str) -> (String, String) { - let parts: Vec<&str> = domain.split(".").collect(); - let len = parts.len(); - if len == 1 { - (String::new(), String::from(parts[0])) - } else if len == 2 { - (String::new(), String::from(parts.join("."))) - } else { - ( - String::from(parts[0..len - 2].join(".")), - String::from(parts[len - 2..len].join(".")), - ) - } - } -} - -impl From for StoredRecord { - fn from(record: DnsRecord) -> Self { - let (prefix, domain) = Self::get_domain_parts(&record.get_domain()); - Self { - record, - domain, - prefix, - } - } -} - -impl Into for StoredRecord { - fn into(self) -> DnsRecord { - self.record - } -} - -impl Database { - pub async fn new(config: Config) -> Result { - let options = ClientOptions::builder() - .hosts(vec![ServerAddress::Tcp { - host: config.db_host, - port: Some(config.db_port), - }]) - .credential( - Credential::builder() - .username(config.db_user) - .password(config.db_pass) - .build(), - ) - .max_pool_size(100) - .app_name(String::from("wrapper")) - .build(); - - let client = Client::with_options(options)?; - - client - .database("wrapper") - .run_command(doc! {"ping": 1}, None) - .await?; - - info!("Connection to mongodb successfully"); - - Ok(Database { client }) - } - - pub async fn get_records(&self, domain: &str, qtype: QueryType) -> Result> { - let (prefix, domain) = StoredRecord::get_domain_parts(domain); - Ok(self - .get_domain(&domain) - .await? - .into_iter() - .filter(|r| r.prefix == prefix) - .filter(|r| { - let rqtype = r.record.get_qtype(); - if qtype == QueryType::A { - return rqtype == QueryType::A || rqtype == QueryType::AR; - } else if qtype == QueryType::AAAA { - return rqtype == QueryType::AAAA || rqtype == QueryType::AAAAR; - } else { - r.record.get_qtype() == qtype - } - }) - .map(|r| r.into()) - .collect()) - } - - pub async fn get_domain(&self, domain: &str) -> Result> { - let db = self.client.database("wrapper"); - let col = db.collection::(domain); - - let filter = doc! { "domain": domain }; - let mut cursor = col.find(filter, None).await?; - - let mut records = Vec::new(); - while let Some(record) = cursor.try_next().await? { - records.push(record); - } - - Ok(records) - } - - pub async fn add_record(&self, record: DnsRecord) -> Result<()> { - let record = StoredRecord::from(record); - let db = self.client.database("wrapper"); - let col = db.collection::(&record.domain); - col.insert_one(record, None).await?; - Ok(()) - } - - pub async fn get_domains(&self) -> Result> { - let db = self.client.database("wrapper"); - Ok(db.list_collection_names(None).await?) - } - - pub async fn delete_domain(&self, domain: String) -> Result<()> { - let db = self.client.database("wrapper"); - let col = db.collection::(&domain); - Ok(col.drop(None).await?) - } -} diff --git a/src/dns/binding.rs b/src/dns/binding.rs deleted file mode 100644 index 4c7e15f..0000000 --- a/src/dns/binding.rs +++ /dev/null @@ -1,144 +0,0 @@ -use std::{ - net::{IpAddr, SocketAddr}, - sync::Arc, -}; - -use super::packet::{buffer::PacketBuffer, Packet}; -use crate::Result; -use tokio::{ - io::{AsyncReadExt, AsyncWriteExt}, - net::{TcpListener, TcpStream, UdpSocket}, -}; -use tracing::trace; - -pub enum Binding { - UDP(Arc), - TCP(TcpListener), -} - -impl Binding { - pub async fn udp(addr: SocketAddr) -> Result { - let socket = UdpSocket::bind(addr).await?; - Ok(Self::UDP(Arc::new(socket))) - } - - pub async fn tcp(addr: SocketAddr) -> Result { - let socket = TcpListener::bind(addr).await?; - Ok(Self::TCP(socket)) - } - - pub fn name(&self) -> &str { - match self { - Binding::UDP(_) => "UDP", - Binding::TCP(_) => "TCP", - } - } - - pub async fn connect(&mut self) -> Result { - match self { - Self::UDP(socket) => { - let mut buf = [0; 512]; - let (_, addr) = socket.recv_from(&mut buf).await?; - Ok(Connection::UDP(socket.clone(), addr, buf)) - } - Self::TCP(socket) => { - let (stream, _) = socket.accept().await?; - Ok(Connection::TCP(stream)) - } - } - } -} - -pub enum Connection { - UDP(Arc, SocketAddr, [u8; 512]), - TCP(TcpStream), -} - -impl Connection { - pub async fn read_packet(&mut self) -> Result { - let data = self.read().await?; - let mut packet_buffer = PacketBuffer::new(data); - - let packet = Packet::from_buffer(&mut packet_buffer)?; - Ok(packet) - } - - pub async fn write_packet(self, mut packet: Packet) -> Result<()> { - let mut packet_buffer = PacketBuffer::new(Vec::new()); - packet.write(&mut packet_buffer)?; - - self.write(packet_buffer.buf).await?; - Ok(()) - } - - pub async fn request_packet(&self, mut packet: Packet, dest: (IpAddr, u16)) -> Result { - let mut packet_buffer = PacketBuffer::new(Vec::new()); - packet.write(&mut packet_buffer)?; - - let data = self.request(packet_buffer.buf, dest).await?; - let mut packet_buffer = PacketBuffer::new(data); - - let packet = Packet::from_buffer(&mut packet_buffer)?; - Ok(packet) - } - - async fn read(&mut self) -> Result> { - trace!("Reading DNS packet"); - match self { - Self::UDP(_, _, src) => Ok(Vec::from(*src)), - Self::TCP(stream) => { - let size = stream.read_u16().await?; - let mut buf = Vec::with_capacity(size as usize); - stream.read_buf(&mut buf).await?; - Ok(buf) - } - } - } - - async fn write(self, mut buf: Vec) -> Result<()> { - trace!("Returning DNS packet"); - match self { - Self::UDP(socket, addr, _) => { - if buf.len() > 512 { - buf[2] = buf[2] | 0x03; - socket.send_to(&buf[0..512], addr).await?; - } else { - socket.send_to(&buf, addr).await?; - } - Ok(()) - } - Self::TCP(mut stream) => { - stream.write_u16(buf.len() as u16).await?; - stream.write(&buf[0..buf.len()]).await?; - Ok(()) - } - } - } - - async fn request(&self, buf: Vec, dest: (IpAddr, u16)) -> Result> { - match self { - Self::UDP(_socket, _addr, _src) => { - let local_addr = "[::]:0".parse::()?; - let socket = UdpSocket::bind(local_addr).await?; - socket.send_to(&buf, dest).await?; - - let mut buf = [0; 512]; - socket.recv_from(&mut buf).await?; - - Ok(Vec::from(buf)) - } - Self::TCP(_stream) => { - let mut stream = TcpStream::connect(dest).await?; - stream.write_u16((buf.len()) as u16).await?; - stream.write_all(&buf[0..buf.len()]).await?; - - stream.readable().await?; - let size = stream.read_u16().await?; - let mut buf = Vec::with_capacity(size as usize); - stream.read_buf(&mut buf).await?; - - Ok(buf) - } - } - } -} diff --git a/src/dns/mod.rs b/src/dns/mod.rs deleted file mode 100644 index 6f1e59e..0000000 --- a/src/dns/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -mod binding; -pub mod packet; -mod resolver; -pub mod server; diff --git a/src/dns/packet/buffer.rs b/src/dns/packet/buffer.rs deleted file mode 100644 index 058156e..0000000 --- a/src/dns/packet/buffer.rs +++ /dev/null @@ -1,227 +0,0 @@ -use crate::Result; - -pub struct PacketBuffer { - pub buf: Vec, - pub pos: usize, - pub size: usize, -} - -impl PacketBuffer { - pub fn new(buf: Vec) -> Self { - Self { - size: buf.len(), - buf, - pos: 0, - } - } - - pub fn pos(&self) -> usize { - self.pos - } - - pub fn step(&mut self, steps: usize) -> Result<()> { - self.pos += steps; - - Ok(()) - } - - pub fn seek(&mut self, pos: usize) -> Result<()> { - self.pos = pos; - - Ok(()) - } - - pub fn read(&mut self) -> Result { - if self.pos >= self.size { - return Err("Tried to read past end of buffer".into()); - } - let res = self.buf[self.pos]; - self.pos += 1; - Ok(res) - } - - pub fn get(&mut self, pos: usize) -> Result { - if pos >= self.size { - return Err("Tried to read past end of buffer".into()); - } - Ok(self.buf[pos]) - } - - pub fn get_range(&mut self, start: usize, len: usize) -> Result<&[u8]> { - if start + len >= self.size { - return Err("Tried to read past end of buffer".into()); - } - Ok(&self.buf[start..start + len]) - } - - pub fn read_u16(&mut self) -> Result { - let res = ((self.read()? as u16) << 8) | (self.read()? as u16); - - Ok(res) - } - - pub fn read_u32(&mut self) -> Result { - let res = ((self.read()? as u32) << 24) - | ((self.read()? as u32) << 16) - | ((self.read()? as u32) << 8) - | (self.read()? as u32); - - Ok(res) - } - - pub fn read_qname(&mut self, outstr: &mut String) -> Result<()> { - let mut pos = self.pos(); - let mut jumped = false; - - let mut delim = ""; - let max_jumps = 5; - let mut jumps_performed = 0; - loop { - // Dns Packets are untrusted data, so we need to be paranoid. Someone - // can craft a packet with a cycle in the jump instructions. This guards - // against such packets. - if jumps_performed > max_jumps { - return Err(format!("Limit of {max_jumps} jumps exceeded").into()); - } - - let len = self.get(pos)?; - - if (len & 0xC0) == 0xC0 { - if !jumped { - self.seek(pos + 2)?; - } - - let b2 = self.get(pos + 1)? as u16; - let offset = (((len as u16) ^ 0xC0) << 8) | b2; - pos = offset as usize; - jumped = true; - jumps_performed += 1; - continue; - } - - pos += 1; - - if len == 0 { - break; - } - - outstr.push_str(delim); - - let str_buffer = self.get_range(pos, len as usize)?; - outstr.push_str(&String::from_utf8_lossy(str_buffer).to_lowercase()); - - delim = "."; - - pos += len as usize; - } - - if !jumped { - self.seek(pos)?; - } - - Ok(()) - } - - pub fn read_string(&mut self, outstr: &mut String) -> Result<()> { - let len = self.read()?; - - self.read_string_n(outstr, len)?; - - Ok(()) - } - - pub fn read_string_n(&mut self, outstr: &mut String, len: u8) -> Result<()> { - let mut pos = self.pos; - - let str_buffer = self.get_range(pos, len as usize)?; - - let mut i = 0; - for b in str_buffer { - let c = *b as char; - if c == '\0' { - break; - } - outstr.push(c); - i += 1; - } - - pos += i; - self.seek(pos)?; - - Ok(()) - } - - pub fn write(&mut self, val: u8) -> Result<()> { - if self.size < self.pos { - self.size = self.pos; - } - - if self.buf.len() <= self.size { - self.buf.resize(self.size + 1, 0x00); - } - - self.buf[self.pos] = val; - self.pos += 1; - Ok(()) - } - - pub fn write_u8(&mut self, val: u8) -> Result<()> { - self.write(val)?; - - Ok(()) - } - - pub fn write_u16(&mut self, val: u16) -> Result<()> { - self.write((val >> 8) as u8)?; - self.write((val & 0xFF) as u8)?; - - Ok(()) - } - - pub fn write_u32(&mut self, val: u32) -> Result<()> { - self.write(((val >> 24) & 0xFF) as u8)?; - self.write(((val >> 16) & 0xFF) as u8)?; - self.write(((val >> 8) & 0xFF) as u8)?; - self.write((val & 0xFF) as u8)?; - - Ok(()) - } - - pub fn write_qname(&mut self, qname: &str) -> Result<()> { - for label in qname.split('.') { - let len = label.len(); - - self.write_u8(len as u8)?; - for b in label.as_bytes() { - self.write_u8(*b)?; - } - } - - if !qname.is_empty() { - self.write_u8(0)?; - } - - Ok(()) - } - - pub fn write_string(&mut self, text: &str) -> Result<()> { - for b in text.as_bytes() { - self.write_u8(*b)?; - } - - Ok(()) - } - - pub fn set(&mut self, pos: usize, val: u8) -> Result<()> { - self.buf[pos] = val; - - Ok(()) - } - - pub fn set_u16(&mut self, pos: usize, val: u16) -> Result<()> { - self.set(pos, (val >> 8) as u8)?; - self.set(pos + 1, (val & 0xFF) as u8)?; - - Ok(()) - } -} diff --git a/src/dns/packet/header.rs b/src/dns/packet/header.rs deleted file mode 100644 index 2355ecb..0000000 --- a/src/dns/packet/header.rs +++ /dev/null @@ -1,102 +0,0 @@ -use super::{buffer::PacketBuffer, result::ResultCode}; -use crate::Result; - -#[derive(Clone, Debug)] -pub struct DnsHeader { - pub id: u16, // 16 bits - - pub recursion_desired: bool, // 1 bit - pub truncated_message: bool, // 1 bit - pub authoritative_answer: bool, // 1 bit - pub opcode: u8, // 4 bits - pub response: bool, // 1 bit - - pub rescode: ResultCode, // 4 bits - pub checking_disabled: bool, // 1 bit - pub authed_data: bool, // 1 bit - pub z: bool, // 1 bit - pub recursion_available: bool, // 1 bit - - pub questions: u16, // 16 bits - pub answers: u16, // 16 bits - pub authoritative_entries: u16, // 16 bits - pub resource_entries: u16, // 16 bits -} - -impl DnsHeader { - pub fn new() -> Self { - Self { - id: 0, - - recursion_desired: false, - truncated_message: false, - authoritative_answer: false, - opcode: 0, - response: false, - - rescode: ResultCode::NOERROR, - checking_disabled: false, - authed_data: false, - z: false, - recursion_available: false, - - questions: 0, - answers: 0, - authoritative_entries: 0, - resource_entries: 0, - } - } - - pub fn read(&mut self, buffer: &mut PacketBuffer) -> Result<()> { - self.id = buffer.read_u16()?; - let flags = buffer.read_u16()?; - let a = (flags >> 8) as u8; - let b = (flags & 0xFF) as u8; - self.recursion_desired = (a & (1 << 0)) > 0; - self.truncated_message = (a & (1 << 1)) > 0; - self.authoritative_answer = (a & (1 << 2)) > 0; - self.opcode = (a >> 3) & 0x0F; - self.response = (a & (1 << 7)) > 0; - - self.rescode = ResultCode::from_num(b & 0x0F); - self.checking_disabled = (b & (1 << 4)) > 0; - self.authed_data = (b & (1 << 5)) > 0; - self.z = (b & (1 << 6)) > 0; - self.recursion_available = (b & (1 << 7)) > 0; - - self.questions = buffer.read_u16()?; - self.answers = buffer.read_u16()?; - self.authoritative_entries = buffer.read_u16()?; - self.resource_entries = buffer.read_u16()?; - - // Return the constant header size - Ok(()) - } - - pub fn write(&self, buffer: &mut PacketBuffer) -> Result<()> { - buffer.write_u16(self.id)?; - - buffer.write_u8( - (self.recursion_desired as u8) - | ((self.truncated_message as u8) << 1) - | ((self.authoritative_answer as u8) << 2) - | (self.opcode << 3) - | ((self.response as u8) << 7), - )?; - - buffer.write_u8( - (self.rescode as u8) - | ((self.checking_disabled as u8) << 4) - | ((self.authed_data as u8) << 5) - | ((self.z as u8) << 6) - | ((self.recursion_available as u8) << 7), - )?; - - buffer.write_u16(self.questions)?; - buffer.write_u16(self.answers)?; - buffer.write_u16(self.authoritative_entries)?; - buffer.write_u16(self.resource_entries)?; - - Ok(()) - } -} diff --git a/src/dns/packet/mod.rs b/src/dns/packet/mod.rs deleted file mode 100644 index 9873b94..0000000 --- a/src/dns/packet/mod.rs +++ /dev/null @@ -1,128 +0,0 @@ -use std::net::IpAddr; - -use self::{ - buffer::PacketBuffer, header::DnsHeader, query::QueryType, question::DnsQuestion, - record::DnsRecord, -}; -use crate::Result; - -pub mod buffer; -pub mod header; -pub mod query; -pub mod question; -pub mod record; -pub mod result; - -#[derive(Clone, Debug)] -pub struct Packet { - pub header: DnsHeader, - pub questions: Vec, - pub answers: Vec, - pub authorities: Vec, - pub resources: Vec, -} - -impl Packet { - pub fn new() -> Self { - Self { - header: DnsHeader::new(), - questions: Vec::new(), - answers: Vec::new(), - authorities: Vec::new(), - resources: Vec::new(), - } - } - - pub fn from_buffer(buffer: &mut PacketBuffer) -> Result { - let mut result = Self::new(); - result.header.read(buffer)?; - - for _ in 0..result.header.questions { - let mut question = DnsQuestion::new("".to_string(), QueryType::UNKNOWN(0)); - question.read(buffer)?; - result.questions.push(question); - } - - for _ in 0..result.header.answers { - let rec = DnsRecord::read(buffer)?; - result.answers.push(rec); - } - for _ in 0..result.header.authoritative_entries { - let rec = DnsRecord::read(buffer)?; - result.authorities.push(rec); - } - for _ in 0..result.header.resource_entries { - let rec = DnsRecord::read(buffer)?; - result.resources.push(rec); - } - - Ok(result) - } - - pub fn write(&mut self, buffer: &mut PacketBuffer) -> Result<()> { - self.header.questions = self.questions.len() as u16; - self.header.answers = self.answers.len() as u16; - self.header.authoritative_entries = self.authorities.len() as u16; - self.header.resource_entries = self.resources.len() as u16; - - self.header.write(buffer)?; - - for question in &self.questions { - question.write(buffer)?; - } - for rec in &self.answers { - rec.write(buffer)?; - } - for rec in &self.authorities { - rec.write(buffer)?; - } - for rec in &self.resources { - rec.write(buffer)?; - } - - Ok(()) - } - - pub fn get_random_a(&self) -> Option { - self.answers - .iter() - .filter_map(|record| match record { - DnsRecord::A { addr, .. } => Some(IpAddr::V4(*addr)), - DnsRecord::AAAA { addr, .. } => Some(IpAddr::V6(*addr)), - _ => None, - }) - .next() - } - - fn get_ns<'a>(&'a self, qname: &'a str) -> impl Iterator { - self.authorities - .iter() - .filter_map(|record| match record { - DnsRecord::NS { domain, host, .. } => Some((domain.as_str(), host.as_str())), - _ => None, - }) - .filter(move |(domain, _)| qname.ends_with(*domain)) - } - - pub fn get_resolved_ns(&self, qname: &str) -> Option { - self.get_ns(qname) - .flat_map(|(_, host)| { - self.resources - .iter() - .filter_map(move |record| match record { - DnsRecord::A { domain, addr, .. } if domain == host => { - Some(IpAddr::V4(*addr)) - } - DnsRecord::AAAA { domain, addr, .. } if domain == host => { - Some(IpAddr::V6(*addr)) - } - _ => None, - }) - }) - .next() - } - - pub fn get_unresolved_ns<'a>(&'a self, qname: &'a str) -> Option<&'a str> { - self.get_ns(qname).map(|(_, host)| host).next() - } -} diff --git a/src/dns/packet/query.rs b/src/dns/packet/query.rs deleted file mode 100644 index 732b9b2..0000000 --- a/src/dns/packet/query.rs +++ /dev/null @@ -1,78 +0,0 @@ -#[derive(PartialEq, Eq, Debug, Clone, Hash, Copy)] -pub enum QueryType { - UNKNOWN(u16), - A, // 1 - NS, // 2 - CNAME, // 5 - SOA, // 6 - PTR, // 12 - MX, // 15 - TXT, // 16 - AAAA, // 28 - SRV, // 33 - OPT, // 41 - CAA, // 257 - AR, // 1000 - AAAAR, // 1001 -} - -impl QueryType { - pub fn to_num(&self) -> u16 { - match *self { - Self::UNKNOWN(x) => x, - Self::A => 1, - Self::NS => 2, - Self::CNAME => 5, - Self::SOA => 6, - Self::PTR => 12, - Self::MX => 15, - Self::TXT => 16, - Self::AAAA => 28, - Self::SRV => 33, - Self::OPT => 41, - Self::CAA => 257, - Self::AR => 1000, - Self::AAAAR => 1001, - } - } - - pub fn from_num(num: u16) -> Self { - match num { - 1 => Self::A, - 2 => Self::NS, - 5 => Self::CNAME, - 6 => Self::SOA, - 12 => Self::PTR, - 15 => Self::MX, - 16 => Self::TXT, - 28 => Self::AAAA, - 33 => Self::SRV, - 41 => Self::OPT, - 257 => Self::CAA, - 1000 => Self::AR, - 1001 => Self::AAAAR, - _ => Self::UNKNOWN(num), - } - } - - pub fn allowed_actions(&self) -> (bool, bool) { - // 0. duplicates allowed - // 1. allowed to be created by database - match self { - QueryType::UNKNOWN(_) => (false, false), - QueryType::A => (true, true), - QueryType::NS => (false, true), - QueryType::CNAME => (false, true), - QueryType::SOA => (false, false), - QueryType::PTR => (false, true), - QueryType::MX => (false, true), - QueryType::TXT => (true, true), - QueryType::AAAA => (true, true), - QueryType::SRV => (false, true), - QueryType::OPT => (false, false), - QueryType::CAA => (false, true), - QueryType::AR => (false, true), - QueryType::AAAAR => (false, true), - } - } -} diff --git a/src/dns/packet/question.rs b/src/dns/packet/question.rs deleted file mode 100644 index 9042e1c..0000000 --- a/src/dns/packet/question.rs +++ /dev/null @@ -1,31 +0,0 @@ -use super::{buffer::PacketBuffer, query::QueryType, Result}; - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct DnsQuestion { - pub name: String, - pub qtype: QueryType, -} - -impl DnsQuestion { - pub fn new(name: String, qtype: QueryType) -> Self { - Self { name, qtype } - } - - pub fn read(&mut self, buffer: &mut PacketBuffer) -> Result<()> { - buffer.read_qname(&mut self.name)?; - self.qtype = QueryType::from_num(buffer.read_u16()?); // qtype - let _ = buffer.read_u16()?; // class - - Ok(()) - } - - pub fn write(&self, buffer: &mut PacketBuffer) -> Result<()> { - buffer.write_qname(&self.name)?; - - let typenum = self.qtype.to_num(); - buffer.write_u16(typenum)?; - buffer.write_u16(1)?; - - Ok(()) - } -} diff --git a/src/dns/packet/record.rs b/src/dns/packet/record.rs deleted file mode 100644 index 88008f0..0000000 --- a/src/dns/packet/record.rs +++ /dev/null @@ -1,544 +0,0 @@ -use std::net::{Ipv4Addr, Ipv6Addr}; - -use rand::RngCore; -use serde::{Deserialize, Serialize}; -use tracing::{trace, warn}; - -use super::{buffer::PacketBuffer, query::QueryType, Result}; - -#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)] -pub enum DnsRecord { - UNKNOWN { - domain: String, - qtype: u16, - data_len: u16, - ttl: u32, - }, // 0 - A { - domain: String, - addr: Ipv4Addr, - ttl: u32, - }, // 1 - NS { - domain: String, - host: String, - ttl: u32, - }, // 2 - CNAME { - domain: String, - host: String, - ttl: u32, - }, // 5 - SOA { - domain: String, - mname: String, - nname: String, - serial: u32, - refresh: u32, - retry: u32, - expire: u32, - minimum: u32, - ttl: u32, - }, // 6 - PTR { - domain: String, - pointer: String, - ttl: u32, - }, // 12 - MX { - domain: String, - priority: u16, - host: String, - ttl: u32, - }, // 15 - TXT { - domain: String, - text: Vec, - ttl: u32, - }, //16 - AAAA { - domain: String, - addr: Ipv6Addr, - ttl: u32, - }, // 28 - SRV { - domain: String, - priority: u16, - weight: u16, - port: u16, - target: String, - ttl: u32, - }, // 33 - CAA { - domain: String, - flags: u8, - length: u8, - tag: String, - value: String, - ttl: u32, - }, // 257 - AR { - domain: String, - ttl: u32, - }, - AAAAR { - domain: String, - ttl: u32, - }, -} - -impl DnsRecord { - pub fn read(buffer: &mut PacketBuffer) -> Result { - let mut domain = String::new(); - buffer.read_qname(&mut domain)?; - - let qtype_num = buffer.read_u16()?; - let qtype = QueryType::from_num(qtype_num); - let _ = buffer.read_u16()?; - let ttl = buffer.read_u32()?; - let data_len = buffer.read_u16()?; - - trace!("Reading DNS Record TYPE: {:?}", qtype); - - let header_pos = buffer.pos(); - - match qtype { - QueryType::A => { - let raw_addr = buffer.read_u32()?; - let addr = Ipv4Addr::new( - ((raw_addr >> 24) & 0xFF) as u8, - ((raw_addr >> 16) & 0xFF) as u8, - ((raw_addr >> 8) & 0xFF) as u8, - (raw_addr & 0xFF) as u8, - ); - - Ok(Self::A { domain, addr, ttl }) - } - QueryType::AAAA => { - let raw_addr1 = buffer.read_u32()?; - let raw_addr2 = buffer.read_u32()?; - let raw_addr3 = buffer.read_u32()?; - let raw_addr4 = buffer.read_u32()?; - let addr = Ipv6Addr::new( - ((raw_addr1 >> 16) & 0xFFFF) as u16, - (raw_addr1 & 0xFFFF) as u16, - ((raw_addr2 >> 16) & 0xFFFF) as u16, - (raw_addr2 & 0xFFFF) as u16, - ((raw_addr3 >> 16) & 0xFFFF) as u16, - (raw_addr3 & 0xFFFF) as u16, - ((raw_addr4 >> 16) & 0xFFFF) as u16, - (raw_addr4 & 0xFFFF) as u16, - ); - - Ok(Self::AAAA { domain, addr, ttl }) - } - QueryType::NS => { - let mut ns = String::new(); - buffer.read_qname(&mut ns)?; - - Ok(Self::NS { - domain, - host: ns, - ttl, - }) - } - QueryType::CNAME => { - let mut cname = String::new(); - buffer.read_qname(&mut cname)?; - - Ok(Self::CNAME { - domain, - host: cname, - ttl, - }) - } - QueryType::SOA => { - let mut mname = String::new(); - buffer.read_qname(&mut mname)?; - - let mut nname = String::new(); - buffer.read_qname(&mut nname)?; - - let serial = buffer.read_u32()?; - let refresh = buffer.read_u32()?; - let retry = buffer.read_u32()?; - let expire = buffer.read_u32()?; - let minimum = buffer.read_u32()?; - - Ok(Self::SOA { - domain, - mname, - nname, - serial, - refresh, - retry, - expire, - minimum, - ttl, - }) - } - QueryType::PTR => { - let mut pointer = String::new(); - buffer.read_qname(&mut pointer)?; - - Ok(Self::PTR { - domain, - pointer, - ttl, - }) - } - QueryType::MX => { - let priority = buffer.read_u16()?; - let mut mx = String::new(); - buffer.read_qname(&mut mx)?; - - Ok(Self::MX { - domain, - priority, - host: mx, - ttl, - }) - } - QueryType::TXT => { - let mut text = Vec::new(); - - loop { - let mut s = String::new(); - buffer.read_string(&mut s)?; - - if s.len() == 0 { - break; - } else { - text.push(s); - } - } - - Ok(Self::TXT { domain, text, ttl }) - } - QueryType::SRV => { - let priority = buffer.read_u16()?; - let weight = buffer.read_u16()?; - let port = buffer.read_u16()?; - - let mut target = String::new(); - buffer.read_qname(&mut target)?; - - Ok(Self::SRV { - domain, - priority, - weight, - port, - target, - ttl, - }) - } - QueryType::CAA => { - let flags = buffer.read()?; - let length = buffer.read()?; - - let mut tag = String::new(); - buffer.read_string_n(&mut tag, length)?; - - let value_len = (data_len as usize) + header_pos - buffer.pos; - let mut value = String::new(); - buffer.read_string_n(&mut value, value_len as u8)?; - - Ok(Self::CAA { - domain, - flags, - length, - tag, - value, - ttl, - }) - } - QueryType::UNKNOWN(_) | _ => { - buffer.step(data_len as usize)?; - - Ok(Self::UNKNOWN { - domain, - qtype: qtype_num, - data_len, - ttl, - }) - } - } - } - - pub fn write(&self, buffer: &mut PacketBuffer) -> Result { - let start_pos = buffer.pos(); - - trace!("Writing DNS Record {:?}", self); - - match *self { - Self::A { - ref domain, - ref addr, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::A.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - buffer.write_u16(4)?; - - let octets = addr.octets(); - buffer.write_u8(octets[0])?; - buffer.write_u8(octets[1])?; - buffer.write_u8(octets[2])?; - buffer.write_u8(octets[3])?; - } - Self::NS { - ref domain, - ref host, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::NS.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - - let pos = buffer.pos(); - buffer.write_u16(0)?; - - buffer.write_qname(host)?; - - let size = buffer.pos() - (pos + 2); - buffer.set_u16(pos, size as u16)?; - } - Self::CNAME { - ref domain, - ref host, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::CNAME.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - - let pos = buffer.pos(); - buffer.write_u16(0)?; - - buffer.write_qname(host)?; - - let size = buffer.pos() - (pos + 2); - buffer.set_u16(pos, size as u16)?; - } - Self::SOA { - ref domain, - ref mname, - ref nname, - serial, - refresh, - retry, - expire, - minimum, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::SOA.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - - let pos = buffer.pos(); - buffer.write_u16(0)?; - - buffer.write_qname(mname)?; - buffer.write_qname(nname)?; - buffer.write_u32(serial)?; - buffer.write_u32(refresh)?; - buffer.write_u32(retry)?; - buffer.write_u32(expire)?; - buffer.write_u32(minimum)?; - - let size = buffer.pos() - (pos + 2); - buffer.set_u16(pos, size as u16)?; - } - Self::PTR { - ref domain, - ref pointer, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::NS.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - - let pos = buffer.pos(); - buffer.write_u16(0)?; - - buffer.write_qname(&pointer)?; - - let size = buffer.pos() - (pos + 2); - buffer.set_u16(pos, size as u16)?; - } - Self::MX { - ref domain, - priority, - ref host, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::MX.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - - let pos = buffer.pos(); - buffer.write_u16(0)?; - - buffer.write_u16(priority)?; - buffer.write_qname(host)?; - - let size = buffer.pos() - (pos + 2); - buffer.set_u16(pos, size as u16)?; - } - Self::TXT { - ref domain, - ref text, - ttl, - } => { - buffer.write_qname(&domain)?; - buffer.write_u16(QueryType::TXT.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - - let pos = buffer.pos(); - buffer.write_u16(0)?; - - if text.is_empty() { - return Ok(buffer.pos() - start_pos); - } - - for s in text { - buffer.write_u8(s.len() as u8)?; - buffer.write_string(&s)?; - } - let size = buffer.pos() - (pos + 2); - buffer.set_u16(pos, size as u16)?; - } - Self::AAAA { - ref domain, - ref addr, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::AAAA.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - buffer.write_u16(16)?; - - for octet in &addr.segments() { - buffer.write_u16(*octet)?; - } - } - Self::SRV { - ref domain, - priority, - weight, - port, - ref target, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::SRV.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - - let pos = buffer.pos(); - buffer.write_u16(0)?; - - buffer.write_u16(priority)?; - buffer.write_u16(weight)?; - buffer.write_u16(port)?; - buffer.write_qname(target)?; - - let size = buffer.pos() - (pos + 2); - buffer.set_u16(pos, size as u16)?; - } - Self::CAA { - ref domain, - flags, - length, - ref tag, - ref value, - ttl, - } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::CAA.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - - let pos = buffer.pos(); - buffer.write_u16(0)?; - - buffer.write_u8(flags)?; - buffer.write_u8(length)?; - buffer.write_string(tag)?; - buffer.write_string(value)?; - - let size = buffer.pos() - (pos + 2); - buffer.set_u16(pos, size as u16)?; - } - Self::AR { ref domain, ttl } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::A.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - buffer.write_u16(4)?; - - let mut rand = rand::thread_rng(); - buffer.write_u32(rand.next_u32())?; - } - Self::AAAAR { ref domain, ttl } => { - buffer.write_qname(domain)?; - buffer.write_u16(QueryType::A.to_num())?; - buffer.write_u16(1)?; - buffer.write_u32(ttl)?; - buffer.write_u16(4)?; - - let mut rand = rand::thread_rng(); - buffer.write_u32(rand.next_u32())?; - buffer.write_u32(rand.next_u32())?; - buffer.write_u32(rand.next_u32())?; - buffer.write_u32(rand.next_u32())?; - } - Self::UNKNOWN { .. } => { - warn!("Skipping record: {self:?}"); - } - } - - Ok(buffer.pos() - start_pos) - } - - pub fn get_domain(&self) -> String { - self.get_shared_domain().0 - } - - pub fn get_qtype(&self) -> QueryType { - self.get_shared_domain().1 - } - - pub fn get_ttl(&self) -> u32 { - self.get_shared_domain().2 - } - - fn get_shared_domain(&self) -> (String, QueryType, u32) { - match self { - DnsRecord::UNKNOWN { - domain, ttl, qtype, .. - } => (domain.clone(), QueryType::UNKNOWN(*qtype), *ttl), - DnsRecord::AAAA { domain, ttl, .. } => (domain.clone(), QueryType::AAAA, *ttl), - DnsRecord::A { domain, ttl, .. } => (domain.clone(), QueryType::A, *ttl), - DnsRecord::NS { domain, ttl, .. } => (domain.clone(), QueryType::NS, *ttl), - DnsRecord::CNAME { domain, ttl, .. } => (domain.clone(), QueryType::CNAME, *ttl), - DnsRecord::SOA { domain, ttl, .. } => (domain.clone(), QueryType::SOA, *ttl), - DnsRecord::PTR { domain, ttl, .. } => (domain.clone(), QueryType::PTR, *ttl), - DnsRecord::MX { domain, ttl, .. } => (domain.clone(), QueryType::MX, *ttl), - DnsRecord::TXT { domain, ttl, .. } => (domain.clone(), QueryType::TXT, *ttl), - DnsRecord::SRV { domain, ttl, .. } => (domain.clone(), QueryType::SRV, *ttl), - DnsRecord::CAA { domain, ttl, .. } => (domain.clone(), QueryType::CAA, *ttl), - DnsRecord::AR { domain, ttl, .. } => (domain.clone(), QueryType::AR, *ttl), - DnsRecord::AAAAR { domain, ttl, .. } => (domain.clone(), QueryType::AAAAR, *ttl), - } - } -} diff --git a/src/dns/packet/result.rs b/src/dns/packet/result.rs deleted file mode 100644 index 41c8ba9..0000000 --- a/src/dns/packet/result.rs +++ /dev/null @@ -1,22 +0,0 @@ -#[derive(Copy, Clone, Debug, PartialEq, Eq)] -pub enum ResultCode { - NOERROR = 0, - FORMERR = 1, - SERVFAIL = 2, - NXDOMAIN = 3, - NOTIMP = 4, - REFUSED = 5, -} - -impl ResultCode { - pub fn from_num(num: u8) -> Self { - match num { - 1 => Self::FORMERR, - 2 => Self::SERVFAIL, - 3 => Self::NXDOMAIN, - 4 => Self::NOTIMP, - 5 => Self::REFUSED, - 0 | _ => Self::NOERROR, - } - } -} diff --git a/src/dns/resolver.rs b/src/dns/resolver.rs deleted file mode 100644 index 18b5bba..0000000 --- a/src/dns/resolver.rs +++ /dev/null @@ -1,230 +0,0 @@ -use super::binding::Connection; -use super::packet::{query::QueryType, question::DnsQuestion, result::ResultCode, Packet}; -use crate::Result; -use crate::{config::Config, database::Database, get_time}; -use async_recursion::async_recursion; -use moka::future::Cache; -use std::{net::IpAddr, sync::Arc, time::Duration}; -use tracing::{error, trace}; - -pub struct Resolver { - request_id: u16, - connection: Connection, - config: Arc, - database: Arc, - cache: Cache, -} - -impl Resolver { - pub fn new( - request_id: u16, - connection: Connection, - config: Arc, - database: Arc, - cache: Cache, - ) -> Self { - Self { - request_id, - connection, - config, - database, - cache, - } - } - - async fn lookup_database(&self, question: &DnsQuestion) -> Option { - let records = match self - .database - .get_records(&question.name, question.qtype) - .await - { - Ok(record) => record, - Err(err) => { - error!("{err}"); - return None; - } - }; - - if records.is_empty() { - return None; - } - - let mut packet = Packet::new(); - - packet.header.id = self.request_id; - packet.header.questions = 1; - packet.header.answers = records.len() as u16; - packet.header.recursion_desired = true; - packet - .questions - .push(DnsQuestion::new(question.name.to_string(), question.qtype)); - - for record in records { - packet.answers.push(record); - } - - trace!( - "Found stored value for {:?} {}", - question.qtype, - question.name - ); - - Some(packet) - } - - async fn lookup_cache(&self, question: &DnsQuestion) -> Option { - let Some((packet, date)) = self.cache.get(&question) else { - return None - }; - - let now = get_time(); - let diff = Duration::from_millis(now - date).as_secs() as u32; - - for answer in &packet.answers { - let ttl = answer.get_ttl(); - if diff > ttl { - self.cache.invalidate(&question).await; - return None; - } - } - - trace!( - "Found cached value for {:?} {}", - question.qtype, - question.name - ); - - Some(packet) - } - - async fn lookup_fallback(&self, question: &DnsQuestion, server: (IpAddr, u16)) -> Packet { - let mut packet = Packet::new(); - - packet.header.id = self.request_id; - packet.header.questions = 1; - packet.header.recursion_desired = true; - packet - .questions - .push(DnsQuestion::new(question.name.to_string(), question.qtype)); - - let packet = match self.connection.request_packet(packet, server).await { - Ok(packet) => packet, - Err(e) => { - error!("Failed to complete nameserver request: {e}"); - let mut packet = Packet::new(); - packet.header.rescode = ResultCode::SERVFAIL; - packet - } - }; - - packet - } - - async fn lookup(&self, question: &DnsQuestion, server: (IpAddr, u16)) -> Packet { - if let Some(packet) = self.lookup_cache(question).await { - return packet; - }; - - if let Some(packet) = self.lookup_database(question).await { - return packet; - }; - - trace!( - "Attempting lookup of {:?} {} with ns {}", - question.qtype, - question.name, - server.0 - ); - - self.lookup_fallback(question, server).await - } - - #[async_recursion] - async fn recursive_lookup(&mut self, qname: &str, qtype: QueryType) -> Packet { - let question = DnsQuestion::new(qname.to_string(), qtype); - let mut ns = self.config.dns_fallback.clone(); - - loop { - let ns_copy = ns; - - let server = (ns_copy, 53); - let response = self.lookup(&question, server).await; - - if !response.answers.is_empty() && response.header.rescode == ResultCode::NOERROR { - self.cache - .insert(question, (response.clone(), get_time())) - .await; - return response; - } - - if response.header.rescode == ResultCode::NXDOMAIN { - self.cache - .insert(question, (response.clone(), get_time())) - .await; - return response; - } - - if let Some(new_ns) = response.get_resolved_ns(qname) { - ns = new_ns; - continue; - } - - let new_ns_name = match response.get_unresolved_ns(qname) { - Some(x) => x, - None => { - self.cache - .insert(question, (response.clone(), get_time())) - .await; - return response; - } - }; - - let recursive_response = self.recursive_lookup(new_ns_name, QueryType::A).await; - - if let Some(new_ns) = recursive_response.get_random_a() { - ns = new_ns; - } else { - self.cache - .insert(question, (response.clone(), get_time())) - .await; - return response; - } - } - } - - pub async fn handle_query(mut self) -> Result<()> { - let mut request = self.connection.read_packet().await?; - - let mut packet = Packet::new(); - packet.header.id = request.header.id; - packet.header.recursion_desired = true; - packet.header.recursion_available = true; - packet.header.response = true; - - if let Some(question) = request.questions.pop() { - trace!("Received query: {question:?}"); - - let result = self.recursive_lookup(&question.name, question.qtype).await; - packet.questions.push(question.clone()); - packet.header.rescode = result.header.rescode; - - for rec in result.answers { - trace!("Answer: {rec:?}"); - packet.answers.push(rec); - } - for rec in result.authorities { - trace!("Authority: {rec:?}"); - packet.authorities.push(rec); - } - for rec in result.resources { - trace!("Resource: {rec:?}"); - packet.resources.push(rec); - } - } else { - packet.header.rescode = ResultCode::FORMERR; - } - - self.connection.write_packet(packet).await?; - Ok(()) - } -} diff --git a/src/dns/server.rs b/src/dns/server.rs deleted file mode 100644 index 65d15df..0000000 --- a/src/dns/server.rs +++ /dev/null @@ -1,85 +0,0 @@ -use super::{ - binding::Binding, - packet::{question::DnsQuestion, Packet}, - resolver::Resolver, -}; -use crate::{config::Config, database::Database, Result}; -use moka::future::Cache; -use std::{net::SocketAddr, sync::Arc, time::Duration}; -use tokio::task::JoinHandle; -use tracing::{error, info}; - -pub struct DnsServer { - addr: SocketAddr, - config: Arc, - database: Arc, - cache: Cache, -} - -impl DnsServer { - pub async fn new(config: Config, database: Database) -> Result { - let addr = format!("[::]:{}", config.dns_port).parse::()?; - let cache = Cache::builder() - .time_to_live(Duration::from_secs(60 * 60)) - .max_capacity(config.dns_cache_size) - .build(); - - info!("Created DNS cache with size of {}", config.dns_cache_size); - - Ok(Self { - addr, - config: Arc::new(config), - database: Arc::new(database), - cache, - }) - } - - pub async fn run(&self) -> Result<(JoinHandle<()>, JoinHandle<()>)> { - let tcp = Binding::tcp(self.addr).await?; - let tcp_handle = self.listen(tcp); - - let udp = Binding::udp(self.addr).await?; - let udp_handle = self.listen(udp); - - info!( - "Fallback DNS Server is set to: {:?}", - self.config.dns_fallback - ); - info!( - "Listening for TCP and UDP traffic on [::]:{}", - self.config.dns_port - ); - - Ok((udp_handle, tcp_handle)) - } - - fn listen(&self, mut binding: Binding) -> JoinHandle<()> { - let config = self.config.clone(); - let database = self.database.clone(); - let cache = self.cache.clone(); - tokio::spawn(async move { - let mut id = 0; - loop { - let Ok(connection) = binding.connect().await else { continue }; - info!("Received request on {}", binding.name()); - - let resolver = Resolver::new( - id, - connection, - config.clone(), - database.clone(), - cache.clone(), - ); - - let name = binding.name().to_string(); - tokio::spawn(async move { - if let Err(err) = resolver.handle_query().await { - error!("{} request {} failed: {:?}", name, id, err); - }; - }); - - id += 1; - } - }) - } -} diff --git a/src/io/log.c b/src/io/log.c new file mode 100644 index 0000000..ddf56ff --- /dev/null +++ b/src/io/log.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include + +#include "log.h" + +#ifdef LOG + +void logmsg(LogLevel level, const char* msg, ...) { + + INIT_LOG_BOUNDS + INIT_LOG_BUFFER(buffer) + + time_t now = time(NULL); + struct tm *tm = localtime(&now); + APPEND(buffer, "\x1b[97m%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); + + switch (level) { + case DEBUG: + APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 95, "DEBUG"); + break; + case TRACE: + APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 96, "TRACE"); + break; + case INFO: + APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 92, "INFO"); + break; + case WARN: + APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 93, "WARN"); + break; + case ERROR: + APPEND(buffer, "\x1b[%dm%s\x1b[97m ", 91, "ERROR"); + break; + break; + } + + va_list valist; + va_start(valist, msg); + t += vsnprintf(buffer + t, BUF_LENGTH - t, msg, valist); + va_end(valist); + + APPEND(buffer, "\n"); + + fwrite(&buffer, t, 1, stdout); +} + +#endif \ No newline at end of file diff --git a/src/io/log.h b/src/io/log.h new file mode 100644 index 0000000..c2fbd90 --- /dev/null +++ b/src/io/log.h @@ -0,0 +1,45 @@ +#pragma once + +#include + +#define LOG +#ifdef LOG + +typedef enum { + DEBUG, + TRACE, + INFO, + WARN, + ERROR, +} LogLevel; + +#define BUF_LENGTH 256 +#define INIT_LOG_BUFFER(name) char name[BUF_LENGTH]; +#define INIT_LOG_BOUNDS int t = 0; +#define APPEND(buffer, msg, ...) t += snprintf(buffer + t, BUF_LENGTH - t, msg, ##__VA_ARGS__); +#define LOGONLY(code) code + +void logmsg(LogLevel level, const char* msg, ...) + __attribute__ ((__format__(printf, 2, 3))); + +#define DEBUG(msg, ...) logmsg(DEBUG, msg, ##__VA_ARGS__) +#define TRACE(msg, ...) logmsg(TRACE, msg, ##__VA_ARGS__) +#define INFO(msg, ...) logmsg(INFO, msg, ##__VA_ARGS__) +#define WARN(msg, ...) logmsg(WARN, msg, ##__VA_ARGS__) +#define ERROR(msg, ...) logmsg(ERROR, msg, ##__VA_ARGS__) + +#else + +#define BUF_LENGTH +#define INIT_LOG_BUFFER(name) +#define INIT_LOG_BOUNDS +#define APPEND(buffer, msg, ...) +#define LOGONLY(code) + +#define DEBUG(msg, ...) +#define TRACE(msg, ...) +#define INFO(msg, ...) +#define WARN(msg, ...) +#define ERROR(msg, ...) + +#endif \ No newline at end of file diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..13dae57 --- /dev/null +++ b/src/main.c @@ -0,0 +1,32 @@ +#include "server/server.h" + +#include +#include + +#define DEFAULT_PORT 53 + +static uint16_t get_port(const char* port_str) { + if (port_str == NULL) { + return DEFAULT_PORT; + } + + uint16_t port; + if ((port = strtoul(port_str, NULL, 10)) == 0) { + return DEFAULT_PORT; + } + + return port; +} + +int main(void) { + + const char* port_str = getenv("PORT"); + uint16_t port = get_port(port_str); + + Server server; + server_init(port, &server); + server_run(&server); + server_free(&server); + + return EXIT_SUCCESS; +} diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 679e87b..0000000 --- a/src/main.rs +++ /dev/null @@ -1,64 +0,0 @@ -use std::time::{SystemTime, UNIX_EPOCH}; - -use config::Config; - -use database::Database; -use dotenv::dotenv; -use dns::server::DnsServer; -use tracing::{error, metadata::LevelFilter}; -use tracing_subscriber::{ - filter::filter_fn, prelude::__tracing_subscriber_SubscriberExt, util::SubscriberInitExt, Layer, -}; -use web::WebServer; - -mod config; -mod database; -mod dns; -mod web; - -type Error = Box; -pub type Result = std::result::Result; - -#[tokio::main] -async fn main() { - if let Err(err) = run().await { - error!("{err}") - }; -} - -async fn run() -> Result<()> { - dotenv().ok(); - - tracing_subscriber::registry() - .with( - tracing_subscriber::fmt::layer() - .with_filter(LevelFilter::TRACE) - .with_filter(filter_fn(|metadata| { - metadata.target().starts_with("wrapper") - })), - ) - .init(); - - let config = Config::new(); - let database = Database::new(config.clone()).await?; - - let dns_server = DnsServer::new(config.clone(), database.clone()).await?; - let (udp, tcp) = dns_server.run().await?; - - let web_server = WebServer::new(config, database).await?; - let web = web_server.run().await?; - - tokio::join!(udp).0?; - tokio::join!(tcp).0?; - tokio::join!(web).0?; - - Ok(()) -} - -pub fn get_time() -> u64 { - let start = SystemTime::now(); - let since_the_epoch = start - .duration_since(UNIX_EPOCH) - .expect("Time went backwards"); - since_the_epoch.as_millis() as u64 -} diff --git a/src/packet/buffer.c b/src/packet/buffer.c new file mode 100644 index 0000000..28dd73b --- /dev/null +++ b/src/packet/buffer.c @@ -0,0 +1,240 @@ +#include "buffer.h" + +#include +#include +#include + +struct PacketBuffer { + uint8_t* arr; + int capacity; + int index; + int size; +}; + +PacketBuffer* buffer_create(int capacity) { + PacketBuffer* buffer = malloc(sizeof(PacketBuffer)); + buffer->arr = malloc(capacity); + buffer->capacity = capacity; + buffer->size = 0; + buffer->index = 0; + return buffer; +} + +void buffer_free(PacketBuffer* buffer) { + free(buffer->arr); + free(buffer); +} + +void buffer_seek(PacketBuffer* buffer, int index) { + buffer->index = index; +} + +uint8_t buffer_read(PacketBuffer* buffer) { + if (buffer->index > buffer->size) { + return 0; + } + uint8_t data = buffer->arr[buffer->index]; + buffer->index++; + return data; +} + +uint16_t buffer_read_short(PacketBuffer* buffer) { + return + (uint16_t) buffer_read(buffer) << 8 | + (uint16_t) buffer_read(buffer); +} + +uint32_t buffer_read_int(PacketBuffer* buffer) { + return + (uint32_t) buffer_read(buffer) << 24 | + (uint32_t) buffer_read(buffer) << 16 | + (uint32_t) buffer_read(buffer) << 8 | + (uint32_t) buffer_read(buffer); +} + +uint8_t buffer_get(PacketBuffer* buffer, int index) { + if (index > buffer->size) { + return 0; + } + uint8_t data = buffer->arr[index]; + return data; +} + +uint8_t* buffer_get_range(PacketBuffer* buffer, int start, int len) { + uint8_t* arr = malloc(len); + for (int i = 0; i < len; i++) { + arr[i] = buffer_get(buffer, start + i); + } + return arr; +} + +uint16_t buffer_get_size(PacketBuffer* buffer) { + return (uint16_t) buffer->size + 1; +} + +static void write(uint8_t** buffer, uint8_t* size, uint8_t* capacity, uint8_t data) { + if (*size == *capacity) { + *capacity *= 2; + *buffer = realloc(*buffer, *capacity); + } + (*buffer)[*size] = data; + (*size)++; +} + +void buffer_read_qname(PacketBuffer* buffer, uint8_t** out) { + int index = buffer->index; + int jumped = 0; + + int max_jumps = 5; + int jumps_performed = 0; + + uint8_t length = 0; + uint8_t capacity = 8; + *out = malloc(capacity); + write(out, &length, &capacity, 0); + + while(1) { + if (jumps_performed > max_jumps) { + break; + } + + uint8_t len = buffer_get(buffer, index); + + if ((len & 0xC0) == 0xC0) { + if (jumped == 0) { + buffer_seek(buffer, index + 2); + } + + uint16_t b2 = (uint16_t) buffer_get(buffer, index + 1); + uint16_t offset = ((((uint16_t) len) ^ 0xC0) << 8) | b2; + index = (int) offset; + jumped = 1; + jumps_performed++; + continue; + } + + index++; + + if (len == 0) { + break; + } + + if (length > 1) { + write(out, &length, &capacity, '.'); + } + + uint8_t* range = buffer_get_range(buffer, index, len); + for (uint8_t i = 0; i < len; i++) { + write(out, &length, &capacity, range[i]); + } + free(range); + + index += (int) len; + } + + if (jumped == 0) { + buffer_seek(buffer, index); + } + + (*out)[0] = length - 1; +} + +void buffer_read_string(PacketBuffer* buffer, uint8_t** out) { + uint8_t len = buffer_read(buffer); + buffer_read_n(buffer, out, len); +} + +void buffer_read_n(PacketBuffer* buffer, uint8_t** out, uint8_t len) { + *out = malloc(len + 1); + *out[0] = len; + memcpy(*out + 1, buffer->arr + buffer->index, len); + buffer->index += len; +} + +void buffer_write(PacketBuffer* buffer, uint8_t data) { + if(buffer->index == buffer->capacity) { + buffer->capacity *= 2; + buffer->arr = realloc(buffer->arr, buffer->capacity); + } + if (buffer->size < buffer->index) { + buffer->size = buffer->index; + } + buffer->arr[buffer->index] = data; + buffer->index++; +} + +void buffer_write_short(PacketBuffer* buffer, uint16_t data) { + buffer_write(buffer, (uint8_t)(data >> 8)); + buffer_write(buffer, (uint8_t)(data & 0xFF)); +} + +void buffer_write_int(PacketBuffer* buffer, uint32_t data) { + buffer_write(buffer, (uint8_t)(data >> 24)); + buffer_write(buffer, (uint8_t)(data >> 16)); + buffer_write(buffer, (uint8_t)(data >> 8)); + buffer_write(buffer, (uint8_t)(data & 0xFF)); +} + +void buffer_write_qname(PacketBuffer* buffer, uint8_t* in) { + uint8_t part = 0; + uint8_t len = in[0]; + + buffer_write(buffer, 0); + + if (len == 0) { + return; + } + + for(uint8_t i = 0; i < len; i ++) { + if (in[i+1] == '.') { + buffer_set(buffer, part, buffer->index - (int)part - 1); + buffer_write(buffer, 0); + part = 0; + } else { + buffer_write(buffer, in[i+1]); + part++; + } + } + buffer_set(buffer, part, buffer->index - (int)part - 1); + buffer_write(buffer, 0); +} + +void buffer_write_string(PacketBuffer* buffer, uint8_t* in) { + buffer_write(buffer, in[0]); + buffer_write_n(buffer, in + 1, in[0]); +} + +void buffer_write_n(PacketBuffer* buffer, uint8_t* in, int len) { + if (buffer->size + len >= buffer->capacity) { + buffer->capacity *= 2; + buffer->capacity += len; + buffer->arr = realloc(buffer->arr, buffer->capacity); + } + memcpy(buffer->arr + buffer->index, in, len); + buffer->size += len; + buffer->index += len; +} + +void buffer_set(PacketBuffer* buffer, uint8_t data, int index) { + if (index > buffer->size) { + return; + } + buffer->arr[index] = data; +} + +void buffer_set_uint16_t(PacketBuffer* buffer, uint16_t data, int index) { + buffer_set(buffer, (uint8_t)(data >> 8), index); + buffer_set(buffer, (uint8_t)(data & 0xFF), index + 1); +} + +int buffer_get_index(PacketBuffer* buffer) { + return buffer->index; +} + +void buffer_step(PacketBuffer* buffer, int len) { + buffer->index += len; +} + +uint8_t* buffer_get_ptr(PacketBuffer* buffer) { + return buffer->arr; +} diff --git a/src/packet/buffer.h b/src/packet/buffer.h new file mode 100644 index 0000000..ad3145d --- /dev/null +++ b/src/packet/buffer.h @@ -0,0 +1,51 @@ +#pragma once + +#include + +typedef struct PacketBuffer PacketBuffer; + +PacketBuffer* buffer_create(int capacity); + +void buffer_free(PacketBuffer* buffer); + +void buffer_seek(PacketBuffer* buffer, int index); + +uint8_t buffer_read(PacketBuffer* buffer); + +uint16_t buffer_read_short(PacketBuffer* buffer); + +uint32_t buffer_read_int(PacketBuffer* buffer); + +uint8_t buffer_get(PacketBuffer* buffer, int index); + +uint8_t* buffer_get_range(PacketBuffer* buffer, int start, int len); + +uint16_t buffer_get_size(PacketBuffer* buffer); + +void buffer_read_qname(PacketBuffer* buffer, uint8_t** out); + +void buffer_read_string(PacketBuffer* buffer, uint8_t** out); + +void buffer_read_n(PacketBuffer* buffer, uint8_t** out, uint8_t len); + +void buffer_write(PacketBuffer* buffer, uint8_t data); + +void buffer_write_short(PacketBuffer* buffer, uint16_t data); + +void buffer_write_int(PacketBuffer* buffer, uint32_t data); + +void buffer_write_qname(PacketBuffer* buffer, uint8_t* in); + +void buffer_write_string(PacketBuffer* buffer, uint8_t* in); + +void buffer_write_n(PacketBuffer* buffer, uint8_t* in, int len); + +void buffer_set(PacketBuffer* buffer, uint8_t data, int index); + +void buffer_set_uint16_t(PacketBuffer* buffer, uint16_t data, int index); + +int buffer_get_index(PacketBuffer* buffer); + +void buffer_step(PacketBuffer* buffer, int len); + +uint8_t* buffer_get_ptr(PacketBuffer* buffer); diff --git a/src/packet/header.c b/src/packet/header.c new file mode 100644 index 0000000..fd601ce --- /dev/null +++ b/src/packet/header.c @@ -0,0 +1,93 @@ +#include "header.h" +#include "buffer.h" + +#include +#include +#include + +uint8_t rescode_to_id(ResultCode code) { + switch(code) { + case NOERROR: + return 0; + case FORMERR: + return 1; + case SERVFAIL: + return 2; + case NXDOMAIN: + return 3; + case NOTIMP: + return 4; + case REFUSED: + return 5; + default: + return 2; + } +} + +ResultCode rescode_from_id(uint8_t id) { + switch(id) { + case 0: + return NOERROR; + case 1: + return FORMERR; + case 2: + return SERVFAIL; + case 3: + return NXDOMAIN; + case 4: + return NOTIMP; + case 5: + return REFUSED; + default: + return FORMERR; + } +} + +void read_header(PacketBuffer* buffer, Header* header) { + // memset(header, 0, sizeof(Header)); + header->id = buffer_read_short(buffer); + + uint8_t a = buffer_read(buffer); + header->recursion_desired = (a & (1 << 0)) > 0; + header->truncated_message = (a & (1 << 1)) > 0; + header->authorative_answer = (a & (1 << 2)) > 0; + header->opcode = (a >> 3) & 0x0F; + header->response = (a & (1 << 7)) > 0; + + uint8_t b = buffer_read(buffer); + header->rescode = rescode_from_id(b & 0x0F); + header->checking_disabled = (b & (1 << 4)) > 0; + header->authed_data = (b& (1 << 4)) > 0; + header->z = (b & (1 << 6)) > 0; + header->recursion_available = (b & (1 << 7)) > 0; + + header->questions = buffer_read_short(buffer); + header->answers = buffer_read_short(buffer); + header->authoritative_entries = buffer_read_short(buffer); + header->resource_entries = buffer_read_short(buffer); +} + +void write_header(PacketBuffer* buffer, Header* header) { + buffer_write_short(buffer, header->id); + + buffer_write(buffer, + ((uint8_t) header->recursion_desired) | + ((uint8_t) header->truncated_message << 1) | + ((uint8_t) header->authorative_answer << 2) | + (header->opcode << 3) | + ((uint8_t) header->response << 7) + ); + + buffer_write(buffer, + (rescode_to_id(header->rescode)) | + ((uint8_t) header->checking_disabled << 4) | + ((uint8_t) header->authed_data << 5) | + ((uint8_t) header->z << 6) | + ((uint8_t) header->recursion_available << 7) + ); + + buffer_write_short(buffer, header->questions); + buffer_write_short(buffer, header->answers); + buffer_write_short(buffer, header->authoritative_entries); + buffer_write_short(buffer, header->resource_entries); +} diff --git a/src/packet/header.h b/src/packet/header.h new file mode 100644 index 0000000..d9a8cea --- /dev/null +++ b/src/packet/header.h @@ -0,0 +1,41 @@ +#pragma once + +#include "buffer.h" + +#include + +typedef enum { + NOERROR, // 0 + FORMERR, // 1 + SERVFAIL, // 2 + NXDOMAIN, // 3, + NOTIMP, // 4 + REFUSED, // 5 +} ResultCode; + +uint8_t rescode_to_id(ResultCode code); +ResultCode rescode_from_id(uint8_t id); + +typedef struct { + uint16_t id; + + bool recursion_desired; // 1 bit + bool truncated_message; // 1 bit + bool authorative_answer; // 1 bit + uint8_t opcode; // 4 bits + bool response; // 1 bit + + ResultCode rescode; // 4 bits + bool checking_disabled; // 1 bit + bool authed_data; // 1 bit + bool z; // 1 bit + bool recursion_available; // 1 bit + + uint16_t questions; // 16 bits + uint16_t answers; // 16 bits + uint16_t authoritative_entries; // 16 bits + uint16_t resource_entries; // 16 bits +} Header; + +void read_header(PacketBuffer* buffer, Header* header); +void write_header(PacketBuffer* buffer, Header* header); diff --git a/src/packet/packet.c b/src/packet/packet.c new file mode 100644 index 0000000..9b1159d --- /dev/null +++ b/src/packet/packet.c @@ -0,0 +1,171 @@ +#include "packet.h" +#include "buffer.h" +#include "header.h" +#include "question.h" +#include "record.h" + +#include +#include +#include + +void read_packet(PacketBuffer* buffer, Packet* packet) { + read_header(buffer, &packet->header); + + packet->questions = malloc(sizeof(Question) * packet->header.questions); + for(uint16_t i = 0; i < packet->header.questions; i++) { + read_question(buffer, &packet->questions[i]); + } + + packet->answers = malloc(sizeof(Record) * packet->header.answers); + for(uint16_t i = 0; i < packet->header.answers; i++) { + read_record(buffer, &packet->answers[i]); + } + + packet->authorities = malloc(sizeof(Record) * packet->header.authoritative_entries); + for(uint16_t i = 0; i < packet->header.authoritative_entries; i++) { + read_record(buffer, &packet->authorities[i]); + } + + packet->resources = malloc(sizeof(Record) * packet->header.resource_entries); + for(uint16_t i = 0; i < packet->header.resource_entries; i++) { + read_record(buffer, &packet->resources[i]); + } +} + +void write_packet(PacketBuffer* buffer, Packet* packet) { + write_header(buffer, &packet->header); + + for(uint16_t i = 0; i < packet->header.questions; i++) { + write_question(buffer, &packet->questions[i]); + } + + for(uint16_t i = 0; i < packet->header.answers; i++) { + write_record(buffer, &packet->answers[i]); + } + + for(uint16_t i = 0; i < packet->header.authoritative_entries; i++) { + write_record(buffer, &packet->authorities[i]); + } + + for(uint16_t i = 0; i < packet->header.resource_entries; i++) { + write_record(buffer, &packet->resources[i]); + } +} + +void free_packet(Packet* packet) { + + for(uint16_t i = 0; i < packet->header.questions; i++) { + free_question(&packet->questions[i]); + } + free(packet->questions); + + for(uint16_t i = 0; i < packet->header.answers; i++) { + free_record(&packet->answers[i]); + } + free(packet->answers); + + for(uint16_t i = 0; i < packet->header.authoritative_entries; i++) { + free_record(&packet->authorities[i]); + } + free(packet->authorities); + + for(uint16_t i = 0; i < packet->header.resource_entries; i++) { + free_record(&packet->resources[i]); + } + free(packet->resources); +} + +bool get_random_a(Packet* packet, IpAddr* addr) { + for (uint16_t i = 0; i < packet->header.answers; i++) { + Record record = packet->answers[i]; + if (record.type == A) { + create_ip_addr((char*) &record.data.a.addr, addr); + return true; + } else if (record.type == AAAA) { + create_ip_addr6((char*) &record.data.aaaa.addr, addr); + return true; + } + } + return false; +} + +static bool ends_with(uint8_t* full, uint8_t* end) { + uint8_t check = end[0]; + uint8_t len = full[0]; + + if (check > len) { + return false; + } + + for(uint8_t i = 0; i < check; i++) { + if (end[check - 1 - i] != full[len - 1 - i]) { + return false; + } + } + + return true; +} + +static bool equals(uint8_t* a, uint8_t* b) { + if (a[0] != b[0]) { + return false; + } + + for(uint8_t i = 1; i < a[0] + 1; i++) { + if(a[i] != b[i]) { + return false; + } + } + + return true; +} + +bool get_resolved_ns(Packet* packet, uint8_t* qname, IpAddr* addr) { + for (uint16_t i = 0; i < packet->header.authoritative_entries; i++) { + Record record = packet->authorities[i]; + if (record.type != NS) { + continue; + } + + if(!ends_with(qname, record.domain)) { + continue; + } + + for (uint16_t i = 0; i < packet->header.resource_entries; i++) { + Record resource = packet->resources[i]; + if (!equals(record.data.ns.host, resource.domain)) { + continue; + } + + if (resource.type == A) { + create_ip_addr((char*) &record.data.a.addr, addr); + return true; + } else if (resource.type == AAAA) { + create_ip_addr6((char*) &record.data.aaaa.addr, addr); + return true; + } + } + } + return false; +} + +bool get_unresoled_ns(Packet* packet, uint8_t* qname, Question* question) { + for (uint16_t i = 0; i < packet->header.authoritative_entries; i++) { + Record record = packet->authorities[i]; + if (record.type != NS) { + continue; + } + + if(!ends_with(qname, record.domain)) { + continue; + } + + uint8_t* host = record.data.ns.host; + + question->qtype = NS; + question->domain = malloc(host[0] + 1); + memcpy(question->domain, host, host[0] + 1); + return true; + } + return false; +} \ No newline at end of file diff --git a/src/packet/packet.h b/src/packet/packet.h new file mode 100644 index 0000000..aa1c35e --- /dev/null +++ b/src/packet/packet.h @@ -0,0 +1,23 @@ +#pragma once + +#include "buffer.h" +#include "question.h" +#include "header.h" +#include "record.h" +#include "../server/addr.h" + +typedef struct { + Header header; + Question* questions; + Record* answers; + Record* authorities; + Record* resources; +} Packet; + +void read_packet(PacketBuffer* buffer, Packet* packet); +void write_packet(PacketBuffer* buffer, Packet* packet); +void free_packet(Packet* packet); + +bool get_random_a(Packet* packet, IpAddr* addr); +bool get_resolved_ns(Packet* packet, uint8_t* qname, IpAddr* addr); +bool get_unresoled_ns(Packet* packet, uint8_t* qname, Question* question); diff --git a/src/packet/question.c b/src/packet/question.c new file mode 100644 index 0000000..c2807d0 --- /dev/null +++ b/src/packet/question.c @@ -0,0 +1,94 @@ +#include +#include + +#include "question.h" +#include "buffer.h" +#include "record.h" +#include "../io/log.h" + +void read_question(PacketBuffer* buffer, Question* question) { + buffer_read_qname(buffer, &question->domain); + + uint16_t qtype_num = buffer_read_short(buffer); + record_from_id(qtype_num, &question->qtype); + question->cls = buffer_read_short(buffer); + + INIT_LOG_BUFFER(log) + LOGONLY(print_question(question, log);) + TRACE("Reading question: %s", log); +} + +void write_question(PacketBuffer* buffer, Question* question) { + buffer_write_qname(buffer, question->domain); + + uint16_t id = record_to_id(question->qtype); + buffer_write_short(buffer, id); + + buffer_write_short(buffer, question->cls); + + INIT_LOG_BUFFER(log) + LOGONLY(print_question(question, log);) + TRACE("Writing question: %s", log); +} + +void free_question(Question* question) { + free(question->domain); +} + +void print_question(Question* question, char* buffer) { + INIT_LOG_BOUNDS + switch (question->cls) { + case 1: + APPEND(buffer, "IN ");; + break; + case 3: + APPEND(buffer, "CH "); + break; + case 4: + APPEND(buffer, "HS "); + break; + default: + APPEND(buffer, "?? "); + break; + } + switch(question->qtype) { + case UNKOWN: + APPEND(buffer, "UNKOWN "); + break; + case A: + APPEND(buffer, "A "); + break; + case NS: + APPEND(buffer, "NS "); + break; + case CNAME: + APPEND(buffer, "CNAME "); + break; + case SOA: + APPEND(buffer, "SOA "); + break; + case PTR: + APPEND(buffer, "PTR "); + break; + case MX: + APPEND(buffer, "MX "); + break; + case TXT: + APPEND(buffer, "TXT "); + break; + case AAAA: + APPEND(buffer, "AAAA "); + break; + case SRV: + APPEND(buffer, "SRV "); + break; + case CAA: + APPEND(buffer, "CAA "); + break; + break; + } + APPEND(buffer, "%.*s", + question->domain[0], + question->domain + 1 + ); +} \ No newline at end of file diff --git a/src/packet/question.h b/src/packet/question.h new file mode 100644 index 0000000..e8c385a --- /dev/null +++ b/src/packet/question.h @@ -0,0 +1,15 @@ +#pragma once + +#include "buffer.h" +#include "record.h" + +typedef struct { + uint8_t* domain; + RecordType qtype; + uint16_t cls; +} Question; + +void read_question(PacketBuffer* buffer, Question* question); +void write_question(PacketBuffer* buffer, Question* question); +void free_question(Question* question); +void print_question(Question* question, char* buffer); diff --git a/src/packet/record.c b/src/packet/record.c new file mode 100644 index 0000000..29c3bf0 --- /dev/null +++ b/src/packet/record.c @@ -0,0 +1,540 @@ +#include +#include +#include + +#include "record.h" +#include "buffer.h" +#include "../io/log.h" + +uint16_t record_to_id(RecordType type) { + switch (type) { + case A: + return 1; + case NS: + return 2; + case CNAME: + return 5; + case SOA: + return 6; + case PTR: + return 12; + case MX: + return 15; + case TXT: + return 16; + case AAAA: + return 28; + case SRV: + return 33; + case CAA: + return 257; + default: + return 0; + } +} + +void record_from_id(uint16_t i, RecordType* type) { + switch (i) { + case 1: + *type = A; + break; + case 2: + *type = NS; + break; + case 5: + *type = CNAME; + break; + case 6: + *type = SOA; + break; + case 12: + *type = PTR; + break; + case 15: + *type = MX; + break; + case 16: + *type = TXT; + break; + case 28: + *type = AAAA; + break; + case 33: + *type = SRV; + break; + case 257: + *type = CAA; + break; + default: + *type = UNKOWN; + } +} + +static void read_a_record(PacketBuffer* buffer, Record* record) { + ARecord data; + data.addr[0] = buffer_read(buffer); + data.addr[1] = buffer_read(buffer); + data.addr[2] = buffer_read(buffer); + data.addr[3] = buffer_read(buffer); + + record->data.a = data; +} + +static void read_ns_record(PacketBuffer* buffer, Record* record) { + NSRecord data; + buffer_read_qname(buffer, &data.host); + + record->data.ns = data; +} + +static void read_cname_record(PacketBuffer* buffer, Record* record) { + CNAMERecord data; + buffer_read_qname(buffer, &data.host); + + record->data.cname = data; +} + +static void read_soa_record(PacketBuffer* buffer, Record* record) { + SOARecord data; + buffer_read_qname(buffer, &data.mname); + buffer_read_qname(buffer, &data.nname); + data.serial = buffer_read_int(buffer); + data.refresh = buffer_read_int(buffer); + data.retry = buffer_read_int(buffer); + data.expire = buffer_read_int(buffer); + data.minimum = buffer_read_int(buffer); + + record->data.soa = data; +} + +static void read_ptr_record(PacketBuffer* buffer, Record* record) { + PTRRecord data; + buffer_read_qname(buffer, &data.pointer); + + record->data.ptr = data; +} + +static void read_mx_record(PacketBuffer* buffer, Record* record) { + MXRecord data; + data.priority = buffer_read_short(buffer); + buffer_read_qname(buffer, &data.host); + + record->data.mx = data; +} + +static void read_txt_record(PacketBuffer* buffer, Record* record) { + TXTRecord data; + data.len = 0; + data.text = malloc(sizeof(uint8_t*) * 2); + + uint8_t capacity = 2; + while (1) { + if (data.len >= capacity) { + capacity *= 2; + data.text = realloc(data.text, sizeof(uint8_t*) * capacity); + } + + buffer_read_string(buffer, &data.text[data.len]); + if(data.text[data.len][0] == 0) break; + data.len++; + } + + record->data.txt = data; +} + +static void read_aaaa_record(PacketBuffer* buffer, Record* record) { + AAAARecord data; + for (int i = 0; i < 16; i++) { + data.addr[i] = buffer_read(buffer); + } + + record->data.aaaa = data; +} + +static void read_srv_record(PacketBuffer* buffer, Record* record) { + SRVRecord data; + data.priority = buffer_read_short(buffer); + data.weight = buffer_read_short(buffer); + data.port = buffer_read_short(buffer); + buffer_read_qname(buffer, &data.target); + + record->data.srv = data; +} + +static void read_caa_record(PacketBuffer* buffer, Record* record, int header_pos) { + CAARecord data; + data.flags = buffer_read(buffer); + data.length = buffer_read(buffer); + buffer_read_n(buffer, &data.tag, data.length); + int value_len = ((int)record->len) + header_pos - buffer_get_index(buffer); + buffer_read_n(buffer, &data.value, (uint8_t)value_len); + + record->data.caa = data; +} + +void read_record(PacketBuffer* buffer, Record* record) { + buffer_read_qname(buffer, &record->domain); + + uint16_t qtype_num = buffer_read_short(buffer); + record_from_id(qtype_num, &record->type); + + record->cls = buffer_read_short(buffer); + record->ttl = buffer_read_int(buffer); + record->len = buffer_read_short(buffer); + + int header_pos = buffer_get_index(buffer); + + switch (record->type) { + case A: + read_a_record(buffer, record); + break; + case NS: + read_ns_record(buffer, record); + break; + case CNAME: + read_cname_record(buffer, record); + break; + case SOA: + read_soa_record(buffer, record); + break; + case PTR: + read_ptr_record(buffer, record); + break; + case MX: + read_mx_record(buffer, record); + break; + case TXT: + read_txt_record(buffer, record); + break; + case AAAA: + read_aaaa_record(buffer, record); + break; + case SRV: + read_srv_record(buffer, record); + break; + case CAA: + read_caa_record(buffer, record, header_pos); + break; + default: + buffer_step(buffer, record->len); + return; + } + + INIT_LOG_BUFFER(log) + LOGONLY(print_record(record, log);) + TRACE("Reading record: %s", log); +} + +static void write_a_record(PacketBuffer* buffer, Record* record) { + ARecord data = record->data.a; + buffer_write_short(buffer, 4); + buffer_write(buffer, record->data.a.addr[0]); + buffer_write(buffer, data.addr[1]); + buffer_write(buffer, data.addr[2]); + buffer_write(buffer, data.addr[3]); +} + +static void write_ns_record(PacketBuffer* buffer, Record* record) { + NSRecord data = record->data.ns; + int pos = buffer_get_index(buffer); + buffer_write_short(buffer, 0); + + buffer_write_qname(buffer, data.host); + + int size = buffer_get_index(buffer) - pos - 2; + buffer_set_uint16_t(buffer, (uint16_t)size, pos); +} + +static void write_cname_record(PacketBuffer* buffer, Record* record) { + CNAMERecord data = record->data.cname; + int pos = buffer_get_index(buffer); + buffer_write_short(buffer, 0); + + buffer_write_qname(buffer, data.host); + + int size = buffer_get_index(buffer) - pos - 2; + buffer_set_uint16_t(buffer, (uint16_t)size, pos); +} + +static void write_soa_record(PacketBuffer* buffer, Record* record) { + SOARecord data = record->data.soa; + int pos = buffer_get_index(buffer); + buffer_write_short(buffer, 0); + + buffer_write_qname(buffer, data.mname); + buffer_write_qname(buffer, data.nname); + buffer_write_int(buffer, data.serial); + buffer_write_int(buffer, data.refresh); + buffer_write_int(buffer, data.retry); + buffer_write_int(buffer, data.expire); + buffer_write_int(buffer, data.minimum); + + int size = buffer_get_index(buffer) - pos - 2; + buffer_set_uint16_t(buffer, (uint16_t)size, pos); +} + +static void write_ptr_record(PacketBuffer* buffer, Record* record) { + PTRRecord data = record->data.ptr; + int pos = buffer_get_index(buffer); + buffer_write_short(buffer, 0); + + buffer_write_qname(buffer, data.pointer); + + int size = buffer_get_index(buffer) - pos - 2; + buffer_set_uint16_t(buffer, (uint16_t)size, pos); +} + +static void write_mx_record(PacketBuffer* buffer, Record* record) { + MXRecord data = record->data.mx; + int pos = buffer_get_index(buffer); + buffer_write_short(buffer, 0); + + buffer_write_short(buffer, data.priority); + buffer_write_qname(buffer, data.host); + + int size = buffer_get_index(buffer) - pos - 2; + buffer_set_uint16_t(buffer, (uint16_t)size, pos); +} + +static void write_txt_record(PacketBuffer* buffer, Record* record) { + TXTRecord data = record->data.txt; + int pos = buffer_get_index(buffer); + buffer_write_short(buffer, 0); + + if(data.len == 0) { + return; + } + + for(uint8_t i = 0; i < data.len; i++) { + buffer_write_string(buffer, data.text[i]); + } + + int size = buffer_get_index(buffer) - pos - 2; + buffer_set_uint16_t(buffer, (uint16_t)size, pos); +} + +static void write_aaaa_record(PacketBuffer* buffer, Record* record) { + AAAARecord data = record->data.aaaa; + + buffer_write_short(buffer, 16); + + for (int i = 0; i < 16; i++) { + buffer_write(buffer, data.addr[i]); + } +} + +static void write_srv_record(PacketBuffer* buffer, Record* record) { + SRVRecord data = record->data.srv; + int pos = buffer_get_index(buffer); + buffer_write_short(buffer, 0); + + buffer_write_short(buffer, data.priority); + buffer_write_short(buffer, data.weight); + buffer_write_short(buffer, data.port); + buffer_write_qname(buffer, data.target); + + int size = buffer_get_index(buffer) - pos - 2; + buffer_set_uint16_t(buffer, (uint16_t)size, pos); +} + +static void write_caa_record(PacketBuffer* buffer, Record* record) { + CAARecord data = record->data.caa; + int pos = buffer_get_index(buffer); + buffer_write_short(buffer, 0); + buffer_write(buffer, data.flags); + buffer_write(buffer, data.length); + buffer_write_n(buffer, data.tag + 1, data.tag[0]); + buffer_write_n(buffer, data.value + 1, data.value[0]); + + int size = buffer_get_index(buffer) - pos - 2; + buffer_set_uint16_t(buffer, (uint16_t)size, pos); +} + +static void write_record_header(PacketBuffer* buffer, Record* record) { + buffer_write_qname(buffer, record->domain); + uint16_t id = record_to_id(record->type); + buffer_write_short(buffer, id); + buffer_write_short(buffer, record->cls); + buffer_write_int(buffer, record->ttl); +} + +void write_record(PacketBuffer* buffer, Record* record) { + switch(record->type) { + case A: + write_record_header(buffer, record); + write_a_record(buffer, record); + break; + case NS: + write_record_header(buffer, record); + write_ns_record(buffer, record); + break; + case CNAME: + write_record_header(buffer, record); + write_cname_record(buffer, record); + break; + case SOA: + write_record_header(buffer, record); + write_soa_record(buffer, record); + break; + case PTR: + write_record_header(buffer, record); + write_ptr_record(buffer, record); + break; + case MX: + write_record_header(buffer, record); + write_mx_record(buffer, record); + break; + case TXT: + write_record_header(buffer, record); + write_txt_record(buffer, record); + break; + case AAAA: + write_record_header(buffer, record); + write_aaaa_record(buffer, record); + break; + case SRV: + write_record_header(buffer, record); + write_srv_record(buffer, record); + break; + case CAA: + write_record_header(buffer, record); + write_caa_record(buffer, record); + break; + default: + break; + } + + INIT_LOG_BUFFER(log) + LOGONLY(print_record(record, log);) + TRACE("Writing record: %s", log); +} + +void free_record(Record* record) { + free(record->domain); + switch (record->type) { + case NS: + free(record->data.ns.host); + break; + case CNAME: + free(record->data.cname.host); + break; + case SOA: + free(record->data.soa.mname); + free(record->data.soa.nname); + break; + case PTR: + free(record->data.ptr.pointer); + break; + case MX: + free(record->data.mx.host); + break; + case TXT: + for (uint8_t i = 0; i < record->data.txt.len; i++) { + free(record->data.txt.text[i]); + } + free(record->data.txt.text); + break; + case SRV: + free(record->data.srv.target); + break; + case CAA: + free(record->data.caa.value); + free(record->data.caa.tag); + break; + default: + break; + } +} + +void print_record(Record* record, char* buffer) { + INIT_LOG_BOUNDS + switch(record->type) { + case UNKOWN: + APPEND(buffer, "UNKOWN"); + break; + case A: + APPEND(buffer, "A (%hhu.%hhu.%hhu.%hhu)", + record->data.a.addr[0], + record->data.a.addr[1], + record->data.a.addr[2], + record->data.a.addr[3] + ); + break; + case NS: + APPEND(buffer, "NS (%.*s)", + record->data.ns.host[0], + record->data.ns.host + 1 + ); + break; + case CNAME: + APPEND(buffer, "CNAME (%.*s)", + record->data.cname.host[0], + record->data.cname.host + 1 + ); + break; + case SOA: + APPEND(buffer, "SOA (%.*s %.*s %u %u %u %u %u)", + record->data.soa.mname[0], + record->data.soa.mname + 1, + record->data.soa.nname[0], + record->data.soa.nname + 1, + record->data.soa.serial, + record->data.soa.refresh, + record->data.soa.retry, + record->data.soa.expire, + record->data.soa.minimum + ); + break; + case PTR: + APPEND(buffer, "PTR (%.*s)", + record->data.ptr.pointer[0], + record->data.ptr.pointer + 1 + ); + break; + case MX: + APPEND(buffer, "MX (%.*s %hu)", + record->data.mx.host[0], + record->data.mx.host + 1, + record->data.mx.priority + ); + break; + case TXT: + APPEND(buffer, "TXT ("); + for(uint8_t i = 0; i < record->data.txt.len; i++) { + APPEND(buffer, "\"%.*s\"", + record->data.txt.text[i][0], + record->data.txt.text[i] + 1 + ); + } + APPEND(buffer, ")"); + break; + case AAAA: + APPEND(buffer, "AAAA ("); + for(int i = 0; i < 8; i++) { + APPEND(buffer, "%02hhx%02hhx:", + record->data.a.addr[i*2 + 0], + record->data.a.addr[i*2 + 1] + ); + } + APPEND(buffer, ":)"); + break; + case SRV: + APPEND(buffer, "SRV (%hu %hu %hu %.*s)", + record->data.srv.priority, + record->data.srv.weight, + record->data.srv.port, + record->data.srv.target[0], + record->data.srv.target + 1 + ); + break; + case CAA: + APPEND(buffer, "CAA (%hhu %.*s %.*s)", + record->data.caa.flags, + record->data.caa.tag[0], + record->data.caa.tag + 1, + record->data.caa.value[0], + record->data.caa.value + 1 + ); + break; + } +} \ No newline at end of file diff --git a/src/packet/record.h b/src/packet/record.h new file mode 100644 index 0000000..95bbbbe --- /dev/null +++ b/src/packet/record.h @@ -0,0 +1,101 @@ +#pragma once + +#include "buffer.h" + +#include + +typedef enum { + UNKOWN, + A, // 1 + NS, // 2 + CNAME, // 5 + SOA, // 6 + PTR, // 12 + MX, // 15 + TXT, // 16 + AAAA, // 28 + SRV, // 33 + CAA // 257 +} RecordType; + +uint16_t record_to_id(RecordType type); +void record_from_id(uint16_t i, RecordType* type); + +typedef struct { + uint8_t addr[4]; +} ARecord; + +typedef struct { + uint8_t* host; +} NSRecord; + +typedef struct { + uint8_t* host; +} CNAMERecord; + +typedef struct { + uint8_t* mname; + uint8_t* nname; + uint32_t serial; + uint32_t refresh; + uint32_t retry; + uint32_t expire; + uint32_t minimum; +} SOARecord; + +typedef struct { + uint8_t* pointer; +} PTRRecord; + +typedef struct { + uint16_t priority; + uint8_t* host; +} MXRecord; + +typedef struct TXTRecord { + uint8_t** text; + uint8_t len; +} TXTRecord; + +typedef struct { + uint8_t addr[16]; +} AAAARecord; + +typedef struct { + uint16_t priority; + uint16_t weight; + uint16_t port; + uint8_t* target; +} SRVRecord; + +typedef struct { + uint8_t flags; + uint8_t length; + uint8_t* tag; + uint8_t* value; +} CAARecord; + +typedef struct { + uint32_t ttl; + uint16_t cls; + uint16_t len; + uint8_t* domain; + RecordType type; + union data { + ARecord a; + NSRecord ns; + CNAMERecord cname; + SOARecord soa; + PTRRecord ptr; + MXRecord mx; + TXTRecord txt; + AAAARecord aaaa; + SRVRecord srv; + CAARecord caa; + } data; +} Record; + +void read_record(PacketBuffer* buffer, Record* record); +void write_record(PacketBuffer* buffer, Record* record); +void free_record(Record* record); +void print_record(Record* record, char* buffer); \ No newline at end of file diff --git a/src/server/addr.c b/src/server/addr.c new file mode 100644 index 0000000..982da13 --- /dev/null +++ b/src/server/addr.c @@ -0,0 +1,233 @@ +#include +#include +#include +#include +#include + +#include "addr.h" +#include "../io/log.h" + +void create_ip_addr(char* domain, IpAddr* addr) { + addr->type = V4; + memcpy(&addr->data.v4.s_addr, domain, 4); +} + +void create_ip_addr6(char* domain, IpAddr* addr) { + addr->type = V6; + memcpy(&addr->data.v6.__in6_u.__u6_addr8, domain, 16); +} + +void ip_addr_any(IpAddr* addr) { + addr->type = V4; + addr->data.v4.s_addr = htonl(INADDR_ANY); +} + +void ip_addr_any6(IpAddr* addr) { + addr->type = V6; + addr->data.v6 = in6addr_any; +} + +static struct sockaddr_in create_socket_addr_v4(IpAddr addr, uint16_t port) { + struct sockaddr_in socketaddr; + memset(&socketaddr, 0, sizeof(socketaddr)); + socketaddr.sin_family = AF_INET; + socketaddr.sin_port = htons(port); + socketaddr.sin_addr = addr.data.v4; + return socketaddr; +} + +static struct sockaddr_in6 create_socket_addr_v6(IpAddr addr, uint16_t port) { + struct sockaddr_in6 socketaddr; + memset(&socketaddr, 0, sizeof(socketaddr)); + socketaddr.sin6_family = AF_INET6; + socketaddr.sin6_port = htons(port); + socketaddr.sin6_addr = addr.data.v6; + return socketaddr; +} + +static size_t get_addr_len(AddrType type) { + if (type == V4) { + return sizeof(struct sockaddr_in); + } else if (type == V6) { + return sizeof(struct sockaddr_in6); + } else { + return 0; + } +} + +void create_socket_addr(uint16_t port, IpAddr addr, SocketAddr* socket) { + socket->type = addr.type; + if (addr.type == V4) { + socket->data.v4 = create_socket_addr_v4(addr, port); + } else if(addr.type == V6) { + socket->data.v6 = create_socket_addr_v6(addr, port); + } else { + ERROR("Tried to create socketaddr with invalid protocol type"); + exit(EXIT_FAILURE); + } + socket->len = get_addr_len(addr.type); +} + +void print_socket_addr(SocketAddr* addr, char* buffer) { + INIT_LOG_BOUNDS + if(addr->type == V4) { + APPEND(buffer, "%hhu.%hhu.%hhu.%hhu:%hu", + (uint8_t) ((uint32_t)addr->data.v4.sin_addr.s_addr >> 24), + (uint8_t) ((uint32_t)addr->data.v4.sin_addr.s_addr >> 16), + (uint8_t) ((uint32_t)addr->data.v4.sin_addr.s_addr >> 8), + (uint8_t) ((uint32_t)addr->data.v4.sin_addr.s_addr), + addr->data.v4.sin_port + ); + } else { + for(int i = 0; i < 8; i++) { + APPEND(buffer, "%02hhx%02hhx:", + addr->data.v6.sin6_addr.__in6_u.__u6_addr8[i*2 + 0], + addr->data.v6.sin6_addr.__in6_u.__u6_addr8[i*2 + 1] + ); + } + APPEND(buffer, ":[%hu]", addr->data.v6.sin6_port); + } +} + +#define ADDR_DOMAIN(addr, var) \ + struct sockaddr* var; \ + if (addr->type == V4) { \ + var = (struct sockaddr*) &addr->data.v4; \ + } else if (addr->type == V6) { \ + var = (struct sockaddr*) &addr->data.v6; \ + } else { \ + return -1; \ + } + +#define ADDR_AFNET(type, var) \ + int var; \ + if (type == V4) { \ + var = AF_INET; \ + } else if (type == V6) { \ + var = AF_INET6; \ + } else { \ + return -1; \ + } + +int32_t create_udp_socket(AddrType type, UdpSocket* sock) { + ADDR_AFNET(type, __domain) + sock->type = type; + sock->sockfd = socket(__domain, SOCK_DGRAM, 0); + return sock->sockfd; +} + +int32_t bind_udp_socket(SocketAddr* addr, UdpSocket* sock) { + if (addr->type == V6) { + int v6OnlyEnabled = 0; + int32_t res = setsockopt( + sock->sockfd, + IPPROTO_IPV6, + IPV6_V6ONLY, + &v6OnlyEnabled, + sizeof(v6OnlyEnabled) + ); + if (res < 0) return res; + } + ADDR_DOMAIN(addr, __addr) + return bind(sock->sockfd, __addr, addr->len); +} + +int32_t read_udp_socket(UdpSocket* socket, void* buffer, uint16_t len, SocketAddr* clientaddr) { + clientaddr->type = socket->type; + clientaddr->len = get_addr_len(socket->type); + ADDR_DOMAIN(clientaddr, __addr) + return recvfrom( + socket->sockfd, + buffer, + (size_t) len, + MSG_WAITALL, + __addr, + (uint32_t*) &clientaddr->len + ); +} + +int32_t write_udp_socket(UdpSocket* socket, void* buffer, uint16_t len, SocketAddr* clientaddr) { + ADDR_DOMAIN(clientaddr, __addr) + return sendto( + socket->sockfd, + buffer, + (size_t) len, + MSG_CONFIRM, + __addr, + (uint32_t) clientaddr->len + ); +} + +int32_t close_udp_socket(UdpSocket* socket) { + return close(socket->sockfd); +} + +int32_t create_tcp_socket(AddrType type, TcpSocket* sock) { + ADDR_AFNET(type, __domain) + sock->type = type; + sock->sockfd = socket(__domain, SOCK_STREAM, 0); + return sock->sockfd; +} + +int32_t bind_tcp_socket(SocketAddr* addr, TcpSocket* sock) { + if (addr->type == V6) { + int v6OnlyEnabled = 0; + int32_t res = setsockopt( + sock->sockfd, + IPPROTO_IPV6, + IPV6_V6ONLY, + &v6OnlyEnabled, + sizeof(v6OnlyEnabled) + ); + if (res < 0) return res; + } + ADDR_DOMAIN(addr, __addr) + return bind(sock->sockfd, __addr, addr->len); +} + +int32_t listen_tcp_socket(TcpSocket* socket, uint32_t max) { + return listen(socket->sockfd, max); +} + +int32_t accept_tcp_socket(TcpSocket* socket, TcpStream* stream) { + stream->clientaddr.type = socket->type; + memset(&stream->clientaddr, 0, sizeof(SocketAddr)); + SocketAddr* addr = &stream->clientaddr; + ADDR_DOMAIN(addr, __addr) + stream->streamfd = accept( + socket->sockfd, + __addr, + (uint32_t*) &stream->clientaddr.len + ); + return stream->streamfd; +} + +int32_t close_tcp_socket(TcpSocket* socket) { + return close(socket->sockfd); +} + +int32_t connect_tcp_stream(SocketAddr* servaddr, TcpStream* stream) { + TcpSocket socket; + int32_t res = create_tcp_socket(servaddr->type, &socket); + if (res < 0) return res; + stream->clientaddr = *servaddr; + stream->streamfd = socket.sockfd; + ADDR_DOMAIN(servaddr, __addr) + return connect( + socket.sockfd, + __addr, + servaddr->len + ); +} + +int32_t read_tcp_stream(TcpStream* stream, void* buffer, uint16_t len) { + return recv(stream->streamfd, buffer, len, 0); +} + +int32_t write_tcp_stream(TcpStream* stream, void* buffer, uint16_t len) { + return send(stream->streamfd, buffer, len, MSG_NOSIGNAL); +} + +int32_t close_tcp_stream(TcpStream* stream) { + return close(stream->streamfd); +} diff --git a/src/server/addr.h b/src/server/addr.h new file mode 100644 index 0000000..173c7fd --- /dev/null +++ b/src/server/addr.h @@ -0,0 +1,69 @@ +#pragma once + +#include "../packet/record.h" + +#include +#include +#include +#include + +typedef enum { + V4, + V6 +} AddrType; + +typedef struct { + AddrType type; + union { + struct in_addr v4; + struct in6_addr v6; + } data; +} IpAddr; + +void create_ip_addr(char* domain, IpAddr* addr); +void create_ip_addr6(char* domain, IpAddr* addr); +void ip_addr_any(IpAddr* addr); +void ip_addr_any6(IpAddr* addr); + +typedef struct { + AddrType type; + union { + struct sockaddr_in v4; + struct sockaddr_in6 v6; + } data; + size_t len; +} SocketAddr; + +void create_socket_addr(uint16_t port, IpAddr addr, SocketAddr* socket); +void print_socket_addr(SocketAddr* addr, char* buffer); + +typedef struct { + AddrType type; + uint32_t sockfd; +} UdpSocket; + +int32_t create_udp_socket(AddrType type, UdpSocket* socket); +int32_t bind_udp_socket(SocketAddr* addr, UdpSocket* socket); +int32_t read_udp_socket(UdpSocket* socket, void* buffer, uint16_t len, SocketAddr* clientaddr); +int32_t write_udp_socket(UdpSocket* socket, void* buffer, uint16_t len, SocketAddr* clientaddr); +int32_t close_udp_socket(UdpSocket* socket); + +typedef struct { + AddrType type; + uint32_t sockfd; +} TcpSocket; + +typedef struct { + SocketAddr clientaddr; + uint32_t streamfd; +} TcpStream; + +int32_t create_tcp_socket(AddrType type, TcpSocket* socket); +int32_t bind_tcp_socket(SocketAddr* addr, TcpSocket* socket); +int32_t listen_tcp_socket(TcpSocket* socket, uint32_t max); +int32_t accept_tcp_socket(TcpSocket* socket, TcpStream* stream); +int32_t close_tcp_socket(TcpSocket* socket); +int32_t connect_tcp_stream(SocketAddr* servaddr, TcpStream* stream); +int32_t read_tcp_stream(TcpStream* stream, void* buffer, uint16_t len); +int32_t write_tcp_stream(TcpStream* stream, void* buffer, uint16_t len); +int32_t close_tcp_stream(TcpStream* stream); diff --git a/src/server/binding.c b/src/server/binding.c new file mode 100644 index 0000000..47c62c6 --- /dev/null +++ b/src/server/binding.c @@ -0,0 +1,245 @@ +#include +#include +#include +#include +#include +#include + +#include "addr.h" +#include "binding.h" +#include "../io/log.h" + +static void create_udp_binding(UdpSocket* socket, uint16_t port) { + if (create_udp_socket(V6, socket) < 0) { + ERROR("Failed to create UDP socket: %s", strerror(errno)); + exit(EXIT_FAILURE); + } + + IpAddr addr; + ip_addr_any6(&addr); + + SocketAddr socketaddr; + create_socket_addr(port, addr, &socketaddr); + + if (bind_udp_socket(&socketaddr, socket) < 0) { + ERROR("Failed to bind UDP socket on port %hu: %s", port, strerror(errno)); + exit(EXIT_FAILURE); + } +} + +static void create_tcp_binding(TcpSocket* socket, uint16_t port) { + if (create_tcp_socket(V6, socket) < 0) { + ERROR("Failed to create TCP socket: %s", strerror(errno)); + exit(EXIT_FAILURE); + } + + IpAddr addr; + ip_addr_any6(&addr); + + SocketAddr socketaddr; + create_socket_addr(port, addr, &socketaddr); + + if (bind_tcp_socket(&socketaddr, socket) < 0) { + ERROR("Failed to bind TCP socket on port %hu: %s", port, strerror(errno)); + exit(EXIT_FAILURE); + } + + if (listen_tcp_socket(socket, 5) < 0) { + ERROR("Failed to listen on TCP socket: %s", strerror(errno)); + exit(EXIT_FAILURE); + } +} + +void create_binding(BindingType type, uint16_t port, Binding* binding) { + binding->type = type; + if (type == UDP) { + create_udp_binding(&binding->sock.udp, port); + } else if(type == TCP) { + create_tcp_binding(&binding->sock.tcp, port); + } else { + exit(EXIT_FAILURE); + } +} + +void free_binding(Binding* binding) { + if (binding->type == UDP) { + close_udp_socket(&binding->sock.udp); + } else if(binding->type == TCP) { + close_tcp_socket(&binding->sock.tcp); + } +} + +bool accept_connection(Binding* binding, Connection* connection) { + connection->type = binding->type; + + if(binding->type == UDP) { + connection->sock.udp.udp = binding->sock.udp; + memset(&connection->sock.udp.clientaddr, 0, sizeof(SocketAddr)); + return true; + } + + if (accept_tcp_socket(&binding->sock.tcp, &connection->sock.tcp) < 0) { + ERROR("Failed to accept TCP connection: %s", strerror(errno)); + return false; + } + + return true; +} + +static void read_to_packet(uint8_t* buf, uint16_t len, Packet* packet) { + PacketBuffer* pkbuffer = buffer_create(len); + for (int i = 0; i < len; i++) { + buffer_write(pkbuffer, buf[i]); + } + buffer_seek(pkbuffer, 0); + read_packet(pkbuffer, packet); + buffer_free(pkbuffer); +} + +static bool read_udp(Connection* connection, Packet* packet) { + uint8_t buffer[512]; + int32_t n = read_udp_socket( + &connection->sock.udp.udp, + buffer, + 512, + &connection->sock.udp.clientaddr + ); + if (n < 0) { + return false; + } + read_to_packet(buffer, n, packet); + return true; +} + +static bool read_tcp(Connection* connection, Packet* packet) { + uint16_t len; + if ( read_tcp_stream( + &connection->sock.tcp, + &len, + sizeof(uint16_t) + ) < 0) { + return false; + } + + uint8_t buffer[len]; + if ( read_tcp_stream( + &connection->sock.tcp, + buffer, + len + ) < 0) { + return false; + } + + read_to_packet(buffer, len, packet); + return true; +} + +bool read_connection(Connection* connection, Packet* packet) { + if (connection->type == UDP) { + return read_udp(connection, packet); + } else if (connection->type == TCP) { + return read_tcp(connection, packet); + } + return false; +} + +static bool write_udp(Connection* connection, uint8_t* buf, uint16_t len) { + //if (len > 512) { + buf[2] = buf[2] | 0x03; + // len = 512; + // } + return write_udp_socket( + &connection->sock.udp.udp, + buf, + len, + &connection->sock.udp.clientaddr + ) == len; +} + +static bool write_tcp(Connection* connection, uint8_t* buf, uint16_t len) { + len = htons(len); + if (write_tcp_stream( + &connection->sock.tcp, + &len, + sizeof(uint16_t) + ) < 0) { + return false; + } + + if (write_tcp_stream( + &connection->sock.tcp, + buf, + len + ) < 0) { + return false; + } + + return true; +} + +bool write_connection(Connection* connection, Packet* packet) { + PacketBuffer* pkbuffer = buffer_create(64); + write_packet(pkbuffer, packet); + uint16_t len = buffer_get_size(pkbuffer); + uint8_t* buffer = buffer_get_ptr(pkbuffer); + bool success = false; + if(connection->type == UDP) { + success = write_udp(connection, buffer, len); + } else if(connection->type == TCP) { + success = write_tcp(connection, buffer, len); + }; + buffer_free(pkbuffer); + return success; +} + +void free_connection(Connection* connection) { + if (connection->type == TCP) { + close_tcp_stream(&connection->sock.tcp); + } +} + +static bool create_udp_request(SocketAddr* addr, Connection* request) { + if ( create_udp_socket(addr->type, &request->sock.udp.udp) < 0) { + ERROR("Failed to connect to UDP socket: %s", strerror(errno)); + return false; + } + request->sock.udp.clientaddr = *addr; + return true; +} + +static bool create_tcp_request(SocketAddr* addr, Connection* request) { + if( connect_tcp_stream(addr, &request->sock.tcp) < 0) { + ERROR("Failed to connect to TCP socket: %s", strerror(errno)); + return false; + } + return true; +} + +bool create_request(BindingType type, SocketAddr* addr, Connection* request) { + request->type = type; + if (type == UDP) { + return create_udp_request(addr, request); + } else if (type == TCP) { + return create_tcp_request(addr, request); + } else { + return true; + } +} + +bool request_packet(Connection* request, Packet* in, Packet* out) { + if (!write_connection(request, in)) { + return false; + } + if (!read_connection(request, out)) { + return false; + } + return true; +} + +void free_request(Connection* connection) { + if (connection->type == UDP) { + close_udp_socket(&connection->sock.udp.udp); + } else if (connection->type == TCP) { + close_tcp_stream(&connection->sock.tcp); + } +} diff --git a/src/server/binding.h b/src/server/binding.h new file mode 100644 index 0000000..e2e6160 --- /dev/null +++ b/src/server/binding.h @@ -0,0 +1,42 @@ +#pragma once + +#include "../packet/packet.h" +#include "addr.h" + +#include + +typedef enum { + UDP, + TCP +} BindingType; + +typedef struct { + BindingType type; + union { + UdpSocket udp; + TcpSocket tcp; + } sock; +} Binding; + +void create_binding(BindingType type, uint16_t port, Binding* binding); +void free_binding(Binding* binding); + +typedef struct { + BindingType type; + union { + struct { + UdpSocket udp; + SocketAddr clientaddr; + } udp; + TcpStream tcp; + } sock; +} Connection; + +bool accept_connection(Binding* binding, Connection* connection); +bool read_connection(Connection* connection, Packet* packet); +bool write_connection(Connection* connection, Packet* packet); +void free_connection(Connection* connection); + +bool create_request(BindingType type, SocketAddr* addr, Connection* request); +bool request_packet(Connection* request, Packet* in, Packet* out); +void free_request(Connection* connection); diff --git a/src/server/resolver.c b/src/server/resolver.c new file mode 100644 index 0000000..e05f365 --- /dev/null +++ b/src/server/resolver.c @@ -0,0 +1,166 @@ +#include +#include +#include + +#include "resolver.h" +#include "addr.h" +#include "binding.h" +#include "../io/log.h" + +static bool lookup( + Question* question, + Packet* response, + BindingType type, + SocketAddr addr +) { + INIT_LOG_BUFFER(log) + LOGONLY(print_socket_addr(&addr, log);) + TRACE("Attempting lookup on fallback dns %s", log); + + Connection request; + if (!create_request(type, &addr, &request)) { + return false; + } + + Packet req; + memset(&req, 0, sizeof(Packet)); + req.header.id = response->header.id; + req.header.opcode = response->header.opcode; + req.header.questions = 1; + req.header.recursion_desired = true; + req.questions = malloc(sizeof(Question)); + req.questions[0] = *question; + + if (!request_packet(&request, &req, response)) { + free_request(&request); + free(req.questions); + ERROR("Failed to request fallback dns: %s", strerror(errno)); + return false; + } + + free_request(&request); + free(req.questions); + return true; +} + +static bool search(Question* question, Packet* result, BindingType type) { + IpAddr addr; + char ip[4] = {1, 1, 1, 1}; + create_ip_addr(ip, &addr); + + uint16_t port = 53; + SocketAddr saddr; + create_socket_addr(port, addr, &saddr); + + while(1) { + if (!lookup(question, result, type, saddr)) { + return false; + } + + if (result->header.answers > 0 && result->header.rescode == NOERROR) { + return true; + } + + if (result->header.rescode == NXDOMAIN) { + return true; + } + + if (get_resolved_ns(result, question->domain, &addr)) { + continue; + } + + Question new_question; + if (!get_unresoled_ns(result, question->domain, &new_question)) { + return true; + } + + Packet recurse; + if (!search(&new_question, &recurse, type)) { + return false; + } + + free_question(&new_question); + + IpAddr random; + if (!get_random_a(&recurse, &random)) { + free_packet(&recurse); + return true; + } else { + free_packet(&recurse); + addr = random; + } + } +} + +static void push_records(Record* from, uint8_t from_len, Record** to, uint8_t to_len) { + if(from_len < 1) return; + *to = realloc(*to, sizeof(Record) * (from_len + to_len)); + memcpy(*to + to_len, from, from_len * sizeof(Record)); +} + +static void push_questions(Question* from, uint8_t from_len, Question** to, uint8_t to_len) { + if(from_len < 1) return; + *to = realloc(*to, sizeof(Question) * (from_len + to_len)); + memcpy(*to + to_len, from, from_len * sizeof(Question)); +} + +void handle_query(Packet* request, Packet* response, BindingType type) { + memset(response, 0, sizeof(Packet)); + response->header.id = request->header.id; + response->header.opcode = request->header.opcode; + response->header.recursion_desired = true; + response->header.recursion_available = true; + response->header.response = true; + + if (request->header.questions < 1) { + response->header.response = FORMERR; + return; + } + + for (uint16_t i = 0; i < request->header.questions; i++) { + Packet result; + memset(&result, 0, sizeof(Packet)); + result.header.id = response->header.id; + if (!search(&request->questions[i], &result, type)) { + response->header.response = SERVFAIL; + break; + } + + push_questions( + result.questions, + result.header.questions, + &response->questions, + response->header.questions + ); + response->header.questions += result.header.questions; + + push_records( + result.answers, + result.header.answers, + &response->answers, + response->header.answers + ); + response->header.answers += result.header.answers; + + push_records( + result.authorities, + result.header.authoritative_entries, + &response->authorities, + response->header.authoritative_entries + ); + response->header.authoritative_entries += result.header.authoritative_entries; + + push_records( + result.resources, + result.header.resource_entries, + &response->resources, + response->header.resource_entries + ); + response->header.resource_entries += result.header.resource_entries; + + free(result.questions); + free(result.answers); + free(result.authorities); + free(result.resources); + } +} \ No newline at end of file diff --git a/src/server/resolver.h b/src/server/resolver.h new file mode 100644 index 0000000..79b4825 --- /dev/null +++ b/src/server/resolver.h @@ -0,0 +1,6 @@ +#pragma once + +#include "../packet/packet.h" +#include "binding.h" + +void handle_query(Packet* request, Packet* response, BindingType type); \ No newline at end of file diff --git a/src/server/server.c b/src/server/server.c new file mode 100644 index 0000000..c8975ee --- /dev/null +++ b/src/server/server.c @@ -0,0 +1,100 @@ +#define _POSIX_SOURCE +#include +#include +#include +#include +#include +#include + +#include "addr.h" +#include "server.h" +#include "resolver.h" +#include "../io/log.h" + +static pid_t udp, tcp; + +void server_init(uint16_t port, Server* server) { + INFO("Server port set to %hu", port); + create_binding(UDP, port, &server->udp); + create_binding(TCP, port, &server->tcp); +} + +static void server_listen(Binding* binding) { + while(1) { + + Connection connection; + if (!accept_connection(binding, &connection)) { + ERROR("Failed to accept connection"); + continue; + } + + Packet request; + if (!read_connection(&connection, &request)) { + ERROR("Failed to read connection"); + free_connection(&connection); + continue; + } + + if(fork() != 0) { + free_packet(&request); + free_connection(&connection); + continue; + } + + INFO("Recieved packet request ID %hu", request.header.id); + + Packet response; + handle_query(&request, &response, connection.type); + + if (!write_connection(&connection, &response)) { + ERROR("Failed to respond to connection ID %hu: %s", request.header.id, strerror(errno)); + } + + free_packet(&request); + free_packet(&response); + free_connection(&connection); + exit(EXIT_SUCCESS); + } +} + +static void signal_handler() { + printf("\n"); + kill(udp, SIGTERM); + kill(tcp, SIGTERM); +} + +void server_run(Server* server) { + if ((udp = fork()) == 0) { + INFO("Listening for connections on UDP"); + server_listen(&server->udp); + exit(EXIT_SUCCESS); + } + + if ((tcp = fork()) == 0) { + INFO("Listening for connections on TCP"); + server_listen(&server->tcp); + exit(EXIT_SUCCESS); + } + + signal(SIGINT, signal_handler); + + int status; + waitpid(udp, &status, 0); + if (status == 0) { + INFO("UDP process closed successfully"); + } else { + ERROR("UDP process failed with error code %d", status); + } + + waitpid(tcp, &status, 0); + if (status == 0) { + INFO("TCP process closed successfully"); + } else { + ERROR("TCP process failed with error code %d", status); + } +} + +void server_free(Server* server) { + free_binding(&server->udp); + free_binding(&server->tcp); +} diff --git a/src/server/server.h b/src/server/server.h new file mode 100644 index 0000000..c9509f2 --- /dev/null +++ b/src/server/server.h @@ -0,0 +1,12 @@ +#pragma once + +#include "binding.h" + +typedef struct { + Binding udp; + Binding tcp; +} Server; + +void server_init(uint16_t port, Server* server); +void server_run(Server* server); +void server_free(Server* server); \ No newline at end of file diff --git a/src/web/api.rs b/src/web/api.rs deleted file mode 100644 index 1fddb5f..0000000 --- a/src/web/api.rs +++ /dev/null @@ -1,156 +0,0 @@ -use std::net::IpAddr; - -use axum::{ - extract::Query, - response::Response, - routing::{get, post, put, delete}, - Extension, Router, -}; -use moka::future::Cache; -use rand::distributions::{Alphanumeric, DistString}; -use serde::Deserialize; -use tower_cookies::{Cookie, Cookies}; - -use crate::{config::Config, database::Database, dns::packet::record::DnsRecord}; - -use super::{ - extract::{Authorized, Body, RequestIp}, - http::{json, text}, -}; - -pub fn router() -> Router { - Router::new() - .route("/login", post(login)) - .route("/domains", get(list_domains)) - .route("/domains", delete(delete_domain)) - .route("/records", get(get_domain)) - .route("/records", put(add_record)) -} - -async fn list_domains(_: Authorized, Extension(database): Extension) -> Response { - let domains = match database.get_domains().await { - Ok(domains) => domains, - Err(err) => return text(500, &format!("{err}")), - }; - - let Ok(domains) = serde_json::to_string(&domains) else { - return text(500, "Failed to fetch domains") - }; - - json(200, &domains) -} - -#[derive(Deserialize)] -struct DomainRequest { - domain: String, -} - -async fn get_domain( - _: Authorized, - Extension(database): Extension, - Query(query): Query, -) -> Response { - let records = match database.get_domain(&query.domain).await { - Ok(records) => records, - Err(err) => return text(500, &format!("{err}")), - }; - - let Ok(records) = serde_json::to_string(&records) else { - return text(500, "Failed to fetch records") - }; - - json(200, &records) -} - -async fn delete_domain( - _: Authorized, - Extension(database): Extension, - Body(body): Body, -) -> Response { - - let Ok(request) = serde_json::from_str::(&body) else { - return text(400, "Missing request parameters") - }; - - let Ok(domains) = database.get_domains().await else { - return text(500, "Failed to delete domain") - }; - - if !domains.contains(&request.domain) { - return text(400, "Domain does not exist") - } - - if database.delete_domain(request.domain).await.is_err() { - return text(500, "Failed to delete domain") - }; - - return text(204, "Successfully deleted domain") -} - -async fn add_record( - _: Authorized, - Extension(database): Extension, - Body(body): Body, -) -> Response { - let Ok(record) = serde_json::from_str::(&body) else { - return text(400, "Invalid DNS record") - }; - - let allowed = record.get_qtype().allowed_actions(); - if !allowed.1 { - return text(400, "Not allowed to create record") - } - - let Ok(records) = database.get_records(&record.get_domain(), record.get_qtype()).await else { - return text(500, "Failed to complete record check"); - }; - - if !records.is_empty() && !allowed.0 { - return text(400, "Not allowed to create duplicate record") - }; - - if records.contains(&record) { - return text(400, "Not allowed to create duplicate record") - } - - if let Err(err) = database.add_record(record).await { - return text(500, &format!("{err}")); - } - - return text(201, "Added record to database successfully"); -} - -#[derive(Deserialize)] -struct LoginRequest { - user: String, - pass: String, -} - -async fn login( - Extension(config): Extension, - Extension(cache): Extension>, - RequestIp(ip): RequestIp, - cookies: Cookies, - Body(body): Body, -) -> Response { - let Ok(request) = serde_json::from_str::(&body) else { - return text(400, "Missing request parameters") - }; - - if request.user != config.web_user || request.pass != config.web_pass { - return text(400, "Invalid credentials"); - }; - - let token = Alphanumeric.sample_string(&mut rand::thread_rng(), 128); - - cache.insert(token.clone(), ip).await; - - let mut cookie = Cookie::new("auth", token); - cookie.set_secure(true); - cookie.set_http_only(true); - cookie.set_path("/"); - - cookies.add(cookie); - - text(200, "Successfully logged in") -} diff --git a/src/web/extract.rs b/src/web/extract.rs deleted file mode 100644 index 4b6cd7c..0000000 --- a/src/web/extract.rs +++ /dev/null @@ -1,139 +0,0 @@ -use std::{ - io::Read, - net::{IpAddr, SocketAddr}, -}; - -use axum::{ - async_trait, - body::HttpBody, - extract::{ConnectInfo, FromRequest, FromRequestParts}, - http::{request::Parts, Request}, - response::Response, - BoxError, -}; -use bytes::Bytes; -use moka::future::Cache; -use tower_cookies::Cookies; - -use super::http::text; - -pub struct Authorized; - -#[async_trait] -impl FromRequestParts for Authorized -where - S: Send + Sync, -{ - type Rejection = Response; - - async fn from_request_parts(parts: &mut Parts, state: &S) -> Result { - let Ok(Some(cookies)) = Option::::from_request_parts(parts, state).await else { - return Err(text(403, "No cookies provided")) - }; - - let Some(token) = cookies.get("auth") else { - return Err(text(403, "No auth token provided")) - }; - - let auth_ip: IpAddr; - { - let Some(cache) = parts.extensions.get::>() else { - return Err(text(500, "Failed to load auth store")) - }; - - let Some(ip) = cache.get(token.value()) else { - return Err(text(401, "Unauthorized")) - }; - - auth_ip = ip - } - - let Ok(Some(RequestIp(ip))) = Option::::from_request_parts(parts, state).await else { - return Err(text(403, "You have no ip")) - }; - - if auth_ip != ip { - return Err(text(403, "Auth token does not match current ip")); - } - - Ok(Self) - } -} - -pub struct RequestIp(pub IpAddr); - -#[async_trait] -impl FromRequestParts for RequestIp -where - S: Send + Sync, -{ - type Rejection = Response; - - async fn from_request_parts(parts: &mut Parts, _state: &S) -> Result { - let headers = &parts.headers; - - let forwardedfor = headers - .get("x-forwarded-for") - .and_then(|h| h.to_str().ok()) - .and_then(|h| { - h.split(',') - .rev() - .find_map(|s| s.trim().parse::().ok()) - }); - - if let Some(forwardedfor) = forwardedfor { - return Ok(Self(forwardedfor)); - } - - let realip = headers - .get("x-real-ip") - .and_then(|hv| hv.to_str().ok()) - .and_then(|s| s.parse::().ok()); - - if let Some(realip) = realip { - return Ok(Self(realip)); - } - - let realip = headers - .get("x-real-ip") - .and_then(|hv| hv.to_str().ok()) - .and_then(|s| s.parse::().ok()); - - if let Some(realip) = realip { - return Ok(Self(realip)); - } - - let info = parts.extensions.get::>(); - - if let Some(info) = info { - return Ok(Self(info.0.ip())); - } - - Err(text(403, "You have no ip")) - } -} - -pub struct Body(pub String); - -#[async_trait] -impl FromRequest for Body -where - B: HttpBody + Sync + Send + 'static, - B::Data: Send, - B::Error: Into, - S: Send + Sync, -{ - type Rejection = Response; - - async fn from_request(req: Request, state: &S) -> Result { - let Ok(bytes) = Bytes::from_request(req, state).await else { - return Err(text(413, "Payload too large")); - }; - - let Ok(body) = String::from_utf8(bytes.bytes().flatten().collect()) else { - return Err(text(400, "Invalid utf8 body")) - }; - - Ok(Self(body)) - } -} diff --git a/src/web/file.rs b/src/web/file.rs deleted file mode 100644 index 73ecdc9..0000000 --- a/src/web/file.rs +++ /dev/null @@ -1,31 +0,0 @@ -use axum::{extract::Path, response::Response}; - -use super::http::serve; - -pub async fn js(Path(path): Path) -> Response { - let path = format!("/js/{path}"); - serve(&path).await -} - -pub async fn css(Path(path): Path) -> Response { - let path = format!("/css/{path}"); - serve(&path).await -} - -pub async fn fonts(Path(path): Path) -> Response { - let path = format!("/fonts/{path}"); - serve(&path).await -} - -pub async fn image(Path(path): Path) -> Response { - let path = format!("/image/{path}"); - serve(&path).await -} - -pub async fn favicon() -> Response { - serve("/favicon.ico").await -} - -pub async fn robots() -> Response { - serve("/robots.txt").await -} diff --git a/src/web/http.rs b/src/web/http.rs deleted file mode 100644 index 7ab1b11..0000000 --- a/src/web/http.rs +++ /dev/null @@ -1,50 +0,0 @@ -use axum::{ - body::Body, - http::{header::HeaderName, HeaderValue, Request, StatusCode}, - response::{IntoResponse, Response}, -}; -use std::str; -use tower::ServiceExt; -use tower_http::services::ServeFile; - -pub fn text(code: u16, msg: &str) -> Response { - (status_code(code), msg.to_owned()).into_response() -} - -pub fn json(code: u16, json: &str) -> Response { - let mut res = (status_code(code), json.to_owned()).into_response(); - res.headers_mut().insert( - HeaderName::from_static("content-type"), - HeaderValue::from_static("application/json"), - ); - res -} - -pub async fn serve(path: &str) -> Response { - if !path.chars().any(|c| c == '.') { - return text(403, "Invalid file path"); - } - - let path = format!("public{path}"); - let file = ServeFile::new(path); - - let Ok(mut res) = file.oneshot(Request::new(Body::empty())).await else { - tracing::error!("Error while fetching file"); - return text(500, "Error when fetching file") - }; - - if res.status() != StatusCode::OK { - return text(404, "File not found"); - } - - res.headers_mut().insert( - HeaderName::from_static("cache-control"), - HeaderValue::from_static("max-age=300"), - ); - - res.into_response() -} - -fn status_code(code: u16) -> StatusCode { - StatusCode::from_u16(code).map_or(StatusCode::OK, |code| code) -} diff --git a/src/web/mod.rs b/src/web/mod.rs deleted file mode 100644 index 530a3f9..0000000 --- a/src/web/mod.rs +++ /dev/null @@ -1,82 +0,0 @@ -use std::net::{IpAddr, SocketAddr, TcpListener}; -use std::time::Duration; - -use axum::routing::get; -use axum::{Extension, Router}; -use moka::future::Cache; -use tokio::task::JoinHandle; -use tower_cookies::CookieManagerLayer; -use tracing::{error, info}; - -use crate::config::Config; -use crate::database::Database; -use crate::Result; - -mod api; -mod extract; -mod file; -mod http; -mod pages; - -pub struct WebServer { - config: Config, - database: Database, - addr: SocketAddr, -} - -impl WebServer { - pub async fn new(config: Config, database: Database) -> Result { - let addr = format!("[::]:{}", config.web_port).parse::()?; - Ok(Self { - config, - database, - addr, - }) - } - - pub async fn run(&self) -> Result> { - let config = self.config.clone(); - let database = self.database.clone(); - let listener = TcpListener::bind(self.addr)?; - - info!( - "Listening for HTTP traffic on [::]:{}", - self.config.web_port - ); - - let app = Self::router(config, database); - let server = axum::Server::from_tcp(listener)?; - - let web_handle = tokio::spawn(async move { - if let Err(err) = server - .serve(app.into_make_service_with_connect_info::()) - .await - { - error!("{err}"); - } - }); - - Ok(web_handle) - } - - fn router(config: Config, database: Database) -> Router { - let cache: Cache = Cache::builder() - .time_to_live(Duration::from_secs(60 * 15)) - .max_capacity(config.dns_cache_size) - .build(); - - Router::new() - .nest("/", pages::router()) - .nest("/api", api::router()) - .layer(Extension(config)) - .layer(Extension(cache)) - .layer(Extension(database)) - .layer(CookieManagerLayer::new()) - .route("/js/*path", get(file::js)) - .route("/css/*path", get(file::css)) - .route("/fonts/*path", get(file::fonts)) - .route("/image/*path", get(file::image)) - .route("/favicon.ico", get(file::favicon)) - .route("/robots.txt", get(file::robots)) - } -} diff --git a/src/web/pages.rs b/src/web/pages.rs deleted file mode 100644 index a8605ef..0000000 --- a/src/web/pages.rs +++ /dev/null @@ -1,31 +0,0 @@ -use axum::{response::Response, routing::get, Router}; - -use super::{extract::Authorized, http::serve}; - -pub fn router() -> Router { - Router::new() - .route("/", get(root)) - .route("/login", get(login)) - .route("/home", get(home)) - .route("/domain", get(domain)) -} - -async fn root(user: Option) -> Response { - if user.is_some() { - home().await - } else { - login().await - } -} - -async fn login() -> Response { - serve("/login.html").await -} - -async fn home() -> Response { - serve("/home.html").await -} - -async fn domain() -> Response { - serve("/domain.html").await -}