From 657be940d86b981f7ac4ed0db11420366723c111 Mon Sep 17 00:00:00 2001 From: Tyrel Souza Date: Mon, 3 Jul 2023 00:21:14 -0400 Subject: [PATCH] initial commit --- .gitignore | 3 + Cargo.lock | 945 ++++++++++++++++++++++++++++++++ Cargo.toml | 12 + links.yaml | 110 ++++ src/main.rs | 98 ++++ static/loupe.jpg | Bin 0 -> 9392 bytes static/moroccan-flower-dark.png | Bin 0 -> 41272 bytes static/style.css | 192 +++++++ templates/main.tera | 92 ++++ 9 files changed, 1452 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 links.yaml create mode 100644 src/main.rs create mode 100644 static/loupe.jpg create mode 100644 static/moroccan-flower-dark.png create mode 100644 static/style.css create mode 100644 templates/main.tera diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b399671 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target +tags +/output diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..61ee011 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,945 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "aho-corasick" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[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 = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bstr" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" + +[[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.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "time", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "chrono-tz" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58549f1842da3080ce63002102d5bc954c7bc843d4f47818e642abdc36253552" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db058d493fb2f65f41861bfed7e3fe6335264a9f0f92710cab5bdf01fef09069" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "cpufeatures" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" +dependencies = [ + "libc", +] + +[[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 = "deunicode" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "equivalent" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", +] + +[[package]] +name = "globset" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +dependencies = [ + "aho-corasick 0.7.20", + "bstr", + "fnv", + "log", + "regex", +] + +[[package]] +name = "globwalk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" +dependencies = [ + "bitflags", + "ignore", + "walkdir", +] + +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ignore" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492" +dependencies = [ + "globset", + "lazy_static", + "log", + "memchr", + "regex", + "same-file", + "thread_local", + "walkdir", + "winapi-util", +] + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +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.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "libm" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" + +[[package]] +name = "log" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "parse-zoneinfo" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" +dependencies = [ + "regex", +] + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pest" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aef623c9bbfa0eedf5a0efba11a5ee83209c326653ca31ff019bec3a95bfff2b" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3e8cba4ec22bada7fc55ffe51e2deb6a0e0db2d0b7ab0b103acc80d2510c190" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01f71cb40bd8bb94232df14b946909e14660e33fc05db3e50ae2a82d7ea0ca0" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "phf" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" +dependencies = [ + "siphasher", + "uncased", +] + +[[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.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +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 = "regex" +version = "1.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +dependencies = [ + "aho-corasick 1.0.2", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" + +[[package]] +name = "rustylinks" +version = "0.1.0" +dependencies = [ + "chrono", + "serde", + "serde_yaml", + "tera", +] + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[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 = "serde" +version = "1.0.164" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.164" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "452e67b9c20c37fa79df53201dc03839651086ed9bbe92b3ca585ca9fdaa7d85" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha2" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] +name = "slug" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" +dependencies = [ + "deunicode", +] + +[[package]] +name = "syn" +version = "2.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tera" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ab29bb4f3e256ae6ad5c3e2775aa1f8829f2c0c101fc407bfd3a6df15c60c5" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand", + "regex", + "serde", + "serde_json", + "slug", + "thread_local", + "unic-segment", +] + +[[package]] +name = "thiserror" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + +[[package]] +name = "uncased" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68" +dependencies = [ + "version_check", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicode-ident" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[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.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" + +[[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" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +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.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..a612e41 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "rustylinks" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tera = "1" +serde = { version = "1.0.144", features = ["derive"] } +serde_yaml = "0.9.22" +chrono = "0.4.26" diff --git a/links.yaml b/links.yaml new file mode 100644 index 0000000..93e98c9 --- /dev/null +++ b/links.yaml @@ -0,0 +1,110 @@ +config: + title: links + name: Tyrel + description: Software engineer, gamer, tech-enthusiast, ham, pilot, father + avatar: loupe.jpg + background: moroccan-flower-dark.png + background_opacity: 0.7 + +links: + - title: Personal + links: + - text: Pronouns and Pronounciation + icon: fa fa-person + href: https://name.pn/tyrel-souza + + - title: Sites + links: + - text: Blog + icon: fa-solid fa-blog + href: https://tyrel.dev/blog + + - title: Code + links: + - text: Gitea + icon: fa fa-gitea + href: https://gitea.tyrel.dev + + - title: Chat + links: + - text: Matrix + icon: fa fa-matrix-org + href: https://matrix.to/#/@tyrel:tyrel.dev + - text: Discord + icon: fa fa-discord + href: https://discordapp.com/users/73990019756339200 + copy: "@tyrel" + + + - title: Music + links: + - text: LastFM + icon: fa fa-lastfm + href: https://last.fm/user/tacidsky + - text: Bandcamp + icon: fa fa-bandcamp + href: https://bandcamp.com/tyrelsouza + + - title: Photography + links: + - text: Pixelfed + icon: fa fa-pixelfed + href: https://pixelfed.social/tyrel + - text: Flickr + icon: fa-brands fa-flickr + href: https://www.flickr.com/photos/tyrelsouza + - text: Instagram + icon: fa-brands fa-instagram + href: https://www.instagram.com/tyrelsouza/ + + - title: Gaming + links: + - text: Steam + icon: fa fa-steam-square + href: https://steamcommunity.com/id/tyrels + - text: Xbox Gamertag + icon: fa-brands fa-xbox + copy: tacidsky + - text: Switch Friendcode + icon: fa-solid fa-gamepad + copy: "SW-1711-7753-4091" + + + - title: Socials + links: + - text: Bluesky + icon: fa-solid fa-cloud + href: https://bsky.app/profile/tyrel.dev + - text: Fediverse + icon: fa fa-pleroma + href: https://social.tyrel.dev/tyrel + - text: Facebook + icon: fa-brands fa-facebook + href: https://www.facebook.com/tyrel.souza + - text: YouTube + icon: fa-brands fa-youtube + href: https://youtube.com/tacidsky + - text: Goodreads + icon: fa-brands fa-goodreads + href: https://www.goodreads.com/user/show/24381583-tyrel-souza + - text: LinkedIn + icon: fa-brands fa-linkedin + href: http://www.linkedin.com/in/tyrel-souza + - text: Pinterest + icon: fa fa-pinterest + href: https://www.pinterest.com/tyrelsouza/ + - text: QRZ + icon: fa-solid fa-radio + href: https://www.qrz.com/db/k3tas + - text: Hackernews + icon: fa fa-hacker-news + href: https://news.ycombinator.com/user?id=tyrel + - text: Lobsters + icon: fa-solid fa-loster + href: https://lobste.rs/u/tyrel + + - title: Misc + links: + - text: Fork this project! + icon: fa-solid fa-code-fork + href: https://github.com/tyrelsouza/lazylinks diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..6cd7ad8 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,98 @@ +use std::fs; +use std::io; +use std::path::Path; + +use chrono::{DateTime, Utc}; +use serde::{Serialize, Deserialize}; +use serde_yaml::{self}; +use tera::{Tera,Context}; + + +#[derive(Serialize, Deserialize, Debug)] +pub struct RustyLinks { + config: Config, + links: Vec, + metadata: Option, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct MetaData { + last_updated: String, +} + + +#[derive(Serialize, Deserialize, Debug)] +pub struct Config { + title: String, + name: String, + description: String, + avatar: String, + background: String, + background_opacity: f64, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct Links { + title: String, + links: Vec, +} + +#[derive(Serialize, Deserialize, Debug)] +pub struct Link { + text: String, + icon: String, + href: Option, + copy: Option, +} + + +pub fn copy_recursively(source: impl AsRef, destination: impl AsRef) -> io::Result<()> { + // https://nick.groenen.me/notes/recursively-copy-files-in-rust/ + fs::create_dir_all(&destination)?; + for entry in fs::read_dir(source)? { + let entry = entry?; + let filetype = entry.file_type()?; + if filetype.is_dir() { + copy_recursively(entry.path(), destination.as_ref().join(entry.file_name()))?; + } else { + fs::copy(entry.path(), destination.as_ref().join(entry.file_name()))?; + } + } + Ok(()) +} + + +fn load_links(file_name: &str) -> RustyLinks { + let links_yaml = std::fs::File::open(file_name).expect("Could not find file"); + let mut rusty_links: RustyLinks = serde_yaml::from_reader(links_yaml).expect("Could not read values"); + let now : DateTime = Utc::now(); + let metadata : MetaData = MetaData { last_updated: now.to_rfc2822()}; + rusty_links.metadata = Some(metadata); + + rusty_links +} + +fn render_links(rusty_links: RustyLinks) -> String { + let context: Context = Context::from_serialize(&rusty_links).expect("Could not parse"); + let tera = match Tera::new("templates/*.tera") { + Ok(t) => t, + Err(e) => { + println!("Parsing error(s): {}", e); + ::std::process::exit(1); + } + }; + tera.render("main.tera", &context).expect("Could not parse") +} + +fn write_file(html: String ) { + fs::remove_dir_all("./output").expect("could not remove directory"); + fs::create_dir("./output").expect("Could not create output directory"); + copy_recursively("./static", "./output").expect("Could not copy static directory"); + fs::write("./output/index.html", html).expect("Could not write to index.html"); +} + +fn main() { + let rusty_links = load_links("links.yaml"); + let output : String = render_links(rusty_links); + write_file(output); +} diff --git a/static/loupe.jpg b/static/loupe.jpg new file mode 100644 index 0000000000000000000000000000000000000000..17d3cd21d434ce4d080aa706cd2f66966159f2ea GIT binary patch literal 9392 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 literal 0 HcmV?d00001 diff --git a/static/moroccan-flower-dark.png b/static/moroccan-flower-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ddda155b8254421275e7d2e87faf3aebe39803 GIT binary patch literal 41272 zcmV)+K#0GIP)q@D957uw7mGUp z0HDB0L_t(|+RS~~V%s>=Y&BMrl0A9 zNqdz4)EV$s`2xiE`ZqIEUS0j|9|C^jERo++8?oSLuD{qB*fxCv{I&dv?1Z?6@|%1C z;svjS^xi%-+X3TM0Ppdnk+1bb&?mg5;TO2u14dfwg@_kIddG_xX-*Tit^V>NflD}P z;5uIYU#ID>2b!3^K$CuWAJXuZ0Q*{438e)9Bp*`bznv8TyvI7JRvO4Y_}nppcI`?i zO#l#mNU49Tz`vD(R7M^#W(xq9dYwXP#%MI{JYq;NO4U7z{F&K+V3%lr_lQmgB~y(0EoF@9B7LF8BMbR zfSMRX@VA=*K|haX>$`X zB^pNX03}_*wrll(Aq0QtVs{9E-`+c#6~h6Wvpo3$Ba~;+C%9ec2aG<&S7`2kgQgK9 zhMWN8O9CLx)x(6FvjG628CZl3Ji=*l@oq{P$kFrx>5>5$x&_ki7N-CJ!46aG9ssnw z`YB(%p96rH^?4`_C9feHcMDHwItKt!U%jDA!ANPqNH@l~ z?NY98w>bkCF|c|5#;)Gdr!=>}LUS5v%Bc*XNv%Lud&+(mvAt1=0Kf$RMz0xJIKVF= z0!hd=;1&TfVF$9>atd=!0JH#*K>)BNfF|q!Vn7ZjL?CK$hhf%?Ob!UMj6fC&Kqdg# z13;790H{5uupqT}lSix_1OAB7r+_hALQ;FfAazfZc7Q&mDfU05nFpGRX`U63BcSqI zJ5S)1LWCs%`}Rrzl7o`*(qGHh905r{d_QRbDS>2q>jPeLNM!lDdg0BCq^bu70Q!_8 zuf*>5DgfjiQl)ml1HDpUjP$k`#()|y=oKN7Apom?sWeqT)j*vqhQFQ_fb6nVxu2XE zLx}Iv%x_O<=AVCorgEyh3qB9;?V`&|>a()|!~|d)Uj3j{U6glSH^F@v;A~yceD=CN zBEu9umrV^G`wW2YFtRrdV>12Smn7O0P5~ebVC`3$omIa>bA3kB z{|%a=oubpj7S1Eu)HytCjsSfB5%FQ)0uXcmdlAqZ+H3c?S=@1P>iGa@QwMOAp#!z^?@dj z&Of)55wd3z@nHb2mmGnRiqViCZbkg*A`sxN`F=o|;^!?#vaE=j7@XpVGul0O^6|Kkh(N zHREMTg^PjovY0;QdlY;WoK)Tb62=4`E7CXs=PVHbD6RKc%_1H_f-Rj{NDl~_Y@tQD zOu>*^8>|_SvSCybJpPm?DL$YnKBY;Gri>YU)RQT*6_57_ed3Q@y=ZTyin*AYmrxumz`jy@@dOgP z5`cfJV*>b@hbaR6Q~%lqj2JRijH`!y`6b5BTpSZ0VZ0@ng@3%c14g;fn}c}8|A#aM zZ)ifcFR$7_G^~^%tH%KXIrr^~>Yw#EVweK;)HO^YhXFBH4~A;)8^{Aj`?KyN)B!_% zhEXqcnBjM6>c2wsen6SL+L5-8m=4>wZ5UJ;>x0Lk{iabb`ok&O0DBxj?Kgis8#{#_qa)p;48)@&%gido)v{89$_%3(fhSCe6)2Ijeq9YqqSN*L@5l)c?8% z{`KJR?}zVOonkR+JybD}7=jf)!sQu8ymYUB^Mj8V-LE zi25+nte-=CuV=wKnk~xn6Lsv7rg-^`W_vr@6n~SZI9mF?eTT;&K^qW|e2s5Caq$Bw zHcyZ~3}}y{hpP{g$j_z-HFg4_(lZj-H@BHS%#dSu=)}57=4VsHoZVBJH6V!a5zWVY z^*3pj+rD=nO`UFi5}*Qnzi;aYceDTK4pZ!pBW|A!*p9a%J`9M@F-Dpn4RFtCKDpBW zlBT<(sQ_RZzg#~fI}6OiwVV?HaGDVMH)fT()hA;X34j+89>~Q_A}5jR+al+vfb1+% z0zx_A%n;X(0RX!p_>M72wZ`^y5{wZ5RO@!8Txp6WN+5fK9QzbYl5MNy3-yZNyWi|{ znoI6e9BBGKry1{PvJXlF*mr9(fRxfLX#qR<*n|QQZgR;PNXWaNG_)Q(WEudjwCDgJ z3b(5nH1#QxQUKiQPaZ%*+TyH^r*i`!t^0`*kTaY!7E*$a7<-&7PvLi*G16p=cymht z5G&1bgHTNKBqM;J+^(lD&@@kIE+PR)^!qgT(=(b1CWWX0__S^k04}L`b_mMc02^X? z@Hn?LHcH1Lo})H0^qz zdEt}T9Ze;RY4t0bWybiFrh-ws1^^jK#3NM`NB#g@zyv3G#^N69Z_X=_0<=-p*NEn* zXHfM6xIq~0j!rz^M*IL|fS&g1&+HgH=^5BOl3 z&$~YOyFYOM6i~&vKAx(&1t=hi*jXT-j*x(=K8^9* zC5E92#r{8d7}`s&AY^q&$Y)b%Kvjpt(*aP>4TGMIkZ2crSj6O~G)2dtU(;0Ip?OGT z8SbV~cyju)&6qLeE~kvcQrbU8vY1Clr;r*ZQ#B?hhAEn-sAHs~&!;hxg5Badc281I z0^^|#g9Z#z-G`-rjqw$l`Y+PN2Q<|Tz}+C!WOo48Wx$AQ$efy|W?ixwNgEXaDII_* zI-l9fI_0_`YCUar3aM6~*!gTY!R6{9l#LOP!ULGS3z^Om5bQMCSCF#C0c3Un7PpYt z;5?;@q0D@17<%)O{nsX&>Qq-YG>j?i1%nn&8M%R!=@^=BA@P-dPV*$bL^Hh|X$tin zno6=&lANc}I>0+m*Sq?6Tx53fFIbJO!S7Ty5p}XWDFXj=WWCZh}P@fJiho7U{j9sMv9KszX zG52+tug2^!P%l@?PVE}@` zpyie(QPb&*{3EZ;_pOBX&Z?Bw1BS1VG-XRSnkd9|#E6@3F+ZjDXk|=|CfVt~plS3M zXr|kMp}Hs28o)VBQa0C4xV*?A<!3{L!$%qmi3Bel?jf!h~X_QqYdJcg1Qe-l8scBcrE^5etK?sn@ zMy`8#XQVk9KHJm~jx&_x6mKPD2|XPL$Z%9F&qC2x#kIKHG%R91WxDEpq7`a#VXj1s-!cCpPd^B>DiP`#AU={ zH^kwnrzSomSm6UwHV@gt!tlwErnCdG+RekkS(mfS1eXxYi9HV((k^9n4jw6$lMnUd z3+Y06PA(%temJ9U}vCclOh5L zW15d!0l=oK*W$A4lmTQR$6Nr`pj@0#`&G#J;Ev&)fA+U9;mxt4Cyf~K%KOyKOL<#M zo{|`BgnY@Y8rn(kS13Nb42-8BO~unyS;Jr!--H zNi!6hX{0H71k2KzV+QhunE(uXQCb1eDeORwDcy|0QGI}024K}KBWI5-Oa!zTC;-F_ zfH*k^WRG;^T%mD_3jmt2Wgy4AvJ>urkpLKTOUQ`W86(8I+btI707Rs#eZeutp`6@4?PR`xwOn!0%@UkxKW&5>C>m zs3rjEa*_acFQm@>AY&(=0y~iQxBy6NR#G?JE9fPMn2Z4swi7Xi)c!VLgcR6`@IEU5 z&Izf9Go4;Sj93VO^Ctj#O-kyXw}cn+DQXKK-cAC*7Npd}VQI2H1vbP#r@5Y=(OlGL zG*A8;G^rc1U2Z-YuUFr#=`O+^jBt1B7W>UTrl|mLsU>s`x+07p>!xtejjC<|RK53T zlc&5jRIU%B?+dUbu?O>tH zqhN?p(=|pQAnlKeqF7&vfOerz1~AQtb z5^D}WlwDH|iSTRS6L3MQxnW}R9zgTQ1piKezl4_OWy}SDuKKv-g9P#==DHq8yGKBn z<}C;z0BcV5#TF(x^ZK%K0LX6TW)+%O-#qALiYDXp zUNOyjrH?e@M>OMiXexwq)FQE{yaURZ=&2;x2Yz1o*U1RD1Q@GVQIrmTe0652kUgL$ zbE7elzhW5D0wMvE+_zG=pki=DVbT&Y0%lTW3WDcnh;Nm#8o>e5>NX$;erILz2MMSE z812>)!pMFgfmunU0GLVN)JU^V(P&y#XqML|RE5(wXqxL&n(_mhioe~o2y3|*g{(@{ z(9I0LPJ+jDk3`AG7W3v;{grSO7ACB&=nOmRRUqS_GzY z6jxBMcNlSvR>PD5`Vj+rM8V)GjN$Vib+=1e#6Xh|FV}9@(blGr38a2SQ+|b}0-f(L zm?nKdQyq34H3Y+B=u7F=EKR-DG9XCduy2)DSyAp&^lc|^Et0Q%8;}MJ*Rme;+6=8x z`5QtFUkcGhF=<${2MpJ;2<~V;yV5@7J2ZzWKBlP~&G4M2yrWswoJ|$f?AoKmWTqO( zZ#3_eFzQk0atJ@+^eAIFN@Xeup*qG<6x2jG-88N%EH1(g; zyjS$p_)#uD`9-w7^q4ALA~fWS7c3qJq#DnX&gibYlf1*|79|^JjIq}&K>X7!W5!5Cz)%g$PM3Hz)OdT>qf>TINDw2&T`sOF~1-Kr_2ig=Mt-Cl}$h{+5FRc^ag#@)N0 z4;X{x#7D-=>hW%qrH)~StiWC`WTZJ>$FFGSBhB;yP5Ox+G!_SW{Ru2MM&U2?~0Q(W@XDPmXK9G=a(hNalnqI49~G>p#T z_7o$9CLa8p=Jhbe`d4X&JDLgrY^1>&Z6yMz?P0b>2Lq7GFEXp<95QJzXmiQ8CnehQ zDO8e=$|D8Qw%RF((IzfMF_dfzifQ8f03hgkd~Gy^j>8l&*9w1X>(@bp_sE+s(vU^Z=rQ%NF8{zPK*D3>X2{ z%52+<#A)yfYp!Q1H4*@?{Eac1b;%ilx3H)HAZqwHfd-msW(>`qkf8VVtS}Gduk>6o zB7k7RP0#<=G`%^{R8TQT1t90E2>^oIQcbES?a&6q4Pr_F_TW*KEjnb#Ts-qRzS{sG z@10Q}80zwP&E<_%&B_cU{atY6HpXhu2G+}(kuf>k#;dKTiX zCR(erq!=+{6&RPo9vC^3Sa%q+%EMmMv$o_};a||HE05Wn>?fbI5Gi01_ZY5QwQ}2_ zrmbal?|mM|kmP{b>~z??VzYZ+NL<2rp`3V@T}$%#Ce8euX8aP(O?*uA>J=27K2oVD zKtv&N#=WAa7p0Yeq7qe8;a-D63J^(EZ^A)I-9$bzK;a1qIbdj-n~UjA@O=(G-6|^ZW~%(u?NN88a*7gT$oQ7QU0Q=!2x?nP6v_V!Yqo6*dYp z$1L*pSJgdJ2M?OYlPN}Nk{U!^ zO_TOI#RoK(&uE@MdjT;Sigz=?gYHsPno5 zb9Bcv{rC<*OnU_Wi5Jkkr8`N(&&O<>i@mt6wAhaq$~0;2H23%+%|*W_*z}t;=lv;7(S5%@oP;1wIs!^y zrM%gky@H8AMB>ER!3Ot&ogEV?P)Te$2wmh1Al-}wNI}gkX&8;p_KWcxJLjG?V==Uj+-BKMUXoH#Ay*E%*<)~qr?g-CIDfX zwScjuUj29>g81NmQi{~X$96h+EtqC9Cq+WD*bJv}2bL)U2-B=38Ouq`YP_4g>}JUr zoVb3FSbdqMI{zunSZHnsnq2$6_*;`DP*oDdlxvtU`I06ctsqb_^Q9OPR$D|&6G#+c zMra}xM9;O~k*okHtz~EHs_u><2~;Yn2zA8Bb;l%;D$RzGT*=B$RuHIMhv36VvfkZPj5HLrjYNnGPuND){aCbShS z8mdJ-1^jg}$+`?6?K_mVhhGNiVth6)uq467udlMiSe;XrW>T(iK8kiEq=q`Tu~X#I-uvrp3U8Fp<_x zgA$Dhz3R`4A>6VS#>8rx??U3%d~3_Bu%&FImc3llgkEn-o;Bj0wKS%DhdDSYQ}+PA zYQhyl8B@%%9Cs+()=pEy2N(;y$!sK2m9DTqr%m_k4n@5b)gRnwML*5@S9%!0x z(~SLYKBFn`X+C1m55y441J9?sqG8jjmnaLd#7{V5u0(Z()WxKU!Ivk4BTFSM+o-18 z&ap~*evEm-QmPuj3#oj~8~`ifQX!RUG5kW4bJdDCOzRe^$uYW7HdGRDrBp3IQ873^ zQD}CIfhNml|MxT%Af+w0cxs6}MI_gQHk{~E0$tW0(~u#hW$wjn)!QLI0{|(uwyLQ* z-Eb$1R>j?2Fedi|<308WtL7`UYQ*4ZPN~W=U2#{AQi1$n{Kix5Edao2zXh}H<-I(pRLaTg z+c})+Zpb`g~unO_E!*~F36a^KD@e;1VY@4JPifx#M>N-RH=ocH-N8HWTLNOZ@Q0Io$N{(R788(eVdC(|9SNGR zE(;|8&hO_T7QOM7a@$f8h*uZ@d5pzzpv}ZGCPf^dZd*0P}WB9``im#G{p7TmW)% zK%^6L<{A>wD_$8P&1sK7hzUsY1Y{v4katM{d?00)H32a>AnG~i(p4dFgfT=YGp`8< zJ_B*GKqf;#;tEp9L+Hhal1iBA1WKeNfQ?gj0+cyz5lG1aQO?MjGeAP97}CsJ1d>lc z)H9HU7C_!R#vENSoHAYr1!JVStO*D%1JQm!)Bh>W>oZ5?l%qJ1pB_q}A0%?}t?-!TT+Q1?>pYtJ)yKE+6Lko5c} z&2afmn!-Pku?&*AQ7bbF8-@-$?wJzixk_csvwg1l*&Z|~cLTyxngfeGEVVg2yAJp4 zIu11bXEgW!jOO!}M}@?m^C*9M>>A@E;?Uce? z6?sP({vIE-GA@1C@+b~8!!M?|qZvP=8J^J0AJUASrotM-Y~QUD$uwnb=OQnGuLTD?!J&j?2sxtqK=Fyo75#wR?8lmrxAM z>~DZv@*d29v6TS=a-la4kvTIQxm~MQNtR_o=Xgs)0K8!UdI?uREP1cV19?5H9O5K? z0+^(8`fD`NXyQYf>wzYwLNi@|Ns~sJw_3N?M@z;4L>W@x90lOxV9U5{NSzfx84@fp ziGDbI`)Ceoo0oiCX(>in7|BWl$<62BV^_i?mn@01B!~o}iXmvg&=OOLiE2_W3BaD! zn5b)^&Ws@nM)XqleIQ!Giy)`~NL0N&J*O$2(9Dgdj3Z6)5l#6>GvrQF-qGab>(+#X zRVt)fb%$~SX#r#HT0GfrhtqqpOa%*e1n#>1T|kzT2}EjBIDbe8)RHmw7KRSn!PFty zRvcAI431U4FCgwnL#lVN+1)*c5DY0Q0K7|ka?<785#i{ z2dLgP=7SNZ&j#4Xwn|4)kQgw2t%MmG=o~SI3pJ0q5*X^P>kr%Ge3_>C@NRy5D+CUC z`$mv{l6nEO_!DGnQgs;7()OpG-*MMJp;jU4f}yI z1RYrvgIM%(vPYWXk*4^RrhH1%d_=Pz|5b06RB2MnrBaIk5V=^Y^PyVutpb|j>JaR} z?SYu3WtS=L-{ZO0ud506M%OTcPzwNTTt2U1h@}QpNG_rj^&c^?v?^hWJ1%)>E;&`3 zYm{IsK1t`BzRv|v-$!REVcCQe90 zHPx=G61wh)#mJiOlFo%v4P#tGZiB|AW#8LjM4v+H4TmZ0Jxv{t7g{hznx!^SrD^|! zruki(wd0s7uiq`5k0O;Ku`;48Rd1ZI+(jzoZc8n6Y2^KKCxj^@Eb#)K-Z+%dG0Fff z3&w?Oxuj4Z&N4ulg0VU7gVTjDRF_=F$ZuR3s|#VufOetReEv!Si=J9uFs;Yk~ zPfy8MmU1eEV$yL_k7>68fUw2wU(NHOIW(WlwVsR9sL-67;mSgJDW}qWtV}UCy>(y= zV~!YRY93c-i@4^1K~?tR^Ja*n6Gx1y^vu3wIR6Gs*){?z|BPmMqA9F@?XHG8b~|9ycyvl_Kt8H%I!1op{brEk{4UKWQ+!Ty zeM-|m(&Wn4&4n~H&`C7*NXU;emUL*M@MMOZd-@C!;-fSv9=a2R$0?2jYB<{W4E&Tk zO%jODrclEa@$owT4o&(c&78hUQvtxN0OY7pTx`yrfqw=U@+&_{#*|({IZDE5C>zCD zbvK&fSyvQEK>p}ch!-}XW)3zMxPOM~R$S`-VoYsE6d0p!=2N^?>% z6%0vu88Eom;Z<1#?#vX#@6#-%B?bs;<@U`3;)+6PnX+(NwVFc3e!i zwvtW4yd|9CN(aw=k7O;`tPWORnpEa`beV`r$)CV$kfNtrzkFK7ttF0`)Flxn^X(xem;83HuBAo321x{Yq^s;);?804!*|q^Nas~AC4iM`nHoJ*)QC;i?qhA!9p3P71PL!I6e zFsJ>lKM2#z4w%LD*%aTQ`Eva>P0<|6ZeIvO7^ry-PZfi1J4sjxi23T8IK8}U1R$=n zh7l4p`Hf2!-z{=`S_G^Dl)VO^_D$;!=&;QSMhMWdI{?z&N%7Ln7-*q@DX$rzu>=U$ zMRq3vD*-uQLu-lCvf6>LE((SOXm&dQX&%%zaVb+2n)3H(Ql~jRrD+~$a^|858OZ5H zN=15NZ<#p=q&QzSzeq{2^X;KC4RQKPI9n3n>?+WC+?SNgtd$Wm(`0V>zDW^LDsISgrGLg!+h(SGZ6p36;Aei3V+NvGhK$CO2CjaZ z#wHM(~GEGN?03^Z~lnE6SdXujI9Y>P8zs5JCEIJ@B?uTL#|mEaD2m{D)#29FDo{s!@iqC1<-=ZnTOpD2_ z@E2A*AdCkKR-MqaT_SEA20OHCDFZOOi-X(vX&Lj00phDS>jk*7z~qp#Tn5m*Up!Vf z9kNKq6xi8cSGY}!CsVM1O0SoQtD6UD%ketq{o=5dEQa_Cn)V?(`sBAS&oyS5rQx- z18{#rlgsRWNOLb8jYgU{(o_eUY#81EGRvBfvQNn2g(46qa1@7iUcyed4CLsM^MX`M zopQ;$TL!U8C1(eO6XlGo1qby2#2t{czHv4tqMVS5-OCub0)lPM6g_e}Bh|*Bp*0va z%N~H7cOaZ(%B6}?p}7NMG8H4yl2fy-MZeH3u|p}RQ^)uQO`4W#rI~+&<^~9B8%>-B znsm|tVisalkeCH22?1c+I3GLGkV0{Z+VXUyqtX4+uUV6^V&d;-IV8b05Hsc9lG=waI}>R-Wh6qEs|i=f~DO#i6vP zzQb_ojsz)n7?3<_)iR%byN+;>%1E9fJf|5V|7o1!Z_~`K(G1!Bnx-EFJN`jSg9Log zOQ?)aK=?q$QX95>D5fdtXc6%J?>RpTT{6N@RWLoOv=ZWQnjZ%gX;M12BTA3*r%!1f zuk?E~8%7h8{DP*+A$qF^`4dqpeu4OIG!T*tt!8oyw(cW9;q%{_idQ=SqOE`TZ(6i=%M)XBM8yVp4m`X&K@ppCu+z}V_z zp!mkyTq#{BjM+Cpyi^~9zzslrcI)z#@v$STM$Wp)H_{xq3j)*T(jZeL=PK zvo-z((CfC330>)}C#o6smVim!YBgc+8KYjPHR}$@^R=AqKc!i2#iiUk`E{Bvd#lY^ zX_nTa+TPQQZ{<#^92GQKXy0WlY3KaZ-3gNl@rJSS+q&l0ppgcez;6w@08g4Rx#8d5g9ro;%BZH zDu5(wh}K~bzvhae1`)|XGaqP*Kc`vK0p9Z$X_hjyrOu2Hy-ue(Z1TDbc50@AIw(=A zN=3;2FUJwnW6FX)45)Qp6}5~6b09%a1UttOPgFz4>!<~Fr0DvV4{7RO($pW)G>ky<`KkIuzMg4AU_ram7|XmAi_8h9L-mNZdRoxw3AGGKJsE zVl7gm$?cqNK3phd;&}cunmmQfmFD^>&G4Hvk%y)Ujl^)-0J=nZFo^u*XP7pBvkrf&HDz!RG4yg$3p|Nm%~0|+TK zD*%aWv=HT%Qs0V|EhV!_(s;#GT2=uQ97e=6_=iK zAAJowlr~q4LG7d)8;0Qmq4h!1@?;ZK(kB{-TwtmIzBYpR=?Wp*U=pPhgw=v z&BpQvRYc3ty83hLQ8QL9=~Y}Vp*&zY9F!L=M{C>ayB5}`7&lisGa>m=dC?#3HsTJW zy&djW+eiNa&3dzrG}}UPbCvPeX^MjrVyKQnhfZ)^d9rt1#j&kScNEmIJVdnyX*y@VhR7%c+R`W1l=ZjL_j)~@4@rvC=br~Re-fY5#v;j1){Ur3Jqz8#`6 zU8T}{34Ji2w?>P{#>xIsgmrA3+{L3U+P&e~cN$ak{~ent4i8o%v_2gWQ*%7s(Hy4u zi!}XLX(|9X5pmnTp^Fb*a@PdBb zK>;sW{`>$#KVU2ZiZMdhxsDj(l!snIDG3BgIA_(=HfJ1K9$6%ak7$P9q&dsqq{$fF zZrwLKbIYT&$MdM&Dg)9@84&?^xw>hB5QBe|<6Lp#4m&FD`2?t5u&I<%+f1oqC~x7c z4jK1+s=i1o5&*B)oiUmj!IcMBKTUysr!Jlk7_7>Ut2V?fkFMdQj~IHy2zJ}d^0#U7 zfUnc^=H?gE+v8%&HD`VI89=zX@|p-G>^rb{UV~Byn~4D2&;ZMB0hXHjdUcU=Gn#}! z$t!SPt28N)&H&c7vMXV)sWejnLI}I@0DOxPNwT|#uCo4&%|`%k#L(}+dE+8|IfT_j z0P9-IGbv%#*e^7MU8RDN>J;ko4Vo#0ox3KDG@XOi#qXL+FVq7~b$LQ_+YU4pv}`3L z5^C{FHm=Tq3eYB~V~4Kg=5!39&Z!RI4J|dv${7#|+8R~2GK2z3L&ot!(Ex+%m*7`l2P)Kevl>>e`0b1_Z3 z&;!WlG}S@#qv!$S8#LADG`q7%s%Hu++kYMvR9$1Fdefv2+YvogP}xBvpr3qf@Rdo` za|<8d85s(>$j+v{fQ{6##x_l3HFfx2OYNq7RwPmnaBG z@0pav1%RXg&^h>+IfFhy07&myNKMyT0gzsT3nj-sDE1!+W&Kv_;z2Gh2C#9)jhlaF zQd+(P5F!9{iautx(~9TkXC|e^1%M8W;eAm>1W7==WT8yHmR5TZr{F6IruiO8Y4x59 z2F|Hn=&xvUPT((S@)Qp=RZ3r>dG?(qR}~2fDTFCPz6cM@`<|)@MGye;8ObFZfYanM z%{QNF{H>(f@5srgDZnfUp!w!fZS^k7f|;X}G6Ju9hcwriYJ+JmP2@9@FBm@4y!uqd zG)39(GLnxbLY@&o^EzM<>i}|eBqQ)*cL=@S)AR|+2NQv5@tN%IQmb$EZJNv6XsYKl zUvdCV+jnS+?gmfW*+^t)?!hC*_HHKv5ZqY-zC24JDPY-Gk=Zd_6g19K$FI11;x9=Nk_*9$L#1Vz8fBJY{*yg_KWj|J)j5K zP)X}5z8eOd4vm`G^IB4d*~xrpwpH`?3o~|{o(_i*W>!e>fP?(0q>dH25(6GF{)aRV z11e290m+x*K-nS^mHGj}MfU0=`MoIWqotfgty7v?Po$x~kU&m71)(sdJ95xvAtybQue*mh_fhIrn0?i!l=kKz(hD6hB;N8XbqqD# zVF+>cvvsLe1+y0aAJDWKY7hWTKt=>9<;IM;?&_QYBxG2`@~L=>GrGvg8XzG-i23q# z3T1(mk;T-~y}h69fUy9GNU+VD9B=-F<|-;QGlb~Q)&qvHKxB-1v%=+oF$p#eO~XiQ zI6cx#@|QHzcWI{2XolI+xm65=QWFA6=PHIW=1`VU(kx?ESet4^C@bMz^-q(uI!7U# zOVuY~6)-g9QaDi{iEHZZwI%|bYZ%7FtgtnogHT5GzGJLLIbvw0=^Dl?BSsAF*ws2U z31Li1BL-=sjx-l>Pt%J31x=+CV&G6$U^BA#?x$+okhO?z9~v9;7e+>~%S3BLA3cB^ zxae)kjXYKBho-40VFIz?&r=9pghw!@1d1XiHe6YTp(Pt$BTd6LDr3xgq{$c%JVnJQ zW^BVq$v}vDr43`G32~%(KgEAWQvi^bLy}}uM9$R;KNRCA;VhXm0te=y<}Uk}6X!=N z9V1e;N9oBF8VNaY{s8Pe821%c<&2ov$W}|&>`TjGPibOA%H^AUia`me7Y07WXtX0#W&@B284}g|+jW%Ag@#RD{#9T@*q3x!{+n%fk zkn(VpW37ysu6s87Rj9|VNktUC+}0^wb}|7#7+VDuMfdEkT3og`2LLIJ$3@o4OzW1+ zenX`>M#)Nxo$Y4nZHEc>U6V2gCFXFG^0o#W0OSM4*J<9=Z_`|h2Jahb}f9uWz zplJ^vz2_9>lz}LRLM1!EU3AIrF{CL1$m7jg6975gA|&mId5#(I4;Zua6(gs+uWX=6 z4lz&hKcl%uNO4b7S^|)TvGXkfnfo5SN+Mwe0AFNjN$6?5=F+bS`9(@7C4h7-t~hCC zdj*hO1QK2(ku(Hg_gu0V!pv%|sn1!Sq#&&c2&*Oll!Pu_lUxFjUZezTS1-KOWMO7| z%|Lb$$oWMQ2}=OnUUCJ5=BgdumEskGlp-KqD~7Vm8iBYc0P#hMf-%sXn5F}e)$h@q zt{KSt_i2)CWl@JRq}?>V`my~{AJL3(ck8C`Adw#`1-+$iu@BOuo_ewF-77F=$+nOA zYcE(bHXG^~@3ALa4br4BS*Bg+0pl;wY)1HBp(&oWm2pGvLU{7mL(3zNXPTdW_#T_| zqz9GCS9%GB&w2@c)K+Qi?eo0DPWp42@fpqdyEH}2nXQO}Y>12cUSrG%NIc+4zoOM4 zBB$CI^|9qqyyghBT$U$OTw_j%C?xV@Tcyo$t<-|?*qJF^Qv^cAIEZ<8#LXk1UFZ{` z7t?H0JZX9KU7GO;&G;eB&}k}MBNxTYfDs!26B6f*L?0B8Za$w|&bSA#_?{o*6L3qV zNNEDuyaTYVP!9f`0GBpLSR0DkY~J<}R3SCM2H z3s=>+=3X*-i#WlUCJIstz!rKhA?MN}=m*PKM91iF{sBXSPK?oM?hz-*A6&UZ6pY<> zj1bZy@DH~Vf?y0>ySnK}Q#_&R{d1c6H)+;e;T&VA<8G~7i!8?>DR67$xAfj3^5eGT zdVodt+TO$Fn78^ll5v<~JTkOCFuf5_9xy^^fudnVOe4*f-Q?SVBL?~ajmIgDG}Rx{ z)B}q+(iD$0>+KfZ|5+km&-?t$T{dN&Dq)OzR0Vz1@~9;>90EU$#L$k&9MVwKFtK_% z#f*n3>_-?H|254IJ2U;Ft&(hqK3S52=f@WWKr9vO<*se}&JSmeTAN?G+W0#hvt~ny z(2$#IbBuV*b54vQoSfRDIb!5gVolPCns*+b(xkmL;5ZJbG|AVh$qzIOhS>inG|e4N zvPV5m&H_MQ>-j^UTEK)}L`%IWd3gZDOK(!cCKBg&lrl#EX45LBaj27v<8=&m?m-zo zb!!k%%E#W}qq0+wnqEX_WmpX}*R(rzwVhJ>58H=fP@& z^Z|7#ZMyotQIuk3e5JkmT1dVA++cv@j?tgcQsnCnW7v#1dyF5Op-5c5$Ef>fqnXmv z>-ZCzb(ku@XBB9P>7Bls3p-X zz87;Kx+BIc3&vZ?ck~JWT3(@Ct6Qw=L;{Z{gsJ%P`%W*TTa$;X&$Z}qe z36%vS)>DlrftsE>S?E>_==p$=2aHq$HT3K{Qmh)c&uM-zMNDOH`324GGn%f_Jkj9` zSszs@7d%r14SjxYPh~?x>za6MN7P#dwRiaPQOl!>acrwp*Rc3eTczH3sk8X7U(wfT zUO$`SLz@1}G_PYtIgkONY~}L~GsL24Aw>;Os8ZnrIW`#!RF-Y4 zwUHimMMBB0eMp0MFh^N28qJP@&>HMPk=pQ#W;?8WN>hqwG{b*FQ#BhRdLxj4kg>Xd z2qy%0utMUySrRwtiJtrK_K3dWMfD_DL6x1*5a&V4wXjoqwxJXv3YKshT%kq+$Un`D z2qYjmr7#T}x?K3BTBHY%WOigg=T0*%b?pzCyEg?bF%OC}HkN*>g#v&mlas$sGd!m$ z{*0!Aia9C(YuMPnxy4jPY0w^RK!)SC-g~GHnG6*(WIe(pyz2zOIbSoFK{5cUxoY_k z8Fm+&y=5GrO8wi2Qi*7bzNJR0lpv^HalGgVz{NdR!;G{8OzHTS!7~2jTxfQd@wr_G zvVYSVfZts+;z$NS`#YL$|BPmGAJR0xMN`4(TkVtJnlF!2D9)1JBWA2k9vE?uQJx{! z9md?si zB$kSWdOolcqe}ia($!0qMKkX0%kyGa1Xl=c5nOq$g86ZFw|` zf=G?prC(#vSn=hF@MxUkP_Jg7Ht32znBoA9Kytq?(9~bX_=u)5oIN9zR-ryU(zuYg zOR3?|zuzI$>~pPsr-TcMCRyCiK)Qj-6e0m26GGsQu9kc1Z2^+ICUF@+n_Wy|CP0~v zVSH>D(uYV^0W@)(?v_b$FA>5(`YX5PifMRn%^L%HAB3vJ9jQR>JhdLfUtYQWPg^Fp+glH zF1uo5fI447jf0JO{FeYg>OJF3?|`&x2I!TJY5rt=gq`0KXx`E>kDrUU*z6!*ZVs4z z=o*SHB@ok^vFM)_V{EJBZUAU<5oURhpm~qS)=fMG(-dzX)12JbX$Jodnw$%20Hk$M z05nbf?{sJcL;%t{b1^Jqt_i@R?v-}CT7&|iPHVVp1jL7xxStFZK$E)V!K>de@@6N} z0MxQ307j3NJOJ#p2n_*oa-n7VjTmV?85jaAxA9pGKoMR*;(24P#T};&lgrFi(QyWN+!Q zUr{;wE{23!_^5Ue1=V&$Co4!z=8^%Z(<4TlWAsKS^6%?gYf8%=IxOteMVF5U#2M@XvztQZVxps52AARlVW(XO3WZ@K@hYSrFiNY ztF7>mA_!uENlvLBCUWE}jS~T)cnVVLLKnn>p(H^NQ_3SoEfqzYK%yvN;#gj?bb?4$ z0D`!eR*p%~eQ=O5_%NR1fbj*I;WL`?do6IiBU_CWPmDJ9m!!8%F2V5AR}h^|Cl?|CC71PNjr9uQfBx2KV?^@#0Bg82&@uw ztFF^?$L!kFsYW3_N)!nM!owNUc}uf1snv*?m}dft9ESg=m?HI^aoVwc;)IMSTBYHbuUd^>-}> z*$k0CQ&(QtV(?cWyyHdm&E96y#ds0GuQW}440ZXxfhiYRByE0YhC>cV`W)cA4&S)q zJhHCWl+?O!O0Z2#3NPU5p(od-*^L4IfZ+^09mRAU%E;cHc2$y#AaK-Nt1ud1wd`Y0 zObN%)ytTMC0IM9TuR4bYjp!X3x0?xJ%7aH9VRqkhR-n56XxGQ z@_|zS{1uVcE`vg5N27Lz!(JI8&n*JEE{8px=h0OnRv!f;i(;pl35gdZu-t}FsB$up zd^Hn#<%m4rnaq?!5_n&3ltm*}g90N;;dzU}Uy;D_?_8*g=^kRx{mhK`2s3{a|0Sj* zPa|7|=N#a4%-$B~OsQO5Y#6|c&kvuvL!F5}Vkv2WBSBJYY^`-hn*dh5gleC3Fs1Ti z&XA*@CaFgsBi|~VF!QsviH06yWCOZx!C7M{ijkd}%!inqvMl01#H9b9Rz+;y4{hIr z4vBQXkAfXx)>ZQNKpK=dm@3~B0JiLR$bDDTYHjeBCY6fj_ie&2oQQ%*Oe6HZa&hxC zV31W{jR4qXU%lQpMNgAnH3TxW)MDKv{}m0blKbmOTOw)33VC;gnfMvz`XMH*mCg1q zF!zr!c`G2}`eqXt+)YaW@z#G<34o$Ts>$AIqtusx=dKEO3m|%$p)-*KsG*v{8iAPh z{do#n(d)YdL$o(K3+OBEHwW_JO#&(0=$Z%1pHMn zBUwEn(HEZTf$9Dm?0XV!Veo#lOew1v{_b$Fyr}v)b41^%@-4$xYgm zHnw_1dnTr7mU$_(x}?6q@4y$DpH?H}&ILQEpTeH0ZJK3XkLk|JvU)MiIi~*!ro;IZ zUtoS@c~o>2DfPM{JgJ*pfJaPc>Ly=4voHvRo}@`fLO3@9$}xO^?{0?lq=ZR!@GDBs zf*l(N1y%YAGn``je~+2I#+2BDD~~OnQWmo$2EeaE0l`{d)pyjKjKv~$80mmK^;KUxwZ~QX}RGuuA z;;RMJQd1IX?Nmb$+z96Z{?h7wUG@s6T5hQo^8uLE>O?oi){Y7c-*@V+Uk+&9=a_j# zz1Ph~#jNkm4=`WdDjqQL87B3Dcfl~D1e9$u78ly`oY`ckx0mpMVzcHzaBcC;yw@C; z>VA`#y<^5%Q&phwfMi!M0oQp6B^Nbg#VSZ))*OhooxHMAE<;{IP_GGq?XsxJCPUeD z9stQMK>)!u%OmE3VQ4YPKA^*7Ut+>VJxrm#h3TT`-x(ic%3S!M1QXRuhl1u*WgAtec&W zSe|7p`AP{heWe=87YZ(#`;GoeOmmJY{wJ6P%9Wlg({tGfI{g}J z4O!VxEmO<(P1kO9n4+w!g{)JE(-<)ABN(b>SXm!Vt&{7+6s3k-H@kt8(zh=#-)}c1NH*F;|8TJ<5*qrMwN-$P_iSGr7&g zI0LpwFLj}eaNQLAS|mO9M4EVM^bq4(Vr&75mg{bT6W^Y_ei=7YfP5YQqtBq-9XT8uR3{&`C=yEoo9B}*g81L(E7^|tGPLJceRaCQ} z@u^ZgVEW&{^j~6zwkG`?Q=*h0IybYdQprxk&6O_;K_#WZypEfZxO55mnd)NGL`oQr z>}Fi2;4f6aB!B?KApA~EE}9(?FEJtjFVdzIE?r-#yseHohJ1>Fzv!i1FlE?hj@K>* z$s)a=kKM_%N&TlWjp;G{PcbEUwwVdm%@%-@)`6V*$GGJpz| zz4sHf9<{bM{-O~%pSf{EavQc67wa-b zfX9>=fNr@e^wGrid%%*`Y%7-Ne7`9% zwbJ_mWomg?tTE8XxY|8y8zUwBnpS4w`sVu!r5N#E2K)dsKVLq^91nwAlW;ys`Og=a z>h2{J|Lb{AEXpETcqa4rcj5`7Nu?tGdfrxZl*$yAL}_EepOr8ZzyoB?Aj#(e6hn#E znqqqRe|!Q&;CyVE-(yaI@byCRER}h{6sMTt8<_H6WAd8OQBN@*Wh~t{!bZ!Z?}}*# zPb7XOrr|${(VOPTvn&Shy@dGL2z7=jPBG;<=7Z(Yzr_?v0dOvL%Ll;7=qO<hA%PukK%uaN&X?fQcl&d#UFr} z4nO!Ahj##SS|c#A4bb9;W+H z4hXZy(YP7^01)N~Ie|u*p>9MMV@VsJ`H@D5RDv4L zZFpWH8V)XT&&vSbog(Bc>m&i06Epq2Sz`EEatKa&>OlzxZaYkN%RkxlPgAy~nJ=6mx`|mL&;A*=wk8}u?|A%uBQj0$G%R&$?7)Jlo{UZe#U&7X|YyrV3 zVe4t8R8sUUkeHisz~rkwtdI{!AApxG7?wNe{v$i z_R0|6ag|+aN6sQEAc~mgEe?VmKC9oroTfjH$&aCJo0770Z>D;93E4yi(I+U$`{rui z_W4ww04-(ThmK#!38^adz@_4S<(_wtbN6&ikW%(BqDArV%3Zg`LySehR7@6p;!^UV zzS2Xq1w`@@Qi{H@YP2N_^%G1rU>*Zz{5?$ecks0r4z2F;H_C*}XHv}a>1z3xGYtoNTO~lLBF3Zm#*HzA0K&a9g3PC(t*;%^}yADHUiVi{MxbCnvU%)Y( z%Fu*UToG>vDT*9>j-lBeaNp>d^dTdZ0Kmj`gFUj$<}8MZ8*tm`u8$`%BtHVSmF~cV z-@#Ph!gQyY7%=sKDJB5vJpoW`3rzdX>XaS@Qk1k5V)dG@;V>xysrQ}ncL30F4_w*Z zPX0-}MD3w;T7zMmw7H0npe2({6V8FP<-So{N~;@`n6{oT$m>C=3~jHzOhKa^)zvUcM>&_sR-px8mln1=HP23?{}YQurpOUH=PAdE_cr^o0|LY!%yfD)P;}uTw0I zejN^72H5@_e`-@Wm0y#c#0EZ=tg{D+#pL*`O-|PsRKNES1A9#n`Q-EoW(=ZX));-k zfip~g6Vv@CnCF&9uD+allb#dT81yohLB~?3=*2YQ*_kE*uA9Q04e(vh=x2KzB!qY_ zf9j_=w>%2p$MnC8SwD*S4NRVby}2?48%Bg*s{=yZsWz_$Yp{|!uu_w290p$*;vT*FqouUjC!p&azHncV@rhTZ4Ryx|vs zdvR#sVbXpD@LEp1$?7}2Wla{q7k2>s)$Jj--n16L8%iToHi;X6mvq>&B!8nSu^bY5 z3U>gncJC{tVuyJN8-Q28d)_S)-5VT99++gZ-C54J}HVS*pUbV zFj_zaK;{@7CgUk(%>7?uvac{Bo-t{GkxI8dvXv2YF%T_}rifS0meE$G_ww7<(&bBb zhs)hcBfdra4L*~MrA%?}VyqEYi5Y;hr!nkaG|HSusNALfy?Yi@jD-e>st#-e=t5@z zGPHB?4m15pOh*1tpI~-oLt8J{NhqCBI_nxaymZvFGtD@lb_7%(O>v@98P3^i8+>^# zmFZ%1RS)A7=5vTt8;(kxmtOp7O!X?geUb89 zrPal#dZMA=rdEBJrqVjcl;HKlVy7`!`J9GHldRU<$6_-h z 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 + + + + + + {{config.title}} + + + + + + + + + + Profile Picture + + +
+ {{config.name}} +
+ +
+ {{config.description}} +
+ {% for section in links %} +
+ {{section.title}} +
+ + {% endfor %} + +
+ +
+ + + +