From 9e38fdbbebc5f18ce56802e17ce8a1448364dbd7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 15:09:09 +0200
Subject: [PATCH 01/50] chore: initialize the Dioxus project

---
 .gitignore             |   12 +
 .idea/.gitignore       |    5 +
 .idea/modules.xml      |    8 +
 .idea/rust.xml         |    6 +
 .idea/todo_baggins.iml |   13 +
 .idea/vcs.xml          |   12 +
 Cargo.lock             | 2029 ++++++++++++++++++++++++++++++++++++++++
 Cargo.toml             |   14 +
 Dioxus.toml            |   43 +
 README.md              |   17 +
 assets/favicon.ico     |  Bin 0 -> 132770 bytes
 assets/header.svg      |  171 ++++
 assets/main.css        |   40 +
 input.css              |    3 +
 src/main.rs            |   52 +
 tailwind.config.js     |    9 +
 16 files changed, 2434 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 .idea/.gitignore
 create mode 100644 .idea/modules.xml
 create mode 100644 .idea/rust.xml
 create mode 100644 .idea/todo_baggins.iml
 create mode 100644 .idea/vcs.xml
 create mode 100644 Cargo.lock
 create mode 100644 Cargo.toml
 create mode 100644 Dioxus.toml
 create mode 100644 README.md
 create mode 100644 assets/favicon.ico
 create mode 100644 assets/header.svg
 create mode 100644 assets/main.css
 create mode 100644 input.css
 create mode 100644 src/main.rs
 create mode 100644 tailwind.config.js

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5f0b8d2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+# Generated by Cargo
+# will have compiled files and executables
+/target/
+/dist/
+/static/
+/.dioxus/
+
+# this file will generate by tailwind:
+/assets/tailwind.css
+
+# These are backup files generated by rustfmt
+**/*.rs.bk
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..b58b603
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,5 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..daa234f
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/.idea/todo_baggins.iml" filepath="$PROJECT_DIR$/.idea/todo_baggins.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/rust.xml b/.idea/rust.xml
new file mode 100644
index 0000000..7bc91ea
--- /dev/null
+++ b/.idea/rust.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RsVcsConfiguration">
+    <option name="rustFmt" value="true" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/todo_baggins.iml b/.idea/todo_baggins.iml
new file mode 100644
index 0000000..0e0cd5b
--- /dev/null
+++ b/.idea/todo_baggins.iml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="EMPTY_MODULE" version="4">
+  <component name="NewModuleRootManager">
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/backend/src" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+      <excludeFolder url="file://$MODULE_DIR$/backend/target" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..4c6280e
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CommitMessageInspectionProfile">
+    <profile version="1.0">
+      <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
+      <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
+    </profile>
+  </component>
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..82fc1ea
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,2029 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
+dependencies = [
+    "cfg-if",
+    "once_cell",
+    "version_check",
+    "zerocopy",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
+
+[[package]]
+name = "anymap2"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c"
+
+[[package]]
+name = "async-channel"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
+dependencies = [
+    "concurrent-queue",
+    "event-listener-strategy",
+    "futures-core",
+    "pin-project-lite",
+]
+
+[[package]]
+name = "async-task"
+version = "4.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
+
+[[package]]
+name = "async-trait"
+version = "0.1.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+    "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
+dependencies = [
+    "serde",
+]
+
+[[package]]
+name = "blocking"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
+dependencies = [
+    "async-channel",
+    "async-task",
+    "futures-io",
+    "futures-lite",
+    "piper",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
+
+[[package]]
+name = "bytes"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
+
+[[package]]
+name = "camino"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239"
+dependencies = [
+    "serde",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc"
+dependencies = [
+    "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
+dependencies = [
+    "camino",
+    "cargo-platform",
+    "semver",
+    "serde",
+    "serde_json",
+    "thiserror",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
+dependencies = [
+    "smallvec",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "ciborium"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
+dependencies = [
+    "ciborium-io",
+    "ciborium-ll",
+    "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
+dependencies = [
+    "ciborium-io",
+    "half",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
+dependencies = [
+    "crossbeam-utils",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+    "cfg-if",
+    "wasm-bindgen",
+]
+
+[[package]]
+name = "const_format"
+version = "0.2.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673"
+dependencies = [
+    "const_format_proc_macros",
+]
+
+[[package]]
+name = "const_format_proc_macros"
+version = "0.2.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "unicode-xid",
+]
+
+[[package]]
+name = "constcat"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08"
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+    "unicode-segmentation",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "darling"
+version = "0.20.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
+dependencies = [
+    "darling_core",
+    "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
+dependencies = [
+    "fnv",
+    "ident_case",
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
+dependencies = [
+    "darling_core",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+    "cfg-if",
+    "hashbrown",
+    "lock_api",
+    "once_cell",
+    "parking_lot_core",
+]
+
+[[package]]
+name = "dioxus"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e7fe217b50d43b27528b0f24c89b411f742a3e7564d1cfbf85253f967954db"
+dependencies = [
+    "dioxus-config-macro",
+    "dioxus-core",
+    "dioxus-core-macro",
+    "dioxus-fullstack",
+    "dioxus-hooks",
+    "dioxus-hot-reload",
+    "dioxus-html",
+    "dioxus-router",
+    "dioxus-signals",
+    "dioxus-web",
+]
+
+[[package]]
+name = "dioxus-cli-config"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7dffc452ed91af6ef772b0d9a5899573f6785314e97c533733ec55413c01df3"
+dependencies = [
+    "once_cell",
+    "serde",
+    "serde_json",
+    "tracing",
+]
+
+[[package]]
+name = "dioxus-config-macro"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb1a1aa34cc04c1f7fcbb7a10791ba773cc02d834fe3ec1fe05647699f3b101f"
+dependencies = [
+    "proc-macro2",
+    "quote",
+]
+
+[[package]]
+name = "dioxus-core"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3730d2459ab66951cedf10b09eb84141a6eda7f403c28057cbe010495be156b7"
+dependencies = [
+    "futures-channel",
+    "futures-util",
+    "generational-box",
+    "longest-increasing-subsequence",
+    "rustc-hash",
+    "serde",
+    "slab",
+    "slotmap",
+    "tracing",
+    "tracing-subscriber",
+]
+
+[[package]]
+name = "dioxus-core-macro"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d9c0dfe0e6a46626fa716c4aa1d2ccb273441337909cfeacad5bb6fcfb947d2"
+dependencies = [
+    "constcat",
+    "convert_case",
+    "dioxus-rsx",
+    "prettyplease",
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "dioxus-debug-cell"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ea539174bb236e0e7dc9c12b19b88eae3cb574dedbd0252a2d43ea7e6de13e2"
+
+[[package]]
+name = "dioxus-fullstack"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b80f0ac18166302341164e681322e0385131c08a11c3cc1c51ee8df799ab0d3d"
+dependencies = [
+    "async-trait",
+    "base64",
+    "bytes",
+    "ciborium",
+    "dioxus-hot-reload",
+    "dioxus-lib",
+    "dioxus-web",
+    "dioxus_server_macro",
+    "futures-util",
+    "once_cell",
+    "serde",
+    "serde_json",
+    "server_fn",
+    "tracing",
+    "web-sys",
+]
+
+[[package]]
+name = "dioxus-hooks"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa8f9c661eea82295219d25555d5c0b597e74186b029038ceb5e3700ccbd4380"
+dependencies = [
+    "dioxus-core",
+    "dioxus-debug-cell",
+    "dioxus-signals",
+    "futures-channel",
+    "futures-util",
+    "generational-box",
+    "slab",
+    "thiserror",
+    "tracing",
+]
+
+[[package]]
+name = "dioxus-hot-reload"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77d01246cb1b93437fb0bbd0dd11cfc66342d86b4311819e76654f2017ce1473"
+dependencies = [
+    "dioxus-core",
+    "dioxus-html",
+    "dioxus-rsx",
+    "interprocess-docfix",
+    "serde",
+    "serde_json",
+]
+
+[[package]]
+name = "dioxus-html"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f01a0826f179adad6ea8d6586746e8edde0c602cc86f4eb8e5df7a3b204c4018"
+dependencies = [
+    "async-trait",
+    "dioxus-core",
+    "dioxus-html-internal-macro",
+    "enumset",
+    "euclid",
+    "futures-channel",
+    "generational-box",
+    "keyboard-types",
+    "serde",
+    "serde-value",
+    "serde_json",
+    "serde_repr",
+    "tracing",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "dioxus-html-internal-macro"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b96f35a608d0ab8f4ca6f66ce1828354e4ebd41580b12454f490221a11da93c"
+dependencies = [
+    "convert_case",
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "dioxus-interpreter-js"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "351fad098c657d14f3ac2900362d2b86e83c22c4c620a404839e1ab628f3395b"
+dependencies = [
+    "js-sys",
+    "md5",
+    "sledgehammer_bindgen",
+    "sledgehammer_utils",
+    "wasm-bindgen",
+    "wasm-bindgen-futures",
+    "web-sys",
+]
+
+[[package]]
+name = "dioxus-lib"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bd39b2c41dd1915dcb91d914ea72d8b646f1f8995aaeff82816b862ec586ecd"
+dependencies = [
+    "dioxus-core",
+    "dioxus-core-macro",
+    "dioxus-hooks",
+    "dioxus-html",
+    "dioxus-rsx",
+    "dioxus-signals",
+]
+
+[[package]]
+name = "dioxus-logger"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fe09dc9773dc1f1bb0d38529203d6555d08f67aadca5cf955ac3d1a9e69880"
+dependencies = [
+    "console_error_panic_hook",
+    "tracing",
+    "tracing-subscriber",
+    "tracing-wasm",
+]
+
+[[package]]
+name = "dioxus-router"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c235c5dbeb528c0c2b0424763da812e7500df69b82eddac54db6f4975e065c5f"
+dependencies = [
+    "dioxus-cli-config",
+    "dioxus-lib",
+    "dioxus-router-macro",
+    "gloo",
+    "gloo-utils 0.1.7",
+    "js-sys",
+    "tracing",
+    "url",
+    "urlencoding",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "dioxus-router-macro"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e7cd1c5137ba361f2150cdea6b3bc9ddda7b1af84b22c9ee6b5499bf43e1381"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "slab",
+    "syn",
+]
+
+[[package]]
+name = "dioxus-rsx"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c400bc8a779107d8f3a67b14375db07dbd2bc31163bf085a8e9097f36f7179"
+dependencies = [
+    "dioxus-core",
+    "internment",
+    "krates",
+    "proc-macro2",
+    "quote",
+    "syn",
+    "tracing",
+]
+
+[[package]]
+name = "dioxus-signals"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e3e224cd3d3713f159f0199fc088c292a0f4adb94996b48120157f6a8f8342d"
+dependencies = [
+    "dioxus-core",
+    "futures-channel",
+    "futures-util",
+    "generational-box",
+    "once_cell",
+    "parking_lot",
+    "rustc-hash",
+    "tracing",
+]
+
+[[package]]
+name = "dioxus-web"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0855ac81fcc9252a0863930a7a7cbb2504fc1b6efe893489c8d0e23aaeb2cb9"
+dependencies = [
+    "async-trait",
+    "console_error_panic_hook",
+    "dioxus-core",
+    "dioxus-html",
+    "dioxus-interpreter-js",
+    "futures-channel",
+    "futures-util",
+    "generational-box",
+    "js-sys",
+    "rustc-hash",
+    "serde",
+    "serde-wasm-bindgen",
+    "serde_json",
+    "tracing",
+    "wasm-bindgen",
+    "wasm-bindgen-futures",
+    "web-sys",
+]
+
+[[package]]
+name = "dioxus_server_macro"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5ef2cad17001c1155f019cb69adbacd620644566d78a77d0778807bb106a337"
+dependencies = [
+    "convert_case",
+    "proc-macro2",
+    "quote",
+    "server_fn_macro",
+    "syn",
+]
+
+[[package]]
+name = "enumset"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293"
+dependencies = [
+    "enumset_derive",
+]
+
+[[package]]
+name = "enumset_derive"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242"
+dependencies = [
+    "darling",
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "euclid"
+version = "0.22.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20"
+dependencies = [
+    "num-traits",
+    "serde",
+]
+
+[[package]]
+name = "event-listener"
+version = "5.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
+dependencies = [
+    "concurrent-queue",
+    "parking",
+    "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1"
+dependencies = [
+    "event-listener",
+    "pin-project-lite",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+    "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+dependencies = [
+    "futures-channel",
+    "futures-core",
+    "futures-executor",
+    "futures-io",
+    "futures-sink",
+    "futures-task",
+    "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+    "futures-core",
+    "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+    "futures-core",
+    "futures-task",
+    "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-lite"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5"
+dependencies = [
+    "futures-core",
+    "pin-project-lite",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+    "futures-channel",
+    "futures-core",
+    "futures-io",
+    "futures-macro",
+    "futures-sink",
+    "futures-task",
+    "memchr",
+    "pin-project-lite",
+    "pin-utils",
+    "slab",
+]
+
+[[package]]
+name = "generational-box"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "557cf2cbacd0504c6bf8c29f52f8071e0de1d9783346713dc6121d7fa1e5d0e0"
+dependencies = [
+    "parking_lot",
+]
+
+[[package]]
+name = "gloo"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d"
+dependencies = [
+    "gloo-console",
+    "gloo-dialogs",
+    "gloo-events",
+    "gloo-file",
+    "gloo-history",
+    "gloo-net 0.3.1",
+    "gloo-render",
+    "gloo-storage",
+    "gloo-timers",
+    "gloo-utils 0.1.7",
+    "gloo-worker",
+]
+
+[[package]]
+name = "gloo-console"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f"
+dependencies = [
+    "gloo-utils 0.1.7",
+    "js-sys",
+    "serde",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-dialogs"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6"
+dependencies = [
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-events"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc"
+dependencies = [
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-file"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7"
+dependencies = [
+    "gloo-events",
+    "js-sys",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-history"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f"
+dependencies = [
+    "gloo-events",
+    "gloo-utils 0.1.7",
+    "serde",
+    "serde-wasm-bindgen",
+    "serde_urlencoded",
+    "thiserror",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-net"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620"
+dependencies = [
+    "futures-channel",
+    "futures-core",
+    "futures-sink",
+    "gloo-utils 0.1.7",
+    "http 0.2.12",
+    "js-sys",
+    "pin-project",
+    "serde",
+    "serde_json",
+    "thiserror",
+    "wasm-bindgen",
+    "wasm-bindgen-futures",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-net"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580"
+dependencies = [
+    "futures-channel",
+    "futures-core",
+    "futures-sink",
+    "gloo-utils 0.2.0",
+    "http 1.1.0",
+    "js-sys",
+    "pin-project",
+    "serde",
+    "serde_json",
+    "thiserror",
+    "wasm-bindgen",
+    "wasm-bindgen-futures",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-render"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764"
+dependencies = [
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-storage"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480"
+dependencies = [
+    "gloo-utils 0.1.7",
+    "js-sys",
+    "serde",
+    "serde_json",
+    "thiserror",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+    "js-sys",
+    "wasm-bindgen",
+]
+
+[[package]]
+name = "gloo-utils"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e"
+dependencies = [
+    "js-sys",
+    "serde",
+    "serde_json",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-utils"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
+dependencies = [
+    "js-sys",
+    "serde",
+    "serde_json",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "gloo-worker"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a"
+dependencies = [
+    "anymap2",
+    "bincode",
+    "gloo-console",
+    "gloo-utils 0.1.7",
+    "js-sys",
+    "serde",
+    "wasm-bindgen",
+    "wasm-bindgen-futures",
+    "web-sys",
+]
+
+[[package]]
+name = "half"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
+dependencies = [
+    "cfg-if",
+    "crunchy",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
+dependencies = [
+    "ahash",
+    "allocator-api2",
+]
+
+[[package]]
+name = "http"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
+dependencies = [
+    "bytes",
+    "fnv",
+    "itoa",
+]
+
+[[package]]
+name = "http"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
+dependencies = [
+    "bytes",
+    "fnv",
+    "itoa",
+]
+
+[[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.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+    "unicode-bidi",
+    "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c"
+dependencies = [
+    "equivalent",
+    "hashbrown",
+]
+
+[[package]]
+name = "internment"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04e8e537b529b8674e97e9fb82c10ff168a290ac3867a0295f112061ffbca1ef"
+dependencies = [
+    "hashbrown",
+    "parking_lot",
+]
+
+[[package]]
+name = "interprocess-docfix"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b84ee245c606aeb0841649a9288e3eae8c61b853a8cd5c0e14450e96d53d28f"
+dependencies = [
+    "blocking",
+    "cfg-if",
+    "futures-core",
+    "futures-io",
+    "intmap",
+    "libc",
+    "once_cell",
+    "rustc_version",
+    "spinning",
+    "thiserror",
+    "to_method",
+    "winapi",
+]
+
+[[package]]
+name = "intmap"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9"
+
+[[package]]
+name = "itoa"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
+
+[[package]]
+name = "js-sys"
+version = "0.3.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
+dependencies = [
+    "wasm-bindgen",
+]
+
+[[package]]
+name = "keyboard-types"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
+dependencies = [
+    "bitflags",
+    "serde",
+    "unicode-segmentation",
+]
+
+[[package]]
+name = "krates"
+version = "0.16.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcb3baf2360eb25ad31f0ada3add63927ada6db457791979b82ac199f835cb9"
+dependencies = [
+    "cargo-platform",
+    "cargo_metadata",
+    "cfg-expr",
+    "petgraph",
+    "semver",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
+
+[[package]]
+name = "libc"
+version = "0.2.155"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
+
+[[package]]
+name = "lock_api"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
+dependencies = [
+    "autocfg",
+    "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
+
+[[package]]
+name = "longest-increasing-subsequence"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3bd0dd2cd90571056fdb71f6275fada10131182f84899f4b2a916e565d81d86"
+
+[[package]]
+name = "lru"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904"
+dependencies = [
+    "hashbrown",
+]
+
+[[package]]
+name = "md5"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
+
+[[package]]
+name = "memchr"
+version = "2.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
+
+[[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-traits"
+version = "0.2.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
+dependencies = [
+    "autocfg",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "ordered-float"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
+dependencies = [
+    "num-traits",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
+dependencies = [
+    "lock_api",
+    "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
+dependencies = [
+    "cfg-if",
+    "libc",
+    "redox_syscall",
+    "smallvec",
+    "windows-targets",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "petgraph"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
+dependencies = [
+    "fixedbitset",
+    "indexmap",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
+dependencies = [
+    "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "piper"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
+dependencies = [
+    "atomic-waker",
+    "fastrand",
+    "futures-io",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
+dependencies = [
+    "proc-macro2",
+    "syn",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
+dependencies = [
+    "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
+dependencies = [
+    "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
+dependencies = [
+    "bitflags",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+    "semver",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "semver"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
+dependencies = [
+    "serde",
+]
+
+[[package]]
+name = "send_wrapper"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
+dependencies = [
+    "futures-core",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.207"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2"
+dependencies = [
+    "serde_derive",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+    "ordered-float",
+    "serde",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
+dependencies = [
+    "js-sys",
+    "serde",
+    "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.207"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.125"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed"
+dependencies = [
+    "itoa",
+    "memchr",
+    "ryu",
+    "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c"
+dependencies = [
+    "percent-encoding",
+    "serde",
+    "thiserror",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[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 = "server_fn"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "024b400db1aca5bd4188714f7bbbf7a2e1962b9a12a80b2a21e937e509086963"
+dependencies = [
+    "bytes",
+    "const_format",
+    "dashmap",
+    "futures",
+    "gloo-net 0.6.0",
+    "http 1.1.0",
+    "js-sys",
+    "once_cell",
+    "send_wrapper",
+    "serde",
+    "serde_json",
+    "serde_qs",
+    "server_fn_macro_default",
+    "thiserror",
+    "url",
+    "wasm-bindgen",
+    "wasm-bindgen-futures",
+    "wasm-streams",
+    "web-sys",
+    "xxhash-rust",
+]
+
+[[package]]
+name = "server_fn_macro"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf0e6f71fc924df36e87f27dfbd447f0bedd092d365db3a5396878256d9f00c"
+dependencies = [
+    "const_format",
+    "convert_case",
+    "proc-macro2",
+    "quote",
+    "syn",
+    "xxhash-rust",
+]
+
+[[package]]
+name = "server_fn_macro_default"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556e4fd51eb9ee3e7d9fb0febec6cef486dcbc8f7f427591dfcfebee1abe1ad4"
+dependencies = [
+    "server_fn_macro",
+    "syn",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+    "lazy_static",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+    "autocfg",
+]
+
+[[package]]
+name = "sledgehammer_bindgen"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcfaf791ff02f48f3518ce825d32cf419c13a43c1d8b1232f74ac89f339c46d2"
+dependencies = [
+    "sledgehammer_bindgen_macro",
+    "wasm-bindgen",
+]
+
+[[package]]
+name = "sledgehammer_bindgen_macro"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edc90d3e8623d29a664cd8dba5078b600dd203444f00b9739f744e4c6e7aeaf2"
+dependencies = [
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "sledgehammer_utils"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f20798defa0e9d4eff9ca451c7f84774c7378a9c3b5a40112cfa2b3eadb97ae2"
+dependencies = [
+    "lru",
+    "once_cell",
+    "rustc-hash",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
+dependencies = [
+    "serde",
+    "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+
+[[package]]
+name = "spinning"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b"
+dependencies = [
+    "lock_api",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
+dependencies = [
+    "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
+dependencies = [
+    "cfg-if",
+    "once_cell",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
+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 = "to_method"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8"
+
+[[package]]
+name = "todo-baggins"
+version = "0.1.0"
+dependencies = [
+    "dioxus",
+    "dioxus-logger",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+    "pin-project-lite",
+    "tracing-attributes",
+    "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+    "once_cell",
+    "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+    "log",
+    "once_cell",
+    "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+    "nu-ansi-term",
+    "sharded-slab",
+    "smallvec",
+    "thread_local",
+    "tracing-core",
+    "tracing-log",
+]
+
+[[package]]
+name = "tracing-wasm"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07"
+dependencies = [
+    "tracing",
+    "tracing-subscriber",
+    "wasm-bindgen",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
+dependencies = [
+    "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "url"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
+dependencies = [
+    "form_urlencoded",
+    "idna",
+    "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
+dependencies = [
+    "cfg-if",
+    "once_cell",
+    "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
+dependencies = [
+    "bumpalo",
+    "log",
+    "once_cell",
+    "proc-macro2",
+    "quote",
+    "syn",
+    "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed"
+dependencies = [
+    "cfg-if",
+    "js-sys",
+    "wasm-bindgen",
+    "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
+dependencies = [
+    "quote",
+    "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+    "wasm-bindgen-backend",
+    "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484"
+
+[[package]]
+name = "wasm-streams"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129"
+dependencies = [
+    "futures-util",
+    "js-sys",
+    "wasm-bindgen",
+    "wasm-bindgen-futures",
+    "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0"
+dependencies = [
+    "js-sys",
+    "wasm-bindgen",
+]
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-targets"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
+dependencies = [
+    "windows_aarch64_gnullvm",
+    "windows_aarch64_msvc",
+    "windows_i686_gnu",
+    "windows_i686_gnullvm",
+    "windows_i686_msvc",
+    "windows_x86_64_gnu",
+    "windows_x86_64_gnullvm",
+    "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
+
+[[package]]
+name = "xxhash-rust"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a5cbf750400958819fb6178eaa83bee5cd9c29a26a40cc241df8c70fdd46984"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+    "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+    "proc-macro2",
+    "quote",
+    "syn",
+]
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..ea950f0
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "todo-baggins"
+version = "0.1.0"
+authors = ["Matouš Volf <66163112+matous-volf@users.noreply.github.com>"]
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+
+dioxus = { version = "0.5", features = ["web", "router"] }
+
+# Debug
+dioxus-logger = "0.5.1"
diff --git a/Dioxus.toml b/Dioxus.toml
new file mode 100644
index 0000000..5f5dfa2
--- /dev/null
+++ b/Dioxus.toml
@@ -0,0 +1,43 @@
+[application]
+
+# App (Project) Name
+name = "todo-baggins"
+
+# Dioxus App Default Platform
+# web, desktop, fullstack
+default_platform = "web"
+
+# `build` & `serve` dist path
+out_dir = "dist"
+
+# resource (assets) file folder
+asset_dir = "assets"
+
+[web.app]
+
+# HTML title tag content
+title = "todo-baggins"
+
+[web.watcher]
+
+# when watcher trigger, regenerate the `index.html`
+reload_html = true
+
+# which files or dirs will be watcher monitoring
+watch_path = ["src", "assets"]
+
+# include `assets` in web platform
+[web.resource]
+
+# CSS style file
+
+style = ["/tailwind.css"]
+
+# Javascript code file
+script = []
+
+[web.resource.dev]
+
+# Javascript code file
+# serve: [dev-server] only
+script = []
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0458151
--- /dev/null
+++ b/README.md
@@ -0,0 +1,17 @@
+# Development
+
+1. Install npm: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
+2. Install the tailwind css cli: https://tailwindcss.com/docs/installation
+3. Run the following command in the root of the project to start the tailwind CSS compiler:
+
+```bash
+npx tailwindcss -i ./input.css -o ./assets/tailwind.css --watch
+```
+
+Run the following command in the root of the project to start the Dioxus dev server:
+
+```bash
+dx serve --hot-reload
+```
+
+- Open the browser to http://localhost:8080
\ No newline at end of file
diff --git a/assets/favicon.ico b/assets/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..eed0c09735ab94e724c486a053c367cf7ee3d694
GIT binary patch
literal 132770
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

literal 0
HcmV?d00001

diff --git a/assets/header.svg b/assets/header.svg
new file mode 100644
index 0000000..3581419
--- /dev/null
+++ b/assets/header.svg
@@ -0,0 +1,171 @@
+<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1007 197">
+    <style>
+        @keyframes a0_t { 0% { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } 35% {
+        transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); animation-timing-function:
+        cubic-bezier(.6,0,.4,1); } 45% { transform: translate(225px,339.9px) scale(1,1) translate(-89.5px,-24px); } 50%
+        { transform: translate(225px,339.9px) scale(1,1) translate(-89.5px,-24px); animation-timing-function:
+        cubic-bezier(.6,0,.4,1); } 60% { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } 100%
+        { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } }
+        @keyframes a1_t { 0% { transform: translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); } 20% {
+        transform: translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); animation-timing-function:
+        cubic-bezier(.6,0,.4,1); } 30% { transform: translate(225px,348.9px) scale(1,1) translate(-41.5px,-11px); } 35%
+        { transform: translate(225px,348.9px) scale(1,1) translate(-41.5px,-11px); } 45% { transform:
+        translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); } 100% { transform: translate(225px,348.9px)
+        scale(0,1) translate(-41.5px,-11px); } }
+        @keyframes a3_t { 0% { transform: translate(225px,198.9px) rotate(-90deg); } 10% { transform:
+        translate(225px,198.9px) rotate(-90deg); } 20% { transform: translate(225px,198.9px) rotate(-90deg);
+        animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: translate(225px,198.9px) rotate(0deg); }
+        35% { transform: translate(225px,198.9px) rotate(0deg); } 45% { transform: translate(225px,198.9px)
+        rotate(0deg); } 50% { transform: translate(225px,198.9px) rotate(0deg); animation-timing-function:
+        cubic-bezier(.6,0,.4,1); } 60% { transform: translate(225px,198.9px) rotate(-90deg); } 65% { transform:
+        translate(225px,198.9px) rotate(-90deg); } 75% { transform: translate(225px,198.9px) rotate(-90deg); } 100% {
+        transform: translate(225px,198.9px) rotate(-90deg); } }
+        @keyframes a2_t { 0% { transform: translate(-200px,-167px); animation-timing-function: cubic-bezier(.6,0,.4,1);
+        } 10% { transform: translate(-150px,-80px); } 20% { transform: translate(-150px,-80px);
+        animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: translate(-200px,-123px); } 35% {
+        transform: translate(-200px,-123px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { transform:
+        translate(-150px,-100px); } 50% { transform: translate(-150px,-100px); animation-timing-function:
+        cubic-bezier(.6,0,.4,1); } 60% { transform: translate(-150px,-80px); } 65% { transform: translate(-150px,-80px);
+        animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { transform: translate(-217px,-200px); } 100% {
+        transform: translate(-217px,-200px); } }
+        @keyframes a2_o { 0% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { opacity: 1; } 65%
+        { opacity: 1; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { opacity: 0; } 100% { opacity: 0; } }
+        @keyframes a2_sw { 0% { stroke-width: 30px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% {
+        stroke-width: 8px; } 65% { stroke-width: 8px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% {
+        stroke-width: 30px; } 100% { stroke-width: 30px; } }
+        @keyframes a2_w { 0% { width: 400px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { width: 300px; }
+        20% { width: 300px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { width: 400px; } 35% { width:
+        400px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { width: 300px; } 50% { width: 300px; } 60% {
+        width: 300px; } 65% { width: 300px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { width: 434px; }
+        100% { width: 434px; } }
+        @keyframes a2_h { 0% { height: 334px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { height: 160px;
+        } 20% { height: 160px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { height: 246px; } 35% {
+        height: 246px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { height: 200px; } 50% { height: 200px;
+        animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% { height: 160px; } 65% { height: 160px;
+        animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { height: 400px; } 100% { height: 400px; } }
+        @keyframes a4_t { 0% { transform: translate(143.5px,48.9px); } 10% { transform: translate(180.5px,98.9px); }
+        100% { transform: translate(180.5px,98.9px); } }
+        @keyframes a4_w { 0% { width: 168.5px; } 10% { width: 94.5px; } 100% { width: 94.5px; } }
+        @keyframes a4_h { 0% { height: 302px; } 10% { height: 202px; } 100% { height: 202px; } }
+        @keyframes a5_t { 0% { transform: translate(217px,324.9px); animation-timing-function: cubic-bezier(.6,0,.4,1);
+        } 10% { transform: translate(190px,324.9px); } 20% { transform: translate(190px,324.9px); } 30% { transform:
+        translate(190px,324.9px); } 100% { transform: translate(190px,324.9px); } }
+        @keyframes a5_o { 0% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { opacity: 1; } 20%
+        { opacity: 1; } 30% { opacity: 0; } 100% { opacity: 0; } }
+        @keyframes a5_w { 0% { width: 16px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { width: 70px; }
+        20% { width: 70px; } 30% { width: 70px; } 100% { width: 70px; } }
+        @keyframes a6_t { 0% { transform: translate(217px,324.9px); } 50% { transform: translate(217px,324.9px);
+        animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% { transform: translate(190px,324.9px); } 65% {
+        transform: translate(190px,324.9px); } 75% { transform: translate(190px,324.9px); } 100% { transform:
+        translate(190px,324.9px); } }
+        @keyframes a6_o { 0% { opacity: 0; } 50% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 60%
+        { opacity: 1; } 65% { opacity: 1; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { opacity: 0; } 100%
+        { opacity: 0; } }
+        @keyframes a6_w { 0% { width: 16px; } 50% { width: 16px; animation-timing-function: cubic-bezier(.6,0,.4,1); }
+        60% { width: 70px; } 65% { width: 70px; } 75% { width: 70px; } 100% { width: 70px; } }
+        @keyframes a7_t { 0% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px);
+        animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { transform: translate(225px,198.9px) scale(1,1)
+        translate(-42.3px,-93px); } 20% { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px);
+        animation-timing-function: cubic-bezier(.6,0,.4,1); } 25% { transform: translate(225px,198.9px) scale(.8,.8)
+        translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform:
+        translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); } 35% { transform: translate(225px,198.9px)
+        scale(1,1) translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.4,0,.6,1); } 45% { transform:
+        translate(225px,198.9px) scale(.8,.8) translate(-42.3px,-93px); } 50% { transform: translate(225px,198.9px)
+        scale(.8,.8) translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.4,0,.6,1); } 55% { transform:
+        translate(225px,198.9px) scale(.7,.7) translate(-42.3px,-93px); animation-timing-function:
+        cubic-bezier(.4,0,.6,1); } 60% { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); } 65%
+        { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); animation-timing-function:
+        cubic-bezier(.4,0,.6,1); } 75% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); }
+        100% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); } }
+    </style>
+    <defs>
+        <symbol id="Symbol-2" preserveAspectRatio="none" width="111.5" height="186" viewBox="0 0 111.5 186"
+                overflow="visible">
+            <g transform="translate(8.5,4.5)">
+                <rect x="4" width="85" height="8" fill="#d9d9d9"/>
+                <rect x="4" y="26" width="85" height="8" fill="#d9d9d9"/>
+                <rect x="25" y="56" width="43" height="8" fill="#d9d9d9"/>
+                <rect width="85" height="8" fill="#d9d9d9"
+                      transform="translate(46.5,175) rotate(180) scale(-1,1) translate(-42.5,-4)"/>
+                <rect width="85" height="8" fill="#d9d9d9"
+                      transform="translate(46.5,149) rotate(180) scale(-1,1) translate(-42.5,-4)"/>
+                <rect width="43" height="8" fill="#d9d9d9"
+                      transform="translate(46.5,119) rotate(180) scale(-1,1) translate(-21.5,-4)"/>
+                <path d="M0 4c0 53 94.5 115 94.5 169" stroke="#3cc4dc" stroke-width="17" stroke-linecap="square"
+                      fill="none"/>
+                <path d="M94.5 4c0 53-94.5 115-94.5 169" stroke="#fb422d" stroke-width="17" stroke-linecap="square"
+                      fill="none"/>
+            </g>
+        </symbol>
+        <symbol id="Symbol-5" preserveAspectRatio="none" width="84.5" height="186" viewBox="0 0 84.5 186"
+                overflow="visible">
+            <g transform="translate(42.3,93) scale(5.352,6.9) translate(-16,60)">
+                <g transform="translate(-34.9,-125.8)">
+                    <g transform="translate(24,5)">
+                        <path d="M33 46.5c0 3.1-0.8 5.5-2.2 7.4c-1.4 1.9-3.3 3.6-5.4 5.4c-2.2 1.7-4.5 3.6-6.3 6.2c-1.8 2.5-3.1 5.5-3.1 9.5h4.7c0-3.1 .9-5.4 2.2-7.3c1.4-1.9 3.3-3.5 5.5-5.3c2.1-1.8 4.4-3.7 6.2-6.2c1.8-2.6 3.1-5.6 3.1-9.7Z"
+                              fill="#e96020"/>
+                        <path d="M20.4 70.7c-0.6 0-1 .5-1 1.1c0 .7 .4 1.2 1 1.2h12.9c.7 0 1.2-0.5 1.2-1.2c0-0.6-0.5-1.1-1.2-1.1Z"
+                              fill="#2d323b"/>
+                        <path d="M21.8 66.6c-0.7 0-1 .6-1 1.2c0 .6 .3 1 .9 1h10.3c.6 0 1.1-0.5 1.1-1.1c0-0.6-0.5-1.1-1.1-1.1Z"
+                              fill="#2d323b"/>
+                        <path d="M21.8 53c-0.7 0-1.2 .5-1.1 1.1c0 .6 .4 1.1 1.1 1.1h10.2c.6 0 .9-0.6 .9-1.2c0-0.6-0.3-1-0.9-1Z"
+                              fill="#2d323b"/>
+                        <path d="M20.4 48.8c-0.6 0-1.2 .5-1.2 1.1c0 .7 .6 1.2 1.2 1.2h12.9c.7 0 1-0.5 1-1.1c0-0.7-0.3-1.2-1-1.2Z"
+                              fill="#2d323b"/>
+                        <path d="M16 46.5c0 4.1 1.3 7.1 3.1 9.7c1.8 2.5 4.1 4.4 6.3 6.2c2.1 1.8 4 3.6 5.4 5.5c1.4 1.9 2.2 4 2.2 7.1h4.7c0-4-1.3-7.1-3.1-9.6c-1.8-2.5-4.1-4.4-6.2-6.2c-2.2-1.8-4.1-3.4-5.5-5.3c-1.3-1.9-2.2-4.3-2.2-7.4Z"
+                              fill="#00a8d6"/>
+                    </g>
+                </g>
+            </g>
+        </symbol>
+    </defs>
+    <rect width="1007" height="197" stroke="#0f1116" fill="#0f1116" stroke-width="0"/>
+    <path fill="#fff"
+          d="M83.3 106.1v-65.7h17c4.2 0 7.9 .8 11 2.4c3.1 1.6 5.5 3.9 7.2 6.9c1.7 2.9 2.6 6.4 2.6 10.4v26.2c0 4-0.9 7.5-2.6 10.5c-1.7 3-4.1 5.3-7.2 6.9c-3.1 1.6-6.8 2.4-11 2.4Zm8.1-7.2h8.9c4 0 7.1-1.1 9.3-3.3c2.3-2.3 3.4-5.3 3.4-9.3v-26.2c0-3.9-1.1-7-3.4-9.2c-2.2-2.2-5.3-3.3-9.3-3.3h-8.9Zm45.3 7.2v-7.4h17.5v-34.7h-15.7v-7.4h23.8v42.1h16.7v7.4Zm20.7-58.4c-2 0-3.6-0.5-4.7-1.5c-1.2-1.1-1.7-2.4-1.7-4.2c0-1.8 .5-3.2 1.7-4.3c1.1-1 2.7-1.5 4.7-1.5c1.9 0 3.5 .5 4.6 1.5c1.2 1.1 1.7 2.5 1.7 4.3c0 1.8-0.5 3.1-1.7 4.2c-1.1 1-2.7 1.5-4.6 1.5Zm52.6 59.1c-6 0-10.7-1.7-14.2-5.1c-3.4-3.4-5.1-8-5.1-13.8v-13.1c0-5.9 1.7-10.5 5.1-13.9c3.5-3.3 8.2-5 14.2-5c6 0 10.7 1.7 14.2 5c3.4 3.4 5.2 8 5.2 13.8v13.2c0 5.8-1.8 10.4-5.2 13.8c-3.5 3.4-8.2 5.1-14.2 5.1Zm0-7.2c3.5 0 6.3-1 8.3-3c2-1.9 3-4.8 3-8.7v-13.1c0-3.9-1-6.8-3-8.8c-2-1.9-4.8-2.9-8.3-2.9c-3.5 0-6.2 1-8.2 2.9c-2 2-3 4.9-3 8.8v13.1c0 3.9 1 6.8 3 8.7c2 2 4.7 3 8.2 3Zm31.5 6.5l17.6-25.5l-16.5-24h9.5l9.8 15.3c.5 .7 .9 1.4 1.2 2.2c.4 .7 .8 1.4 1 1.8c.2-0.4 .5-1.1 .8-1.8c.4-0.8 .8-1.5 1.3-2.2l9.9-15.3h9.4l-16.5 24.1l17.5 25.4h-9.5l-10.7-16.2c-0.4-0.7-0.8-1.4-1.2-2.3c-0.4-0.9-0.7-1.6-1-2.1c-0.2 .5-0.6 1.2-1 2.1c-0.5 .9-1 1.6-1.4 2.3l-10.7 16.2Zm76.4 .9c-5.7 0-10.2-1.7-13.7-5.1c-3.4-3.4-5.1-8-5.1-13.8v-31.5h8.1v31.5c0 3.7 1 6.6 2.9 8.7c1.9 2.1 4.5 3.1 7.8 3.1c3.4 0 6-1 8-3.1c1.9-2.1 2.9-5 2.9-8.7v-31.5h8.1v31.5c0 5.8-1.7 10.4-5.2 13.8c-3.5 3.4-8.1 5.1-13.8 5.1Zm52.6-0.2c-5.1 0-9.3-1.2-12.5-3.5c-3.3-2.3-4.9-5.5-4.9-9.6h8.3c0 1.8 .9 3.3 2.6 4.3c1.8 1.1 4 1.6 6.6 1.6h3.8c3.2 0 5.6-0.6 7.1-1.9c1.6-1.3 2.4-3 2.4-5.2c0-2.1-0.8-3.8-2.2-5c-1.5-1.2-3.6-2-6.4-2.5l-6.6-1c-5-0.9-8.6-2.4-10.9-4.7c-2.4-2.3-3.5-5.5-3.5-9.5c0-4.5 1.4-7.9 4.3-10.3c2.9-2.4 7.1-3.6 12.6-3.6h3.4c5 0 9.1 1.1 12.1 3.4c3 2.2 4.6 5.2 4.6 8.9h-8.3c0-1.6-0.8-2.8-2.3-3.7c-1.5-1-3.6-1.4-6.3-1.4h-3.4c-2.8 0-5 .6-6.5 1.7c-1.5 1.2-2.3 2.9-2.3 5c0 3.6 2.5 5.8 7.6 6.7l6.7 1.1c5.3 .8 9.2 2.4 11.7 4.6c2.4 2.3 3.6 5.6 3.6 9.9c0 4.6-1.5 8.2-4.4 10.8c-2.9 2.6-7.3 3.9-13.2 3.9Z"/>
+    <path fill="#fff"
+          d="M91 164c-2 0-3.6-0.6-4.7-1.7c-1.1-1.1-1.6-2.7-1.6-4.6v-15.9h2.7v15.9c0 1.2 .3 2.2 .9 2.8c.6 .7 1.5 1.1 2.7 1.1c1.2 0 2.1-0.4 2.7-1.1c.6-0.7 .9-1.6 .9-2.8v-15.9h2.7v15.9c0 2-0.5 3.5-1.6 4.6c-1.1 1.1-2.6 1.7-4.7 1.7Zm17.5-0.1c-1.7 0-3.1-0.3-4.2-1.1c-1.1-0.8-1.6-1.9-1.6-3.2h2.8c0 .6 .3 1.1 .8 1.4c.6 .4 1.4 .5 2.2 .5h1.3c1.1 0 1.9-0.2 2.4-0.6c.5-0.4 .8-1 .8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.2-0.7-2.1-0.8l-2.2-0.4c-1.7-0.3-2.9-0.8-3.6-1.5c-0.8-0.8-1.2-1.9-1.2-3.2c0-1.5 .5-2.6 1.4-3.4c1-0.8 2.4-1.2 4.2-1.2h1.2c1.6 0 3 .3 4 1.1c1 .7 1.5 1.7 1.5 3h-2.7c0-0.6-0.3-1-0.8-1.3c-0.5-0.3-1.2-0.4-2.1-0.4h-1.1c-1 0-1.7 .2-2.2 .5c-0.5 .4-0.8 1-0.8 1.7c0 1.2 .9 1.9 2.6 2.2l2.2 .4c1.8 .3 3.1 .8 3.9 1.5c.8 .8 1.2 1.9 1.2 3.3c0 1.6-0.5 2.8-1.5 3.6c-0.9 .9-2.4 1.3-4.4 1.3Zm18.5 .1c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3l-0.1 2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.2c.1-1.1 .6-2 1.4-2.6c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm35.8 0v-2.5h4.5v-16.9h-4.5v-2.5h11.8l-0.1 2.5h-4.4v16.9h4.4v2.5Zm17.7 0v-16.5h2.7v3.2c.1-1.1 .6-2 1.3-2.6c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 3 .5 3.9 1.5c1 1.1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm26 0c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.1v-9.7h-4.7v-2.5h4.7v-4.7h2.7v4.7h6.6v2.5h-6.6v9.7c0 .5 .2 1 .5 1.3c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm16.2 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.7-2-0.7-3.3v-4.5c0-1.3 .2-2.4 .7-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3l-0.1 2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.2c.1-1.1 .6-2 1.4-2.6c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm21.3 0v-12.4h-4.8v-2.4h4.8v-2.9c0-1.3 .4-2.3 1.2-3.1c.9-0.7 2-1.1 3.4-1.1h4.9v2.5h-4.9c-1.3 0-1.9 .5-1.9 1.7v2.9h6.8v2.4h-6.8v12.4Zm19 .3c-1.8 0-3.1-0.4-4.1-1.3c-1-0.9-1.5-2.1-1.5-3.6c0-1.6 .5-2.8 1.5-3.7c1-0.9 2.3-1.3 4-1.3h5.1v-1.6c0-1-0.3-1.8-0.9-2.4c-0.6-0.5-1.5-0.8-2.5-0.8c-1 0-1.8 .2-2.5 .6c-0.6 .4-1 1-1.2 1.7h-2.7c.1-1 .4-1.8 1-2.5c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.2-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 1 1.6 2.3 1.6 4v11.3h-2.6v-3.1h-0.1c-0.1 1-0.6 1.9-1.5 2.5c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.4-0.3 3.2-1c.8-0.6 1.2-1.4 1.2-2.4v-2.4h-5c-0.9 0-1.6 .3-2.2 .8c-0.5 .5-0.7 1.1-0.7 2c0 .9 .3 1.6 .9 2.2c.6 .5 1.5 .8 2.6 .8Zm18.9 2.1c-2 0-3.6-0.6-4.8-1.7c-1.2-1.1-1.7-2.6-1.7-4.6v-4.5c0-2 .5-3.5 1.7-4.6c1.2-1.1 2.8-1.7 4.8-1.7c1.9 0 3.5 .5 4.6 1.5c1.2 1 1.8 2.4 1.8 4.2h-2.7c0-1.1-0.4-1.9-1-2.4c-0.7-0.6-1.6-0.9-2.7-0.9c-1.2 0-2.1 .3-2.8 1c-0.7 .7-1.1 1.6-1.1 2.9l.1 4.5c-0.1 1.2 .3 2.2 1 2.9c.7 .7 1.6 1 2.8 1c1.1 0 2-0.3 2.7-0.9c.6-0.6 1-1.4 1-2.4h2.7c0 1.8-0.6 3.2-1.8 4.2c-1.1 1-2.7 1.5-4.6 1.5Zm17.9 0c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.7-2-0.7-3.3v-4.5c0-1.3 .2-2.4 .7-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3v2.9h-10.3v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1.1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm21.3 9.8c-1.7 0-3.1-0.3-4.2-1.1c-1.1-0.8-1.6-1.9-1.6-3.2h2.8c0 .6 .3 1.1 .8 1.4c.6 .4 1.4 .5 2.3 .5h1.2c1.1 0 1.9-0.2 2.4-0.6c.5-0.4 .8-1 .8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.2-0.7-2.1-0.8l-2.2-0.4c-1.6-0.3-2.9-0.8-3.6-1.5c-0.8-0.8-1.2-1.9-1.2-3.2c0-1.5 .5-2.6 1.4-3.4c1-0.8 2.4-1.2 4.2-1.2h1.2c1.7 0 3 .3 4 1.1c1 .7 1.5 1.7 1.5 3h-2.7c0-0.6-0.3-1-0.8-1.3c-0.5-0.3-1.2-0.4-2.1-0.4h-1.1c-1 0-1.7 .2-2.2 .5c-0.5 .4-0.8 1-0.8 1.7c0 1.2 .9 1.9 2.6 2.2l2.2 .4c1.8 .3 3.1 .8 3.9 1.5c.8 .8 1.2 1.9 1.2 3.3c0 1.6-0.5 2.8-1.5 3.6c-0.9 .9-2.4 1.3-4.3 1.3Zm38.3-0.2c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.2v-9.6h-4.6v-2.5h4.6v-4.7h2.7v4.7h6.6v2.5h-6.6v9.6c0 .6 .2 1.1 .5 1.4c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm10 0v-21.9h2.7v8.6c.1-1.2 .6-2 1.3-2.6c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 3 .5 3.9 1.5c1 1.1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.7-1.5-1-2.6-1c-1.1 0-2 .3-2.7 1c-0.6 .7-0.9 1.7-0.9 3v10.5Zm22.8 .3c-1.8 0-3.1-0.4-4.1-1.3c-1-0.9-1.5-2.1-1.5-3.7c0-1.5 .5-2.7 1.5-3.6c1-0.9 2.3-1.3 4-1.3h5.1v-1.7c0-1-0.3-1.7-0.9-2.3c-0.6-0.6-1.5-0.8-2.5-0.8c-1 0-1.8 .2-2.5 .6c-0.6 .4-1 1-1.2 1.7h-2.7c.1-1 .4-1.8 1-2.5c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.2-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 1 1.6 2.3 1.6 4v11.3h-2.6v-3.2h-0.1c-0.1 1.1-0.6 1.9-1.5 2.6c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.4-0.4 3.2-1c.8-0.6 1.2-1.5 1.2-2.5v-2.3h-5c-0.9 0-1.6 .3-2.2 .8c-0.5 .5-0.7 1.1-0.7 2c0 .9 .3 1.6 .9 2.2c.6 .5 1.5 .8 2.6 .8Zm20.6 1.8c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.2v-9.6h-4.6v-2.5h4.6v-4.7h2.7v4.7h6.6v2.5h-6.6v9.6c0 .6 .2 1.1 .5 1.4c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm28.5 0v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.4-2.5c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm23.7 .3c-1.9 0-3.4-0.6-4.6-1.7c-1.1-1.1-1.7-2.7-1.7-4.6v-10.5h2.7v10.5c0 1.2 .3 2.2 1 2.9c.6 .7 1.5 1 2.6 1c1.1 0 2-0.3 2.6-1c.7-0.7 1-1.7 1-2.9v-10.5h2.7v10.5c0 1.9-0.6 3.5-1.7 4.6c-1.2 1.1-2.7 1.7-4.6 1.7Zm11.8-0.3v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm40.8 .3c-1.8 0-3.2-0.4-4.2-1.3c-1-0.9-1.5-2.1-1.5-3.7c0-1.5 .5-2.7 1.5-3.6c1-0.9 2.4-1.3 4.1-1.3h5.1v-1.7c0-1-0.3-1.7-0.9-2.3c-0.6-0.6-1.5-0.8-2.6-0.8c-0.9 0-1.7 .2-2.4 .6c-0.6 .4-1.1 1-1.2 1.6h-2.7c.1-0.9 .4-1.7 1-2.4c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.1-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 .9 1.7 2.3 1.7 4v11.3h-2.6v-3.2h-0.1c-0.1 1.1-0.6 1.9-1.5 2.6c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.3-0.4 3.2-1c.8-0.6 1.2-1.5 1.2-2.5v-2.3h-5c-0.9 0-1.7 .3-2.2 .8c-0.5 .5-0.8 1.1-0.8 2c0 .9 .4 1.6 1 2.2c.6 .5 1.5 .8 2.6 .8Zm12.6 1.8v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm20.6 5.4l2.4-6.4l-6.3-15.5h2.9l4.1 10.2c.1 .3 .2 .7 .4 1.2c.1 .5 .2 .9 .3 1.2c.1-0.3 .2-0.7 .3-1.2c.1-0.5 .3-0.9 .4-1.2l3.8-10.2h2.8l-8.3 21.9Zm16.3-5.4l-2.7-16.5h2.4l1.6 11.7c.1 .4 .2 .9 .2 1.4c.1 .5 .1 1 .1 1.3h.2c0-0.3 0-0.8 .1-1.3c.1-0.5 .1-1 .2-1.4l1.8-11.7h2.7l1.9 11.7c.1 .4 .1 .9 .2 1.4c.1 .5 .1 1 .1 1.3h.2c0-0.3 .1-0.8 .1-1.3c.1-0.5 .2-1 .2-1.4l1.7-11.7h2.2l-2.7 16.5h-3l-1.8-11.4c0-0.6-0.1-1.1-0.2-1.7c-0.1-0.5-0.1-1-0.2-1.3h-0.1c0 .3-0.1 .8-0.1 1.3c-0.1 .6-0.2 1.1-0.3 1.7l-1.8 11.4Zm17.1 0v-21.9h2.7v8.5c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.7-1.5-1-2.6-1c-1.1 0-2 .3-2.7 1c-0.6 .7-0.9 1.7-0.9 3v10.5Zm24.2 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .7 2 .7 3.3v2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1.1-2.8-1.1c-1.2 0-2.2 .4-2.8 1.1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm23.7 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .7 2 .7 3.3v2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1.1-2.8-1.1c-1.2 0-2.2 .4-2.8 1.1c-0.7 .7-1 1.7-1 3Z"/>
+    <g transform="translate(764,-14.5) scale(.431111,.440249) translate(-13.9,56.6)">
+        <path fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round"
+              d="M-50.7 4h278.2c10 0 9 0 9 0l41 40c0 0 1 0-9 0h-358c-9.9 0-9 0-9 0l38.8-40c0 0-0.9 0 9 0Z"
+              stroke-width="10" transform="translate(225,339.9) scale(0,1) translate(-89.5,-24)"
+              style="animation: 10s linear infinite both a0_t;"/>
+        <rect width="83" height="22" stroke="#fb422d" fill="#e0e0e0" rx="2" stroke-width="0"
+              transform="translate(225,348.9) scale(0,1) translate(-41.5,-11)"
+              style="animation: 10s linear infinite both a1_t;"/>
+        <g style="animation: 10s linear infinite both a3_t;">
+            <rect width="400" height="334" stroke="#e0e0e0" fill="none" stroke-width="30" stroke-miterlimit="1" rx="10"
+                  opacity="0" transform="translate(225,198.9) rotate(-90) translate(-200,-167)"
+                  style="animation: 10s linear infinite both a2_t, 10s linear infinite both a2_o, 10s linear infinite both a2_sw, 10s linear infinite both a2_w, 10s linear infinite both a2_h;"/>
+        </g>
+        <use width="168.5" height="302" xlink:href="#Symbol-2" opacity="0"
+             transform="translate(227.8,199.9) translate(-84.2,-151)"
+             style="animation: 10s linear infinite both a4_t, 10s linear infinite both a4_w, 10s linear infinite both a4_h;"/>
+        <rect width="16" height="8" stroke="#fb422d" fill="#e0e0e0" stroke-width="0" rx="2" opacity="0"
+              transform="translate(225,328.9) translate(-8,-4)"
+              style="animation: 10s linear infinite both a5_t, 10s linear infinite both a5_o, 10s linear infinite both a5_w;"/>
+        <rect width="16" height="8" stroke="#fb422d" fill="#e0e0e0" stroke-width="0" rx="2" opacity="0"
+              transform="translate(225,328.9) translate(-8,-4)"
+              style="animation: 10s linear infinite both a6_t, 10s linear infinite both a6_o, 10s linear infinite both a6_w;"/>
+        <g transform="translate(225,198.9) scale(1.5,1.5) translate(-42.3,-93)"
+           style="animation: 10s linear infinite both a7_t;">
+            <g transform="translate(42.3,93) scale(5.352,6.9) translate(-16,60)">
+                <g transform="translate(-34.9,-125.8)">
+                    <g transform="translate(24,5)">
+                        <path d="M33 46.5c0 3.1-0.8 5.5-2.2 7.4c-1.4 1.9-3.3 3.6-5.4 5.4c-2.2 1.7-4.5 3.6-6.3 6.2c-1.8 2.5-3.1 5.5-3.1 9.5h4.7c0-3.1 .9-5.4 2.2-7.3c1.4-1.9 3.3-3.5 5.5-5.3c2.1-1.8 4.4-3.7 6.2-6.2c1.8-2.6 3.1-5.6 3.1-9.7Z"
+                              fill="#e96020"/>
+                        <path d="M20.4 70.7c-0.6 0-1 .5-1 1.1c0 .7 .4 1.2 1 1.2h12.9c.7 0 1.2-0.5 1.2-1.2c0-0.6-0.5-1.1-1.2-1.1Z"
+                              fill="#2d323b"/>
+                        <path d="M21.8 66.6c-0.7 0-1 .6-1 1.2c0 .6 .3 1 .9 1h10.3c.6 0 1.1-0.5 1.1-1.1c0-0.6-0.5-1.1-1.1-1.1Z"
+                              fill="#2d323b"/>
+                        <path d="M21.8 53c-0.7 0-1.2 .5-1.1 1.1c0 .6 .4 1.1 1.1 1.1h10.2c.6 0 .9-0.6 .9-1.2c0-0.6-0.3-1-0.9-1Z"
+                              fill="#2d323b"/>
+                        <path d="M20.4 48.8c-0.6 0-1.2 .5-1.2 1.1c0 .7 .6 1.2 1.2 1.2h12.9c.7 0 1-0.5 1-1.1c0-0.7-0.3-1.2-1-1.2Z"
+                              fill="#2d323b"/>
+                        <path d="M16 46.5c0 4.1 1.3 7.1 3.1 9.7c1.8 2.5 4.1 4.4 6.3 6.2c2.1 1.8 4 3.6 5.4 5.5c1.4 1.9 2.2 4 2.2 7.1h4.7c0-4-1.3-7.1-3.1-9.6c-1.8-2.5-4.1-4.4-6.2-6.2c-2.2-1.8-4.1-3.4-5.5-5.3c-1.3-1.9-2.2-4.3-2.2-7.4Z"
+                              fill="#00a8d6"/>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/assets/main.css b/assets/main.css
new file mode 100644
index 0000000..affbeb0
--- /dev/null
+++ b/assets/main.css
@@ -0,0 +1,40 @@
+body {
+    background-color: #111216;
+}
+
+#main {
+    margin: 0;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif
+}
+
+#links {
+    width: 400px;
+    text-align: left;
+    font-size: x-large;
+    color: white;
+    display: flex;
+    flex-direction: column;
+}
+
+#links a {
+    color: white;
+    text-decoration: none;
+    margin-top: 20px;
+    margin: 10px;
+    border: white 1px solid;
+    border-radius: 5px;
+    padding: 10px;
+}
+
+#links a:hover {
+    background-color: #1f1f1f;
+    cursor: pointer;
+}
+
+#header {
+    max-width: 1200px;
+}
diff --git a/input.css b/input.css
new file mode 100644
index 0000000..bd6213e
--- /dev/null
+++ b/input.css
@@ -0,0 +1,3 @@
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
\ No newline at end of file
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..8db1d9a
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,52 @@
+#![allow(non_snake_case)]
+
+use dioxus::prelude::*;
+use dioxus_logger::tracing::{info, Level};
+
+#[derive(Clone, Routable, Debug, PartialEq)]
+enum Route {
+    #[route("/")]
+    Home {},
+    #[route("/blog/:id")]
+    Blog { id: i32 },
+}
+
+fn main() {
+    // Init logger
+    dioxus_logger::init(Level::INFO).expect("failed to init logger");
+    info!("starting app");
+    launch(App);
+}
+
+fn App() -> Element {
+    rsx! {
+        Router::<Route> {}
+    }
+}
+
+#[component]
+fn Blog(id: i32) -> Element {
+    rsx! {
+        Link { to: Route::Home {}, "Go to counter" }
+        "Blog post {id}"
+    }
+}
+
+#[component]
+fn Home() -> Element {
+    let mut count = use_signal(|| 0);
+
+    rsx! {
+        Link {
+            to: Route::Blog {
+                id: count()
+            },
+            "Go to blog"
+        }
+        div {
+            h1 { "High-Five counter: {count}" }
+            button { onclick: move |_| count += 1, "Up high!" }
+            button { onclick: move |_| count -= 1, "Down low!" }
+        }
+    }
+}
diff --git a/tailwind.config.js b/tailwind.config.js
new file mode 100644
index 0000000..cd8d865
--- /dev/null
+++ b/tailwind.config.js
@@ -0,0 +1,9 @@
+/** @type {import('tailwindcss').Config} */
+module.exports = {
+    mode: "all",
+    content: ["./src/**/*.{rs,html,css}", "./dist/**/*.html"],
+    theme: {
+        extend: {},
+    },
+    plugins: [],
+};

From 7da655eafc94d9253c3c0d22021653767b50a394 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 16:13:36 +0200
Subject: [PATCH 02/50] style: Cargo.lock formatting

---
 Cargo.lock | 1088 ++++++++++++++++++++++++++--------------------------
 1 file changed, 544 insertions(+), 544 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 82fc1ea..f7eead0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -8,10 +8,10 @@ version = "0.8.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
 dependencies = [
-    "cfg-if",
-    "once_cell",
-    "version_check",
-    "zerocopy",
+ "cfg-if",
+ "once_cell",
+ "version_check",
+ "zerocopy",
 ]
 
 [[package]]
@@ -32,10 +32,10 @@ version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
 dependencies = [
-    "concurrent-queue",
-    "event-listener-strategy",
-    "futures-core",
-    "pin-project-lite",
+ "concurrent-queue",
+ "event-listener-strategy",
+ "futures-core",
+ "pin-project-lite",
 ]
 
 [[package]]
@@ -50,9 +50,9 @@ version = "0.1.81"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -79,7 +79,7 @@ version = "1.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
 dependencies = [
-    "serde",
+ "serde",
 ]
 
 [[package]]
@@ -88,7 +88,7 @@ version = "2.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
 dependencies = [
-    "serde",
+ "serde",
 ]
 
 [[package]]
@@ -97,11 +97,11 @@ version = "1.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
 dependencies = [
-    "async-channel",
-    "async-task",
-    "futures-io",
-    "futures-lite",
-    "piper",
+ "async-channel",
+ "async-task",
+ "futures-io",
+ "futures-lite",
+ "piper",
 ]
 
 [[package]]
@@ -122,7 +122,7 @@ version = "1.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239"
 dependencies = [
-    "serde",
+ "serde",
 ]
 
 [[package]]
@@ -131,7 +131,7 @@ version = "0.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc"
 dependencies = [
-    "serde",
+ "serde",
 ]
 
 [[package]]
@@ -140,12 +140,12 @@ version = "0.18.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
 dependencies = [
-    "camino",
-    "cargo-platform",
-    "semver",
-    "serde",
-    "serde_json",
-    "thiserror",
+ "camino",
+ "cargo-platform",
+ "semver",
+ "serde",
+ "serde_json",
+ "thiserror",
 ]
 
 [[package]]
@@ -154,7 +154,7 @@ version = "0.15.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
 dependencies = [
-    "smallvec",
+ "smallvec",
 ]
 
 [[package]]
@@ -169,9 +169,9 @@ version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e"
 dependencies = [
-    "ciborium-io",
-    "ciborium-ll",
-    "serde",
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
 ]
 
 [[package]]
@@ -186,8 +186,8 @@ version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9"
 dependencies = [
-    "ciborium-io",
-    "half",
+ "ciborium-io",
+ "half",
 ]
 
 [[package]]
@@ -196,7 +196,7 @@ version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
 dependencies = [
-    "crossbeam-utils",
+ "crossbeam-utils",
 ]
 
 [[package]]
@@ -205,8 +205,8 @@ version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
 dependencies = [
-    "cfg-if",
-    "wasm-bindgen",
+ "cfg-if",
+ "wasm-bindgen",
 ]
 
 [[package]]
@@ -215,7 +215,7 @@ version = "0.2.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673"
 dependencies = [
-    "const_format_proc_macros",
+ "const_format_proc_macros",
 ]
 
 [[package]]
@@ -224,9 +224,9 @@ version = "0.2.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "unicode-xid",
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
 ]
 
 [[package]]
@@ -241,7 +241,7 @@ version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
 dependencies = [
-    "unicode-segmentation",
+ "unicode-segmentation",
 ]
 
 [[package]]
@@ -262,8 +262,8 @@ version = "0.20.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
 dependencies = [
-    "darling_core",
-    "darling_macro",
+ "darling_core",
+ "darling_macro",
 ]
 
 [[package]]
@@ -272,11 +272,11 @@ version = "0.20.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
 dependencies = [
-    "fnv",
-    "ident_case",
-    "proc-macro2",
-    "quote",
-    "syn",
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -285,9 +285,9 @@ version = "0.20.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
 dependencies = [
-    "darling_core",
-    "quote",
-    "syn",
+ "darling_core",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -296,11 +296,11 @@ version = "5.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
 dependencies = [
-    "cfg-if",
-    "hashbrown",
-    "lock_api",
-    "once_cell",
-    "parking_lot_core",
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
 ]
 
 [[package]]
@@ -309,16 +309,16 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b8e7fe217b50d43b27528b0f24c89b411f742a3e7564d1cfbf85253f967954db"
 dependencies = [
-    "dioxus-config-macro",
-    "dioxus-core",
-    "dioxus-core-macro",
-    "dioxus-fullstack",
-    "dioxus-hooks",
-    "dioxus-hot-reload",
-    "dioxus-html",
-    "dioxus-router",
-    "dioxus-signals",
-    "dioxus-web",
+ "dioxus-config-macro",
+ "dioxus-core",
+ "dioxus-core-macro",
+ "dioxus-fullstack",
+ "dioxus-hooks",
+ "dioxus-hot-reload",
+ "dioxus-html",
+ "dioxus-router",
+ "dioxus-signals",
+ "dioxus-web",
 ]
 
 [[package]]
@@ -327,10 +327,10 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c7dffc452ed91af6ef772b0d9a5899573f6785314e97c533733ec55413c01df3"
 dependencies = [
-    "once_cell",
-    "serde",
-    "serde_json",
-    "tracing",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "tracing",
 ]
 
 [[package]]
@@ -339,8 +339,8 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cb1a1aa34cc04c1f7fcbb7a10791ba773cc02d834fe3ec1fe05647699f3b101f"
 dependencies = [
-    "proc-macro2",
-    "quote",
+ "proc-macro2",
+ "quote",
 ]
 
 [[package]]
@@ -349,16 +349,16 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3730d2459ab66951cedf10b09eb84141a6eda7f403c28057cbe010495be156b7"
 dependencies = [
-    "futures-channel",
-    "futures-util",
-    "generational-box",
-    "longest-increasing-subsequence",
-    "rustc-hash",
-    "serde",
-    "slab",
-    "slotmap",
-    "tracing",
-    "tracing-subscriber",
+ "futures-channel",
+ "futures-util",
+ "generational-box",
+ "longest-increasing-subsequence",
+ "rustc-hash",
+ "serde",
+ "slab",
+ "slotmap",
+ "tracing",
+ "tracing-subscriber",
 ]
 
 [[package]]
@@ -367,13 +367,13 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0d9c0dfe0e6a46626fa716c4aa1d2ccb273441337909cfeacad5bb6fcfb947d2"
 dependencies = [
-    "constcat",
-    "convert_case",
-    "dioxus-rsx",
-    "prettyplease",
-    "proc-macro2",
-    "quote",
-    "syn",
+ "constcat",
+ "convert_case",
+ "dioxus-rsx",
+ "prettyplease",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -388,21 +388,21 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b80f0ac18166302341164e681322e0385131c08a11c3cc1c51ee8df799ab0d3d"
 dependencies = [
-    "async-trait",
-    "base64",
-    "bytes",
-    "ciborium",
-    "dioxus-hot-reload",
-    "dioxus-lib",
-    "dioxus-web",
-    "dioxus_server_macro",
-    "futures-util",
-    "once_cell",
-    "serde",
-    "serde_json",
-    "server_fn",
-    "tracing",
-    "web-sys",
+ "async-trait",
+ "base64",
+ "bytes",
+ "ciborium",
+ "dioxus-hot-reload",
+ "dioxus-lib",
+ "dioxus-web",
+ "dioxus_server_macro",
+ "futures-util",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "server_fn",
+ "tracing",
+ "web-sys",
 ]
 
 [[package]]
@@ -411,15 +411,15 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fa8f9c661eea82295219d25555d5c0b597e74186b029038ceb5e3700ccbd4380"
 dependencies = [
-    "dioxus-core",
-    "dioxus-debug-cell",
-    "dioxus-signals",
-    "futures-channel",
-    "futures-util",
-    "generational-box",
-    "slab",
-    "thiserror",
-    "tracing",
+ "dioxus-core",
+ "dioxus-debug-cell",
+ "dioxus-signals",
+ "futures-channel",
+ "futures-util",
+ "generational-box",
+ "slab",
+ "thiserror",
+ "tracing",
 ]
 
 [[package]]
@@ -428,12 +428,12 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "77d01246cb1b93437fb0bbd0dd11cfc66342d86b4311819e76654f2017ce1473"
 dependencies = [
-    "dioxus-core",
-    "dioxus-html",
-    "dioxus-rsx",
-    "interprocess-docfix",
-    "serde",
-    "serde_json",
+ "dioxus-core",
+ "dioxus-html",
+ "dioxus-rsx",
+ "interprocess-docfix",
+ "serde",
+ "serde_json",
 ]
 
 [[package]]
@@ -442,21 +442,21 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f01a0826f179adad6ea8d6586746e8edde0c602cc86f4eb8e5df7a3b204c4018"
 dependencies = [
-    "async-trait",
-    "dioxus-core",
-    "dioxus-html-internal-macro",
-    "enumset",
-    "euclid",
-    "futures-channel",
-    "generational-box",
-    "keyboard-types",
-    "serde",
-    "serde-value",
-    "serde_json",
-    "serde_repr",
-    "tracing",
-    "wasm-bindgen",
-    "web-sys",
+ "async-trait",
+ "dioxus-core",
+ "dioxus-html-internal-macro",
+ "enumset",
+ "euclid",
+ "futures-channel",
+ "generational-box",
+ "keyboard-types",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "serde_repr",
+ "tracing",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -465,10 +465,10 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0b96f35a608d0ab8f4ca6f66ce1828354e4ebd41580b12454f490221a11da93c"
 dependencies = [
-    "convert_case",
-    "proc-macro2",
-    "quote",
-    "syn",
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -477,13 +477,13 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "351fad098c657d14f3ac2900362d2b86e83c22c4c620a404839e1ab628f3395b"
 dependencies = [
-    "js-sys",
-    "md5",
-    "sledgehammer_bindgen",
-    "sledgehammer_utils",
-    "wasm-bindgen",
-    "wasm-bindgen-futures",
-    "web-sys",
+ "js-sys",
+ "md5",
+ "sledgehammer_bindgen",
+ "sledgehammer_utils",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
 ]
 
 [[package]]
@@ -492,12 +492,12 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8bd39b2c41dd1915dcb91d914ea72d8b646f1f8995aaeff82816b862ec586ecd"
 dependencies = [
-    "dioxus-core",
-    "dioxus-core-macro",
-    "dioxus-hooks",
-    "dioxus-html",
-    "dioxus-rsx",
-    "dioxus-signals",
+ "dioxus-core",
+ "dioxus-core-macro",
+ "dioxus-hooks",
+ "dioxus-html",
+ "dioxus-rsx",
+ "dioxus-signals",
 ]
 
 [[package]]
@@ -506,10 +506,10 @@ version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "81fe09dc9773dc1f1bb0d38529203d6555d08f67aadca5cf955ac3d1a9e69880"
 dependencies = [
-    "console_error_panic_hook",
-    "tracing",
-    "tracing-subscriber",
-    "tracing-wasm",
+ "console_error_panic_hook",
+ "tracing",
+ "tracing-subscriber",
+ "tracing-wasm",
 ]
 
 [[package]]
@@ -518,17 +518,17 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c235c5dbeb528c0c2b0424763da812e7500df69b82eddac54db6f4975e065c5f"
 dependencies = [
-    "dioxus-cli-config",
-    "dioxus-lib",
-    "dioxus-router-macro",
-    "gloo",
-    "gloo-utils 0.1.7",
-    "js-sys",
-    "tracing",
-    "url",
-    "urlencoding",
-    "wasm-bindgen",
-    "web-sys",
+ "dioxus-cli-config",
+ "dioxus-lib",
+ "dioxus-router-macro",
+ "gloo",
+ "gloo-utils 0.1.7",
+ "js-sys",
+ "tracing",
+ "url",
+ "urlencoding",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -537,10 +537,10 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2e7cd1c5137ba361f2150cdea6b3bc9ddda7b1af84b22c9ee6b5499bf43e1381"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "slab",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "slab",
+ "syn",
 ]
 
 [[package]]
@@ -549,13 +549,13 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "15c400bc8a779107d8f3a67b14375db07dbd2bc31163bf085a8e9097f36f7179"
 dependencies = [
-    "dioxus-core",
-    "internment",
-    "krates",
-    "proc-macro2",
-    "quote",
-    "syn",
-    "tracing",
+ "dioxus-core",
+ "internment",
+ "krates",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "tracing",
 ]
 
 [[package]]
@@ -564,14 +564,14 @@ version = "0.5.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7e3e224cd3d3713f159f0199fc088c292a0f4adb94996b48120157f6a8f8342d"
 dependencies = [
-    "dioxus-core",
-    "futures-channel",
-    "futures-util",
-    "generational-box",
-    "once_cell",
-    "parking_lot",
-    "rustc-hash",
-    "tracing",
+ "dioxus-core",
+ "futures-channel",
+ "futures-util",
+ "generational-box",
+ "once_cell",
+ "parking_lot",
+ "rustc-hash",
+ "tracing",
 ]
 
 [[package]]
@@ -580,23 +580,23 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e0855ac81fcc9252a0863930a7a7cbb2504fc1b6efe893489c8d0e23aaeb2cb9"
 dependencies = [
-    "async-trait",
-    "console_error_panic_hook",
-    "dioxus-core",
-    "dioxus-html",
-    "dioxus-interpreter-js",
-    "futures-channel",
-    "futures-util",
-    "generational-box",
-    "js-sys",
-    "rustc-hash",
-    "serde",
-    "serde-wasm-bindgen",
-    "serde_json",
-    "tracing",
-    "wasm-bindgen",
-    "wasm-bindgen-futures",
-    "web-sys",
+ "async-trait",
+ "console_error_panic_hook",
+ "dioxus-core",
+ "dioxus-html",
+ "dioxus-interpreter-js",
+ "futures-channel",
+ "futures-util",
+ "generational-box",
+ "js-sys",
+ "rustc-hash",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
+ "tracing",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
 ]
 
 [[package]]
@@ -605,11 +605,11 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b5ef2cad17001c1155f019cb69adbacd620644566d78a77d0778807bb106a337"
 dependencies = [
-    "convert_case",
-    "proc-macro2",
-    "quote",
-    "server_fn_macro",
-    "syn",
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "server_fn_macro",
+ "syn",
 ]
 
 [[package]]
@@ -618,7 +618,7 @@ version = "1.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d07a4b049558765cef5f0c1a273c3fc57084d768b44d2f98127aef4cceb17293"
 dependencies = [
-    "enumset_derive",
+ "enumset_derive",
 ]
 
 [[package]]
@@ -627,10 +627,10 @@ version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "59c3b24c345d8c314966bdc1832f6c2635bfcce8e7cf363bd115987bba2ee242"
 dependencies = [
-    "darling",
-    "proc-macro2",
-    "quote",
-    "syn",
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -645,8 +645,8 @@ version = "0.22.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e0f0eb73b934648cd7a4a61f1b15391cd95dab0b4da6e2e66c2a072c144b4a20"
 dependencies = [
-    "num-traits",
-    "serde",
+ "num-traits",
+ "serde",
 ]
 
 [[package]]
@@ -655,9 +655,9 @@ version = "5.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
 dependencies = [
-    "concurrent-queue",
-    "parking",
-    "pin-project-lite",
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
 ]
 
 [[package]]
@@ -666,8 +666,8 @@ version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1"
 dependencies = [
-    "event-listener",
-    "pin-project-lite",
+ "event-listener",
+ "pin-project-lite",
 ]
 
 [[package]]
@@ -694,7 +694,7 @@ version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
 dependencies = [
-    "percent-encoding",
+ "percent-encoding",
 ]
 
 [[package]]
@@ -703,13 +703,13 @@ version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
 dependencies = [
-    "futures-channel",
-    "futures-core",
-    "futures-executor",
-    "futures-io",
-    "futures-sink",
-    "futures-task",
-    "futures-util",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
 ]
 
 [[package]]
@@ -718,8 +718,8 @@ version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
 dependencies = [
-    "futures-core",
-    "futures-sink",
+ "futures-core",
+ "futures-sink",
 ]
 
 [[package]]
@@ -734,9 +734,9 @@ version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
 dependencies = [
-    "futures-core",
-    "futures-task",
-    "futures-util",
+ "futures-core",
+ "futures-task",
+ "futures-util",
 ]
 
 [[package]]
@@ -751,8 +751,8 @@ version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5"
 dependencies = [
-    "futures-core",
-    "pin-project-lite",
+ "futures-core",
+ "pin-project-lite",
 ]
 
 [[package]]
@@ -761,9 +761,9 @@ version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -784,16 +784,16 @@ version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
 dependencies = [
-    "futures-channel",
-    "futures-core",
-    "futures-io",
-    "futures-macro",
-    "futures-sink",
-    "futures-task",
-    "memchr",
-    "pin-project-lite",
-    "pin-utils",
-    "slab",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
 ]
 
 [[package]]
@@ -802,7 +802,7 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "557cf2cbacd0504c6bf8c29f52f8071e0de1d9783346713dc6121d7fa1e5d0e0"
 dependencies = [
-    "parking_lot",
+ "parking_lot",
 ]
 
 [[package]]
@@ -811,17 +811,17 @@ version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "28999cda5ef6916ffd33fb4a7b87e1de633c47c0dc6d97905fee1cdaa142b94d"
 dependencies = [
-    "gloo-console",
-    "gloo-dialogs",
-    "gloo-events",
-    "gloo-file",
-    "gloo-history",
-    "gloo-net 0.3.1",
-    "gloo-render",
-    "gloo-storage",
-    "gloo-timers",
-    "gloo-utils 0.1.7",
-    "gloo-worker",
+ "gloo-console",
+ "gloo-dialogs",
+ "gloo-events",
+ "gloo-file",
+ "gloo-history",
+ "gloo-net 0.3.1",
+ "gloo-render",
+ "gloo-storage",
+ "gloo-timers",
+ "gloo-utils 0.1.7",
+ "gloo-worker",
 ]
 
 [[package]]
@@ -830,11 +830,11 @@ version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "82b7ce3c05debe147233596904981848862b068862e9ec3e34be446077190d3f"
 dependencies = [
-    "gloo-utils 0.1.7",
-    "js-sys",
-    "serde",
-    "wasm-bindgen",
-    "web-sys",
+ "gloo-utils 0.1.7",
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -843,8 +843,8 @@ version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "67062364ac72d27f08445a46cab428188e2e224ec9e37efdba48ae8c289002e6"
 dependencies = [
-    "wasm-bindgen",
-    "web-sys",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -853,8 +853,8 @@ version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "68b107f8abed8105e4182de63845afcc7b69c098b7852a813ea7462a320992fc"
 dependencies = [
-    "wasm-bindgen",
-    "web-sys",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -863,10 +863,10 @@ version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a8d5564e570a38b43d78bdc063374a0c3098c4f0d64005b12f9bbe87e869b6d7"
 dependencies = [
-    "gloo-events",
-    "js-sys",
-    "wasm-bindgen",
-    "web-sys",
+ "gloo-events",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -875,14 +875,14 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "85725d90bf0ed47063b3930ef28e863658a7905989e9929a8708aab74a1d5e7f"
 dependencies = [
-    "gloo-events",
-    "gloo-utils 0.1.7",
-    "serde",
-    "serde-wasm-bindgen",
-    "serde_urlencoded",
-    "thiserror",
-    "wasm-bindgen",
-    "web-sys",
+ "gloo-events",
+ "gloo-utils 0.1.7",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_urlencoded",
+ "thiserror",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -891,19 +891,19 @@ version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a66b4e3c7d9ed8d315fd6b97c8b1f74a7c6ecbbc2320e65ae7ed38b7068cc620"
 dependencies = [
-    "futures-channel",
-    "futures-core",
-    "futures-sink",
-    "gloo-utils 0.1.7",
-    "http 0.2.12",
-    "js-sys",
-    "pin-project",
-    "serde",
-    "serde_json",
-    "thiserror",
-    "wasm-bindgen",
-    "wasm-bindgen-futures",
-    "web-sys",
+ "futures-channel",
+ "futures-core",
+ "futures-sink",
+ "gloo-utils 0.1.7",
+ "http 0.2.12",
+ "js-sys",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
 ]
 
 [[package]]
@@ -912,19 +912,19 @@ version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580"
 dependencies = [
-    "futures-channel",
-    "futures-core",
-    "futures-sink",
-    "gloo-utils 0.2.0",
-    "http 1.1.0",
-    "js-sys",
-    "pin-project",
-    "serde",
-    "serde_json",
-    "thiserror",
-    "wasm-bindgen",
-    "wasm-bindgen-futures",
-    "web-sys",
+ "futures-channel",
+ "futures-core",
+ "futures-sink",
+ "gloo-utils 0.2.0",
+ "http 1.1.0",
+ "js-sys",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
 ]
 
 [[package]]
@@ -933,8 +933,8 @@ version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2fd9306aef67cfd4449823aadcd14e3958e0800aa2183955a309112a84ec7764"
 dependencies = [
-    "wasm-bindgen",
-    "web-sys",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -943,13 +943,13 @@ version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5d6ab60bf5dbfd6f0ed1f7843da31b41010515c745735c970e821945ca91e480"
 dependencies = [
-    "gloo-utils 0.1.7",
-    "js-sys",
-    "serde",
-    "serde_json",
-    "thiserror",
-    "wasm-bindgen",
-    "web-sys",
+ "gloo-utils 0.1.7",
+ "js-sys",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -958,8 +958,8 @@ version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
 dependencies = [
-    "js-sys",
-    "wasm-bindgen",
+ "js-sys",
+ "wasm-bindgen",
 ]
 
 [[package]]
@@ -968,11 +968,11 @@ version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "037fcb07216cb3a30f7292bd0176b050b7b9a052ba830ef7d5d65f6dc64ba58e"
 dependencies = [
-    "js-sys",
-    "serde",
-    "serde_json",
-    "wasm-bindgen",
-    "web-sys",
+ "js-sys",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -981,11 +981,11 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
 dependencies = [
-    "js-sys",
-    "serde",
-    "serde_json",
-    "wasm-bindgen",
-    "web-sys",
+ "js-sys",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -994,15 +994,15 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "13471584da78061a28306d1359dd0178d8d6fc1c7c80e5e35d27260346e0516a"
 dependencies = [
-    "anymap2",
-    "bincode",
-    "gloo-console",
-    "gloo-utils 0.1.7",
-    "js-sys",
-    "serde",
-    "wasm-bindgen",
-    "wasm-bindgen-futures",
-    "web-sys",
+ "anymap2",
+ "bincode",
+ "gloo-console",
+ "gloo-utils 0.1.7",
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
 ]
 
 [[package]]
@@ -1011,8 +1011,8 @@ version = "2.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888"
 dependencies = [
-    "cfg-if",
-    "crunchy",
+ "cfg-if",
+ "crunchy",
 ]
 
 [[package]]
@@ -1021,8 +1021,8 @@ version = "0.14.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
 dependencies = [
-    "ahash",
-    "allocator-api2",
+ "ahash",
+ "allocator-api2",
 ]
 
 [[package]]
@@ -1031,9 +1031,9 @@ version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
 dependencies = [
-    "bytes",
-    "fnv",
-    "itoa",
+ "bytes",
+ "fnv",
+ "itoa",
 ]
 
 [[package]]
@@ -1042,9 +1042,9 @@ version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"
 dependencies = [
-    "bytes",
-    "fnv",
-    "itoa",
+ "bytes",
+ "fnv",
+ "itoa",
 ]
 
 [[package]]
@@ -1059,8 +1059,8 @@ version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
 dependencies = [
-    "unicode-bidi",
-    "unicode-normalization",
+ "unicode-bidi",
+ "unicode-normalization",
 ]
 
 [[package]]
@@ -1069,8 +1069,8 @@ version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "93ead53efc7ea8ed3cfb0c79fc8023fbb782a5432b52830b6518941cebe6505c"
 dependencies = [
-    "equivalent",
-    "hashbrown",
+ "equivalent",
+ "hashbrown",
 ]
 
 [[package]]
@@ -1079,8 +1079,8 @@ version = "0.7.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "04e8e537b529b8674e97e9fb82c10ff168a290ac3867a0295f112061ffbca1ef"
 dependencies = [
-    "hashbrown",
-    "parking_lot",
+ "hashbrown",
+ "parking_lot",
 ]
 
 [[package]]
@@ -1089,18 +1089,18 @@ version = "1.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4b84ee245c606aeb0841649a9288e3eae8c61b853a8cd5c0e14450e96d53d28f"
 dependencies = [
-    "blocking",
-    "cfg-if",
-    "futures-core",
-    "futures-io",
-    "intmap",
-    "libc",
-    "once_cell",
-    "rustc_version",
-    "spinning",
-    "thiserror",
-    "to_method",
-    "winapi",
+ "blocking",
+ "cfg-if",
+ "futures-core",
+ "futures-io",
+ "intmap",
+ "libc",
+ "once_cell",
+ "rustc_version",
+ "spinning",
+ "thiserror",
+ "to_method",
+ "winapi",
 ]
 
 [[package]]
@@ -1121,7 +1121,7 @@ version = "0.3.70"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a"
 dependencies = [
-    "wasm-bindgen",
+ "wasm-bindgen",
 ]
 
 [[package]]
@@ -1130,9 +1130,9 @@ version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a"
 dependencies = [
-    "bitflags",
-    "serde",
-    "unicode-segmentation",
+ "bitflags",
+ "serde",
+ "unicode-segmentation",
 ]
 
 [[package]]
@@ -1141,11 +1141,11 @@ version = "0.16.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7fcb3baf2360eb25ad31f0ada3add63927ada6db457791979b82ac199f835cb9"
 dependencies = [
-    "cargo-platform",
-    "cargo_metadata",
-    "cfg-expr",
-    "petgraph",
-    "semver",
+ "cargo-platform",
+ "cargo_metadata",
+ "cfg-expr",
+ "petgraph",
+ "semver",
 ]
 
 [[package]]
@@ -1166,8 +1166,8 @@ version = "0.4.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
 dependencies = [
-    "autocfg",
-    "scopeguard",
+ "autocfg",
+ "scopeguard",
 ]
 
 [[package]]
@@ -1188,7 +1188,7 @@ version = "0.12.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904"
 dependencies = [
-    "hashbrown",
+ "hashbrown",
 ]
 
 [[package]]
@@ -1209,8 +1209,8 @@ version = "0.46.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
 dependencies = [
-    "overload",
-    "winapi",
+ "overload",
+ "winapi",
 ]
 
 [[package]]
@@ -1219,7 +1219,7 @@ version = "0.2.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
 dependencies = [
-    "autocfg",
+ "autocfg",
 ]
 
 [[package]]
@@ -1234,7 +1234,7 @@ version = "2.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
 dependencies = [
-    "num-traits",
+ "num-traits",
 ]
 
 [[package]]
@@ -1255,8 +1255,8 @@ version = "0.12.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
 dependencies = [
-    "lock_api",
-    "parking_lot_core",
+ "lock_api",
+ "parking_lot_core",
 ]
 
 [[package]]
@@ -1265,11 +1265,11 @@ version = "0.9.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
 dependencies = [
-    "cfg-if",
-    "libc",
-    "redox_syscall",
-    "smallvec",
-    "windows-targets",
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
 ]
 
 [[package]]
@@ -1284,8 +1284,8 @@ version = "0.6.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db"
 dependencies = [
-    "fixedbitset",
-    "indexmap",
+ "fixedbitset",
+ "indexmap",
 ]
 
 [[package]]
@@ -1294,7 +1294,7 @@ version = "1.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
 dependencies = [
-    "pin-project-internal",
+ "pin-project-internal",
 ]
 
 [[package]]
@@ -1303,9 +1303,9 @@ version = "1.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1326,9 +1326,9 @@ version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
 dependencies = [
-    "atomic-waker",
-    "fastrand",
-    "futures-io",
+ "atomic-waker",
+ "fastrand",
+ "futures-io",
 ]
 
 [[package]]
@@ -1337,8 +1337,8 @@ version = "0.2.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
 dependencies = [
-    "proc-macro2",
-    "syn",
+ "proc-macro2",
+ "syn",
 ]
 
 [[package]]
@@ -1347,7 +1347,7 @@ version = "1.0.86"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
 dependencies = [
-    "unicode-ident",
+ "unicode-ident",
 ]
 
 [[package]]
@@ -1356,7 +1356,7 @@ version = "1.0.36"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
 dependencies = [
-    "proc-macro2",
+ "proc-macro2",
 ]
 
 [[package]]
@@ -1365,7 +1365,7 @@ version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
 dependencies = [
-    "bitflags",
+ "bitflags",
 ]
 
 [[package]]
@@ -1380,7 +1380,7 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
 dependencies = [
-    "semver",
+ "semver",
 ]
 
 [[package]]
@@ -1401,7 +1401,7 @@ version = "1.0.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
 dependencies = [
-    "serde",
+ "serde",
 ]
 
 [[package]]
@@ -1410,7 +1410,7 @@ version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73"
 dependencies = [
-    "futures-core",
+ "futures-core",
 ]
 
 [[package]]
@@ -1419,7 +1419,7 @@ version = "1.0.207"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2"
 dependencies = [
-    "serde_derive",
+ "serde_derive",
 ]
 
 [[package]]
@@ -1428,8 +1428,8 @@ version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
 dependencies = [
-    "ordered-float",
-    "serde",
+ "ordered-float",
+ "serde",
 ]
 
 [[package]]
@@ -1438,9 +1438,9 @@ version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e"
 dependencies = [
-    "js-sys",
-    "serde",
-    "wasm-bindgen",
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
 ]
 
 [[package]]
@@ -1449,9 +1449,9 @@ version = "1.0.207"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1460,10 +1460,10 @@ version = "1.0.125"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "83c8e735a073ccf5be70aa8066aa984eaf2fa000db6c8d0100ae605b366d31ed"
 dependencies = [
-    "itoa",
-    "memchr",
-    "ryu",
-    "serde",
+ "itoa",
+ "memchr",
+ "ryu",
+ "serde",
 ]
 
 [[package]]
@@ -1472,9 +1472,9 @@ version = "0.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0431a35568651e363364210c91983c1da5eb29404d9f0928b67d4ebcfa7d330c"
 dependencies = [
-    "percent-encoding",
-    "serde",
-    "thiserror",
+ "percent-encoding",
+ "serde",
+ "thiserror",
 ]
 
 [[package]]
@@ -1483,9 +1483,9 @@ version = "0.1.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1494,10 +1494,10 @@ version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
 dependencies = [
-    "form_urlencoded",
-    "itoa",
-    "ryu",
-    "serde",
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
 ]
 
 [[package]]
@@ -1506,26 +1506,26 @@ version = "0.6.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "024b400db1aca5bd4188714f7bbbf7a2e1962b9a12a80b2a21e937e509086963"
 dependencies = [
-    "bytes",
-    "const_format",
-    "dashmap",
-    "futures",
-    "gloo-net 0.6.0",
-    "http 1.1.0",
-    "js-sys",
-    "once_cell",
-    "send_wrapper",
-    "serde",
-    "serde_json",
-    "serde_qs",
-    "server_fn_macro_default",
-    "thiserror",
-    "url",
-    "wasm-bindgen",
-    "wasm-bindgen-futures",
-    "wasm-streams",
-    "web-sys",
-    "xxhash-rust",
+ "bytes",
+ "const_format",
+ "dashmap",
+ "futures",
+ "gloo-net 0.6.0",
+ "http 1.1.0",
+ "js-sys",
+ "once_cell",
+ "send_wrapper",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "server_fn_macro_default",
+ "thiserror",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "xxhash-rust",
 ]
 
 [[package]]
@@ -1534,12 +1534,12 @@ version = "0.6.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9cf0e6f71fc924df36e87f27dfbd447f0bedd092d365db3a5396878256d9f00c"
 dependencies = [
-    "const_format",
-    "convert_case",
-    "proc-macro2",
-    "quote",
-    "syn",
-    "xxhash-rust",
+ "const_format",
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "xxhash-rust",
 ]
 
 [[package]]
@@ -1548,8 +1548,8 @@ version = "0.6.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "556e4fd51eb9ee3e7d9fb0febec6cef486dcbc8f7f427591dfcfebee1abe1ad4"
 dependencies = [
-    "server_fn_macro",
-    "syn",
+ "server_fn_macro",
+ "syn",
 ]
 
 [[package]]
@@ -1558,7 +1558,7 @@ version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
 dependencies = [
-    "lazy_static",
+ "lazy_static",
 ]
 
 [[package]]
@@ -1567,7 +1567,7 @@ version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
 dependencies = [
-    "autocfg",
+ "autocfg",
 ]
 
 [[package]]
@@ -1576,8 +1576,8 @@ version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fcfaf791ff02f48f3518ce825d32cf419c13a43c1d8b1232f74ac89f339c46d2"
 dependencies = [
-    "sledgehammer_bindgen_macro",
-    "wasm-bindgen",
+ "sledgehammer_bindgen_macro",
+ "wasm-bindgen",
 ]
 
 [[package]]
@@ -1586,8 +1586,8 @@ version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "edc90d3e8623d29a664cd8dba5078b600dd203444f00b9739f744e4c6e7aeaf2"
 dependencies = [
-    "quote",
-    "syn",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1596,9 +1596,9 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f20798defa0e9d4eff9ca451c7f84774c7378a9c3b5a40112cfa2b3eadb97ae2"
 dependencies = [
-    "lru",
-    "once_cell",
-    "rustc-hash",
+ "lru",
+ "once_cell",
+ "rustc-hash",
 ]
 
 [[package]]
@@ -1607,8 +1607,8 @@ version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a"
 dependencies = [
-    "serde",
-    "version_check",
+ "serde",
+ "version_check",
 ]
 
 [[package]]
@@ -1623,7 +1623,7 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b"
 dependencies = [
-    "lock_api",
+ "lock_api",
 ]
 
 [[package]]
@@ -1632,9 +1632,9 @@ version = "2.0.74"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1fceb41e3d546d0bd83421d3409b1460cc7444cd389341a4c880fe7a042cb3d7"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "unicode-ident",
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
 ]
 
 [[package]]
@@ -1643,7 +1643,7 @@ version = "1.0.63"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
 dependencies = [
-    "thiserror-impl",
+ "thiserror-impl",
 ]
 
 [[package]]
@@ -1652,9 +1652,9 @@ version = "1.0.63"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1663,8 +1663,8 @@ version = "1.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
 dependencies = [
-    "cfg-if",
-    "once_cell",
+ "cfg-if",
+ "once_cell",
 ]
 
 [[package]]
@@ -1673,7 +1673,7 @@ version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
 dependencies = [
-    "tinyvec_macros",
+ "tinyvec_macros",
 ]
 
 [[package]]
@@ -1692,8 +1692,8 @@ checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8"
 name = "todo-baggins"
 version = "0.1.0"
 dependencies = [
-    "dioxus",
-    "dioxus-logger",
+ "dioxus",
+ "dioxus-logger",
 ]
 
 [[package]]
@@ -1702,9 +1702,9 @@ version = "0.1.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
 dependencies = [
-    "pin-project-lite",
-    "tracing-attributes",
-    "tracing-core",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
 ]
 
 [[package]]
@@ -1713,9 +1713,9 @@ version = "0.1.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]
 
 [[package]]
@@ -1724,8 +1724,8 @@ version = "0.1.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
 dependencies = [
-    "once_cell",
-    "valuable",
+ "once_cell",
+ "valuable",
 ]
 
 [[package]]
@@ -1734,9 +1734,9 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
 dependencies = [
-    "log",
-    "once_cell",
-    "tracing-core",
+ "log",
+ "once_cell",
+ "tracing-core",
 ]
 
 [[package]]
@@ -1745,12 +1745,12 @@ version = "0.3.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
 dependencies = [
-    "nu-ansi-term",
-    "sharded-slab",
-    "smallvec",
-    "thread_local",
-    "tracing-core",
-    "tracing-log",
+ "nu-ansi-term",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing-core",
+ "tracing-log",
 ]
 
 [[package]]
@@ -1759,9 +1759,9 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07"
 dependencies = [
-    "tracing",
-    "tracing-subscriber",
-    "wasm-bindgen",
+ "tracing",
+ "tracing-subscriber",
+ "wasm-bindgen",
 ]
 
 [[package]]
@@ -1782,7 +1782,7 @@ version = "0.1.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
 dependencies = [
-    "tinyvec",
+ "tinyvec",
 ]
 
 [[package]]
@@ -1803,9 +1803,9 @@ version = "2.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
 dependencies = [
-    "form_urlencoded",
-    "idna",
-    "percent-encoding",
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
 ]
 
 [[package]]
@@ -1832,9 +1832,9 @@ version = "0.2.93"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5"
 dependencies = [
-    "cfg-if",
-    "once_cell",
-    "wasm-bindgen-macro",
+ "cfg-if",
+ "once_cell",
+ "wasm-bindgen-macro",
 ]
 
 [[package]]
@@ -1843,13 +1843,13 @@ version = "0.2.93"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b"
 dependencies = [
-    "bumpalo",
-    "log",
-    "once_cell",
-    "proc-macro2",
-    "quote",
-    "syn",
-    "wasm-bindgen-shared",
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
 ]
 
 [[package]]
@@ -1858,10 +1858,10 @@ version = "0.4.43"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed"
 dependencies = [
-    "cfg-if",
-    "js-sys",
-    "wasm-bindgen",
-    "web-sys",
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
 ]
 
 [[package]]
@@ -1870,8 +1870,8 @@ version = "0.2.93"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf"
 dependencies = [
-    "quote",
-    "wasm-bindgen-macro-support",
+ "quote",
+ "wasm-bindgen-macro-support",
 ]
 
 [[package]]
@@ -1880,11 +1880,11 @@ version = "0.2.93"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
-    "wasm-bindgen-backend",
-    "wasm-bindgen-shared",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
 ]
 
 [[package]]
@@ -1899,11 +1899,11 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129"
 dependencies = [
-    "futures-util",
-    "js-sys",
-    "wasm-bindgen",
-    "wasm-bindgen-futures",
-    "web-sys",
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
 ]
 
 [[package]]
@@ -1912,8 +1912,8 @@ version = "0.3.70"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0"
 dependencies = [
-    "js-sys",
-    "wasm-bindgen",
+ "js-sys",
+ "wasm-bindgen",
 ]
 
 [[package]]
@@ -1922,8 +1922,8 @@ 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",
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
 ]
 
 [[package]]
@@ -1944,14 +1944,14 @@ version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
 dependencies = [
-    "windows_aarch64_gnullvm",
-    "windows_aarch64_msvc",
-    "windows_i686_gnu",
-    "windows_i686_gnullvm",
-    "windows_i686_msvc",
-    "windows_x86_64_gnu",
-    "windows_x86_64_gnullvm",
-    "windows_x86_64_msvc",
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_gnullvm",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
 ]
 
 [[package]]
@@ -2014,7 +2014,7 @@ version = "0.7.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
 dependencies = [
-    "zerocopy-derive",
+ "zerocopy-derive",
 ]
 
 [[package]]
@@ -2023,7 +2023,7 @@ version = "0.7.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
 dependencies = [
-    "proc-macro2",
-    "quote",
-    "syn",
+ "proc-macro2",
+ "quote",
+ "syn",
 ]

From 72de33dab877c54c3c6e6e4244aae78c34adbf3b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 16:19:30 +0200
Subject: [PATCH 03/50] refactor: set the title in the Dioxus configuration

---
 Dioxus.toml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Dioxus.toml b/Dioxus.toml
index 5f5dfa2..b99cf59 100644
--- a/Dioxus.toml
+++ b/Dioxus.toml
@@ -16,7 +16,7 @@ asset_dir = "assets"
 [web.app]
 
 # HTML title tag content
-title = "todo-baggins"
+title = "Todo Baggins"
 
 [web.watcher]
 

From 37b7149e30f00c433c8c85c0da0388d848168b61 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 16:47:55 +0200
Subject: [PATCH 04/50] feat: setup Tailwind.css

---
 .gitignore               |    5 +-
 README.md                |   17 -
 assets/main.css          |   40 --
 assets/styles/.gitignore |    1 +
 input.css                |    3 -
 package-lock.json        | 1386 ++++++++++++++++++++++++++++++++++++++
 package.json             |    9 +
 src/styles/tailwind.css  |    6 +
 8 files changed, 1403 insertions(+), 64 deletions(-)
 delete mode 100644 README.md
 delete mode 100644 assets/main.css
 create mode 100644 assets/styles/.gitignore
 delete mode 100644 input.css
 create mode 100644 package-lock.json
 create mode 100644 package.json
 create mode 100644 src/styles/tailwind.css

diff --git a/.gitignore b/.gitignore
index 5f0b8d2..a7a3e9d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,12 +1,9 @@
-# Generated by Cargo
-# will have compiled files and executables
 /target/
 /dist/
 /static/
 /.dioxus/
+/node_modules/
 
-# this file will generate by tailwind:
 /assets/tailwind.css
 
-# These are backup files generated by rustfmt
 **/*.rs.bk
diff --git a/README.md b/README.md
deleted file mode 100644
index 0458151..0000000
--- a/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Development
-
-1. Install npm: https://docs.npmjs.com/downloading-and-installing-node-js-and-npm
-2. Install the tailwind css cli: https://tailwindcss.com/docs/installation
-3. Run the following command in the root of the project to start the tailwind CSS compiler:
-
-```bash
-npx tailwindcss -i ./input.css -o ./assets/tailwind.css --watch
-```
-
-Run the following command in the root of the project to start the Dioxus dev server:
-
-```bash
-dx serve --hot-reload
-```
-
-- Open the browser to http://localhost:8080
\ No newline at end of file
diff --git a/assets/main.css b/assets/main.css
deleted file mode 100644
index affbeb0..0000000
--- a/assets/main.css
+++ /dev/null
@@ -1,40 +0,0 @@
-body {
-    background-color: #111216;
-}
-
-#main {
-    margin: 0;
-    display: flex;
-    flex-direction: column;
-    justify-content: center;
-    align-items: center;
-    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif
-}
-
-#links {
-    width: 400px;
-    text-align: left;
-    font-size: x-large;
-    color: white;
-    display: flex;
-    flex-direction: column;
-}
-
-#links a {
-    color: white;
-    text-decoration: none;
-    margin-top: 20px;
-    margin: 10px;
-    border: white 1px solid;
-    border-radius: 5px;
-    padding: 10px;
-}
-
-#links a:hover {
-    background-color: #1f1f1f;
-    cursor: pointer;
-}
-
-#header {
-    max-width: 1200px;
-}
diff --git a/assets/styles/.gitignore b/assets/styles/.gitignore
new file mode 100644
index 0000000..ddeb771
--- /dev/null
+++ b/assets/styles/.gitignore
@@ -0,0 +1 @@
+tailwind_output.css
diff --git a/input.css b/input.css
deleted file mode 100644
index bd6213e..0000000
--- a/input.css
+++ /dev/null
@@ -1,3 +0,0 @@
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..1f86e53
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1386 @@
+{
+  "name": "todo_baggins",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "dependencies": {
+        "tailwindcss": "^3.4.6"
+      }
+    },
+    "node_modules/@alloc/quick-lru": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
+      "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^5.1.2",
+        "string-width-cjs": "npm:string-width@^4.2.0",
+        "strip-ansi": "^7.0.1",
+        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+        "wrap-ansi": "^8.1.0",
+        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.5",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
+      "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/set-array": "^1.2.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.24"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/resolve-uri": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "license": "MIT"
+    },
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
+      }
+    },
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+      "license": "MIT",
+      "optional": true,
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
+      "license": "MIT"
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "license": "ISC",
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/arg": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
+      "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
+      "license": "MIT"
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+      "license": "MIT"
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+      "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
+      "license": "MIT",
+      "dependencies": {
+        "fill-range": "^7.1.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/camelcase-css": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
+      "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+      "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+      "license": "MIT",
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "funding": {
+        "url": "https://paulmillr.com/funding/"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "node_modules/chokidar/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "license": "MIT",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "license": "MIT"
+    },
+    "node_modules/commander": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
+      "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/cross-spawn": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+      "license": "MIT",
+      "dependencies": {
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "license": "MIT",
+      "bin": {
+        "cssesc": "bin/cssesc"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/didyoumean": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
+      "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/dlv": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
+      "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
+      "license": "MIT"
+    },
+    "node_modules/eastasianwidth": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+      "license": "MIT"
+    },
+    "node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "license": "MIT"
+    },
+    "node_modules/fast-glob": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+      "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+      "license": "MIT",
+      "dependencies": {
+        "@nodelib/fs.stat": "^2.0.2",
+        "@nodelib/fs.walk": "^1.2.3",
+        "glob-parent": "^5.1.2",
+        "merge2": "^1.3.0",
+        "micromatch": "^4.0.4"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/fast-glob/node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/fastq": {
+      "version": "1.17.1",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+      "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
+      "license": "ISC",
+      "dependencies": {
+        "reusify": "^1.0.4"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+      "license": "MIT",
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/foreground-child": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+      "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
+      "license": "ISC",
+      "dependencies": {
+        "cross-spawn": "^7.0.0",
+        "signal-exit": "^4.0.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+      "hasInstallScript": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "license": "MIT",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/glob": {
+      "version": "10.4.5",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+      "license": "ISC",
+      "dependencies": {
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
+      },
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+      "license": "ISC",
+      "dependencies": {
+        "is-glob": "^4.0.3"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+      "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+      "license": "MIT",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "license": "MIT",
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.15.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz",
+      "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==",
+      "license": "MIT",
+      "dependencies": {
+        "hasown": "^2.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "license": "MIT",
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "license": "ISC"
+    },
+    "node_modules/jackspeak": {
+      "version": "3.4.3",
+      "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+      "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "@isaacs/cliui": "^8.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      },
+      "optionalDependencies": {
+        "@pkgjs/parseargs": "^0.11.0"
+      }
+    },
+    "node_modules/jiti": {
+      "version": "1.21.6",
+      "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+      "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
+      "license": "MIT",
+      "bin": {
+        "jiti": "bin/jiti.js"
+      }
+    },
+    "node_modules/lilconfig": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
+      "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/lines-and-columns": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+      "license": "MIT"
+    },
+    "node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+      "license": "ISC"
+    },
+    "node_modules/merge2": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/micromatch": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+      "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
+      "license": "MIT",
+      "dependencies": {
+        "braces": "^3.0.3",
+        "picomatch": "^2.3.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/minipass": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+      "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+      "license": "MIT",
+      "dependencies": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.7",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+      "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-hash": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
+      "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/package-json-from-dist": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
+      "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+      "license": "BlueOak-1.0.0"
+    },
+    "node_modules/path-key": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+      "license": "MIT"
+    },
+    "node_modules/path-scurry": {
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+      "license": "BlueOak-1.0.0",
+      "dependencies": {
+        "lru-cache": "^10.2.0",
+        "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/picocolors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+      "license": "ISC"
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/pify": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/pirates": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+      "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/postcss": {
+      "version": "8.4.41",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
+      "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/postcss"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "nanoid": "^3.3.7",
+        "picocolors": "^1.0.1",
+        "source-map-js": "^1.2.0"
+      },
+      "engines": {
+        "node": "^10 || ^12 || >=14"
+      }
+    },
+    "node_modules/postcss-import": {
+      "version": "15.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
+      "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
+      "license": "MIT",
+      "dependencies": {
+        "postcss-value-parser": "^4.0.0",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
+    "node_modules/postcss-js": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
+      "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
+      "license": "MIT",
+      "dependencies": {
+        "camelcase-css": "^2.0.1"
+      },
+      "engines": {
+        "node": "^12 || ^14 || >= 16"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/postcss/"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.21"
+      }
+    },
+    "node_modules/postcss-load-config": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+      "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "lilconfig": "^3.0.0",
+        "yaml": "^2.3.4"
+      },
+      "engines": {
+        "node": ">= 14"
+      },
+      "peerDependencies": {
+        "postcss": ">=8.0.9",
+        "ts-node": ">=9.0.0"
+      },
+      "peerDependenciesMeta": {
+        "postcss": {
+          "optional": true
+        },
+        "ts-node": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/postcss-load-config/node_modules/lilconfig": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
+      "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antonk52"
+      }
+    },
+    "node_modules/postcss-nested": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+      "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/postcss/"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "postcss-selector-parser": "^6.1.1"
+      },
+      "engines": {
+        "node": ">=12.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.2.14"
+      }
+    },
+    "node_modules/postcss-selector-parser": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+      "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
+      "license": "MIT",
+      "dependencies": {
+        "cssesc": "^3.0.0",
+        "util-deprecate": "^1.0.2"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/postcss-value-parser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+      "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
+      "license": "MIT"
+    },
+    "node_modules/queue-microtask": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT"
+    },
+    "node_modules/read-cache": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
+      "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
+      "license": "MIT",
+      "dependencies": {
+        "pify": "^2.3.0"
+      }
+    },
+    "node_modules/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "license": "MIT",
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+      "license": "MIT",
+      "dependencies": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/reusify": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+      "license": "MIT",
+      "engines": {
+        "iojs": ">=1.0.0",
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/run-parallel": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+      "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "license": "MIT",
+      "dependencies": {
+        "queue-microtask": "^1.2.2"
+      }
+    },
+    "node_modules/shebang-command": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+      "license": "MIT",
+      "dependencies": {
+        "shebang-regex": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/shebang-regex": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/signal-exit": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+      "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+      "license": "ISC",
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/source-map-js": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+      "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+      "license": "BSD-3-Clause",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "license": "MIT",
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string-width-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string-width-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "license": "MIT"
+    },
+    "node_modules/string-width-cjs/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/sucrase": {
+      "version": "3.35.0",
+      "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
+      "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
+      "license": "MIT",
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "commander": "^4.0.0",
+        "glob": "^10.3.10",
+        "lines-and-columns": "^1.1.6",
+        "mz": "^2.7.0",
+        "pirates": "^4.0.1",
+        "ts-interface-checker": "^0.1.9"
+      },
+      "bin": {
+        "sucrase": "bin/sucrase",
+        "sucrase-node": "bin/sucrase-node"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "license": "MIT",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tailwindcss": {
+      "version": "3.4.10",
+      "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz",
+      "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==",
+      "license": "MIT",
+      "dependencies": {
+        "@alloc/quick-lru": "^5.2.0",
+        "arg": "^5.0.2",
+        "chokidar": "^3.5.3",
+        "didyoumean": "^1.2.2",
+        "dlv": "^1.1.3",
+        "fast-glob": "^3.3.0",
+        "glob-parent": "^6.0.2",
+        "is-glob": "^4.0.3",
+        "jiti": "^1.21.0",
+        "lilconfig": "^2.1.0",
+        "micromatch": "^4.0.5",
+        "normalize-path": "^3.0.0",
+        "object-hash": "^3.0.0",
+        "picocolors": "^1.0.0",
+        "postcss": "^8.4.23",
+        "postcss-import": "^15.1.0",
+        "postcss-js": "^4.0.1",
+        "postcss-load-config": "^4.0.1",
+        "postcss-nested": "^6.0.1",
+        "postcss-selector-parser": "^6.0.11",
+        "resolve": "^1.22.2",
+        "sucrase": "^3.32.0"
+      },
+      "bin": {
+        "tailwind": "lib/cli.js",
+        "tailwindcss": "lib/cli.js"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+      "license": "MIT",
+      "dependencies": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "node_modules/thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+      "license": "MIT",
+      "dependencies": {
+        "thenify": ">= 3.1.0 < 4"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "license": "MIT",
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/ts-interface-checker": {
+      "version": "0.1.13",
+      "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
+      "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
+      "license": "Apache-2.0"
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+      "license": "MIT"
+    },
+    "node_modules/which": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+      "license": "ISC",
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^6.1.0",
+        "string-width": "^5.0.1",
+        "strip-ansi": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi-cjs": {
+      "name": "wrap-ansi",
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "license": "MIT",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "license": "MIT",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "license": "MIT"
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "license": "MIT",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "license": "MIT",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/yaml": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz",
+      "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==",
+      "license": "ISC",
+      "bin": {
+        "yaml": "bin.mjs"
+      },
+      "engines": {
+        "node": ">= 14"
+      }
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..1efcb98
--- /dev/null
+++ b/package.json
@@ -0,0 +1,9 @@
+{
+  "dependencies": {
+    "tailwindcss": "^3.4.6"
+  },
+  "scripts": {
+    "build": "tailwindcss -i src/styles/tailwind.css -o assets/styles/tailwind_output.css",
+    "watch": "npm run build -- --watch"
+  }
+}
diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css
new file mode 100644
index 0000000..23e8f29
--- /dev/null
+++ b/src/styles/tailwind.css
@@ -0,0 +1,6 @@
+/*noinspection CssInvalidAtRule*/
+@tailwind base;
+/*noinspection CssInvalidAtRule*/
+@tailwind components;
+/*noinspection CssInvalidAtRule*/
+@tailwind utilities;

From ee55e0799b3a35766385e84ed8b6d406d9c1c1fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 19:38:29 +0200
Subject: [PATCH 05/50] chore: update .gitignore

---
 .gitignore | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.gitignore b/.gitignore
index a7a3e9d..2d4f7aa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,4 @@
 /.dioxus/
 /node_modules/
 
-/assets/tailwind.css
-
 **/*.rs.bk

From f64a6b1b32645c43e4ab92433b9cf729c85931c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 19:38:40 +0200
Subject: [PATCH 06/50] feat: add a Docker compose file for development

---
 .dockerignore             | 11 +++++++++++
 docker-compose-dev.yml    | 31 +++++++++++++++++++++++++++++++
 docker-compose-prod.yml   |  0
 docker/dev/app/Dockerfile | 10 ++++++++++
 4 files changed, 52 insertions(+)
 create mode 100644 .dockerignore
 create mode 100644 docker-compose-dev.yml
 create mode 100755 docker-compose-prod.yml
 create mode 100644 docker/dev/app/Dockerfile

diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..1a4d15f
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,11 @@
+/.dioxus/
+/.git/
+/.github/
+/dist/
+/debug/
+/docker/
+/node_modules/
+/static/
+/target/
+/docker-compose-dev.yml
+/docker-compose-prod.yml
diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
new file mode 100644
index 0000000..21ed00b
--- /dev/null
+++ b/docker-compose-dev.yml
@@ -0,0 +1,31 @@
+services:
+  app:
+    build:
+      dockerfile: docker/dev/app/Dockerfile
+    ports: [ "8000:8000" ]
+    volumes:
+      - .:/srv/app
+      - /srv/app/.git/
+      - /srv/app/.dioxus/
+      - /srv/app/dist/
+      - /srv/app/debug/
+      - /srv/app/docker/
+      - /srv/app/node_modules/
+      - /srv/app/static/
+      - /srv/app/target/
+      - /dev/null:/srv/app/docker-compose-dev.yml
+      - /dev/null:/srv/app/docker-compose-prod.yml
+    restart: always
+    depends_on: [ "db" ]
+
+  db:
+    image: postgres:16.4-bookworm
+    environment:
+      POSTGRES_DB: todo_baggins
+      POSTGRES_USER: app
+      POSTGRES_PASSWORD: app
+    volumes: [ "db_data:/var/lib/postgresql/data" ]
+    restart: always
+
+volumes:
+  db_data:
diff --git a/docker-compose-prod.yml b/docker-compose-prod.yml
new file mode 100755
index 0000000..e69de29
diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
new file mode 100644
index 0000000..523b986
--- /dev/null
+++ b/docker/dev/app/Dockerfile
@@ -0,0 +1,10 @@
+FROM rust:1.80-bookworm
+
+RUN rustup target add wasm32-unknown-unknown
+RUN cargo install dioxus-cli
+RUN apt-get update && apt-get install -y nodejs npm
+
+COPY . /srv/app
+WORKDIR /srv/app
+
+CMD npm run watch & dx serve --port 8000

From 04bcc81b71748095267e8debb20dc52cb415df35 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 19:58:11 +0200
Subject: [PATCH 07/50] chore: update .idea

---
 .idea/modules.xml                            | 2 +-
 .idea/{todo_baggins.iml => todo-baggins.iml} | 2 --
 .idea/vcs.xml                                | 8 +-------
 3 files changed, 2 insertions(+), 10 deletions(-)
 rename .idea/{todo_baggins.iml => todo-baggins.iml} (74%)

diff --git a/.idea/modules.xml b/.idea/modules.xml
index daa234f..418c517 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
 <project version="4">
   <component name="ProjectModuleManager">
     <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/todo_baggins.iml" filepath="$PROJECT_DIR$/.idea/todo_baggins.iml" />
+      <module fileurl="file://$PROJECT_DIR$/.idea/todo-baggins.iml" filepath="$PROJECT_DIR$/.idea/todo-baggins.iml" />
     </modules>
   </component>
 </project>
\ No newline at end of file
diff --git a/.idea/todo_baggins.iml b/.idea/todo-baggins.iml
similarity index 74%
rename from .idea/todo_baggins.iml
rename to .idea/todo-baggins.iml
index 0e0cd5b..cf84ae4 100644
--- a/.idea/todo_baggins.iml
+++ b/.idea/todo-baggins.iml
@@ -2,9 +2,7 @@
 <module type="EMPTY_MODULE" version="4">
   <component name="NewModuleRootManager">
     <content url="file://$MODULE_DIR$">
-      <sourceFolder url="file://$MODULE_DIR$/backend/src" isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
-      <excludeFolder url="file://$MODULE_DIR$/backend/target" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 4c6280e..35eb1dd 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,12 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="CommitMessageInspectionProfile">
-    <profile version="1.0">
-      <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
-      <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
-    </profile>
-  </component>
   <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+    <mapping directory="" vcs="Git" />
   </component>
 </project>
\ No newline at end of file

From 894a7ae5ebfb5e282acf79d6e37aec310325bd64 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 19:59:00 +0200
Subject: [PATCH 08/50] chore: rename package name in package-lock.json

---
 package-lock.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package-lock.json b/package-lock.json
index 1f86e53..fcd974d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5 +1,5 @@
 {
-  "name": "todo_baggins",
+  "name": "todo-baggins",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {

From a9e2befa9aefb2a8264adb3b692553018ad6b0f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 20:03:54 +0200
Subject: [PATCH 09/50] chore: update .idea

---
 .idea/vcs.xml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 35eb1dd..7ddfc9e 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="CommitMessageInspectionProfile">
+    <profile version="1.0">
+      <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
+      <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
+    </profile>
+  </component>
   <component name="VcsDirectoryMappings">
     <mapping directory="" vcs="Git" />
   </component>

From bdc1738cba8edb3277f8229faf7163206f278417 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Thu, 15 Aug 2024 20:04:10 +0200
Subject: [PATCH 10/50] chore: create a run configuration for the development
 Docker compose

---
 .idea/runConfigurations/dev.xml | 11 +++++++++++
 1 file changed, 11 insertions(+)
 create mode 100644 .idea/runConfigurations/dev.xml

diff --git a/.idea/runConfigurations/dev.xml b/.idea/runConfigurations/dev.xml
new file mode 100644
index 0000000..8d4bc2a
--- /dev/null
+++ b/.idea/runConfigurations/dev.xml
@@ -0,0 +1,11 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="dev" type="docker-deploy" factoryName="docker-compose.yml" server-name="Docker">
+    <deployment type="docker-compose.yml">
+      <settings>
+        <option name="envFilePath" value="" />
+        <option name="sourceFilePath" value="docker-compose-dev.yml" />
+      </settings>
+    </deployment>
+    <method v="2" />
+  </configuration>
+</component>
\ No newline at end of file

From f3b9057df0d52473c8fc67e1434da7ae4366255c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Fri, 16 Aug 2024 09:28:03 +0200
Subject: [PATCH 11/50] chore: reorder Docker compose attributes

---
 docker-compose-dev.yml | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
index 21ed00b..8ce6f19 100644
--- a/docker-compose-dev.yml
+++ b/docker-compose-dev.yml
@@ -2,9 +2,9 @@ services:
   app:
     build:
       dockerfile: docker/dev/app/Dockerfile
-    ports: [ "8000:8000" ]
     volumes:
       - .:/srv/app
+      - .env.dev:/srv/app/.env
       - /srv/app/.git/
       - /srv/app/.dioxus/
       - /srv/app/dist/
@@ -16,15 +16,17 @@ services:
       - /dev/null:/srv/app/docker-compose-dev.yml
       - /dev/null:/srv/app/docker-compose-prod.yml
     restart: always
+    ports: [ "8000:8000" ]
     depends_on: [ "db" ]
 
   db:
     image: postgres:16.4-bookworm
+    volumes: [ "db_data:/var/lib/postgresql/data" ]
+    ports: [ "5432:5342" ]
     environment:
       POSTGRES_DB: todo_baggins
       POSTGRES_USER: app
       POSTGRES_PASSWORD: app
-    volumes: [ "db_data:/var/lib/postgresql/data" ]
     restart: always
 
 volumes:

From 08acd12ff46df3ddb675c1bf7a9733b731290ec1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Fri, 16 Aug 2024 09:29:29 +0200
Subject: [PATCH 12/50] fix: run `npm install` in the Docker development app
 container

---
 docker/dev/app/Dockerfile | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index 523b986..77bac30 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -7,4 +7,6 @@ RUN apt-get update && apt-get install -y nodejs npm
 COPY . /srv/app
 WORKDIR /srv/app
 
+RUN npm install
+
 CMD npm run watch & dx serve --port 8000

From a53d6dbb85c0b30c19f92c0e4e42a8d3a00a7649 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Fri, 16 Aug 2024 09:30:16 +0200
Subject: [PATCH 13/50] build: install Diesel

---
 .env.dev                  |  1 +
 .gitignore                |  3 ++
 Cargo.lock                | 90 +++++++++++++++++++++++++++++++++++++++
 Cargo.toml                |  1 +
 docker/dev/app/Dockerfile |  2 +-
 5 files changed, 96 insertions(+), 1 deletion(-)
 create mode 100644 .env.dev

diff --git a/.env.dev b/.env.dev
new file mode 100644
index 0000000..e876be4
--- /dev/null
+++ b/.env.dev
@@ -0,0 +1 @@
+DATABASE_URL=postgres://app:app@db/todo_baggins
diff --git a/.gitignore b/.gitignore
index 2d4f7aa..ce4a85a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,6 @@
 /node_modules/
 
 **/*.rs.bk
+
+.env
+.env.prod
diff --git a/Cargo.lock b/Cargo.lock
index f7eead0..bc6232d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -110,6 +110,12 @@ version = "3.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
 
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
 [[package]]
 name = "bytes"
 version = "1.7.1"
@@ -276,6 +282,7 @@ dependencies = [
  "ident_case",
  "proc-macro2",
  "quote",
+ "strsim",
  "syn",
 ]
 
@@ -303,6 +310,41 @@ dependencies = [
  "parking_lot_core",
 ]
 
+[[package]]
+name = "diesel"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf97ee7261bb708fa3402fa9c17a54b70e90e3cb98afb3dc8999d5512cb03f94"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "diesel_derives",
+ "itoa",
+ "pq-sys",
+]
+
+[[package]]
+name = "diesel_derives"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ff2be1e7312c858b2ef974f5c7089833ae57b5311b334b30923af58e5718d8"
+dependencies = [
+ "diesel_table_macro_syntax",
+ "dsl_auto_type",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "diesel_table_macro_syntax"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25"
+dependencies = [
+ "syn",
+]
+
 [[package]]
 name = "dioxus"
 version = "0.5.6"
@@ -612,6 +654,26 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "dsl_auto_type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607"
+dependencies = [
+ "darling",
+ "either",
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "either"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
+
 [[package]]
 name = "enumset"
 version = "1.1.5"
@@ -1025,6 +1087,12 @@ dependencies = [
  "allocator-api2",
 ]
 
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
 [[package]]
 name = "http"
 version = "0.2.12"
@@ -1331,6 +1399,15 @@ dependencies = [
  "futures-io",
 ]
 
+[[package]]
+name = "pq-sys"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24ff9e4cf6945c988f0db7005d87747bf72864965c3529d259ad155ac41d584"
+dependencies = [
+ "vcpkg",
+]
+
 [[package]]
 name = "prettyplease"
 version = "0.2.20"
@@ -1626,6 +1703,12 @@ dependencies = [
  "lock_api",
 ]
 
+[[package]]
+name = "strsim"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
+
 [[package]]
 name = "syn"
 version = "2.0.74"
@@ -1692,6 +1775,7 @@ checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8"
 name = "todo-baggins"
 version = "0.1.0"
 dependencies = [
+ "diesel",
  "dioxus",
  "dioxus-logger",
 ]
@@ -1820,6 +1904,12 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
 
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
 [[package]]
 name = "version_check"
 version = "0.9.5"
diff --git a/Cargo.toml b/Cargo.toml
index ea950f0..131176d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -7,6 +7,7 @@ edition = "2021"
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
 [dependencies]
+diesel = { version = "2.2.2", features = ["postgres"] }
 
 dioxus = { version = "0.5", features = ["web", "router"] }
 
diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index 77bac30..f992884 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -1,7 +1,7 @@
 FROM rust:1.80-bookworm
 
 RUN rustup target add wasm32-unknown-unknown
-RUN cargo install dioxus-cli
+RUN cargo install dioxus-cli diesel_cli
 RUN apt-get update && apt-get install -y nodejs npm
 
 COPY . /srv/app

From 3173b6361d82dd90729780f3fd42403b4e50ca11 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Fri, 16 Aug 2024 13:12:57 +0200
Subject: [PATCH 14/50] fix: database container port

---
 docker-compose-dev.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
index 8ce6f19..3b90249 100644
--- a/docker-compose-dev.yml
+++ b/docker-compose-dev.yml
@@ -22,7 +22,7 @@ services:
   db:
     image: postgres:16.4-bookworm
     volumes: [ "db_data:/var/lib/postgresql/data" ]
-    ports: [ "5432:5342" ]
+    ports: [ "5432:5432" ]
     environment:
       POSTGRES_DB: todo_baggins
       POSTGRES_USER: app

From f0e050c3f8c74a52290b5ec03d82281efa380f3a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Fri, 16 Aug 2024 13:13:31 +0200
Subject: [PATCH 15/50] chore: setup Diesel

---
 diesel.toml                                   |  9 +++++
 .../down.sql                                  |  6 ++++
 .../up.sql                                    | 36 +++++++++++++++++++
 3 files changed, 51 insertions(+)
 create mode 100644 diesel.toml
 create mode 100644 migrations/00000000000000_diesel_initial_setup/down.sql
 create mode 100644 migrations/00000000000000_diesel_initial_setup/up.sql

diff --git a/diesel.toml b/diesel.toml
new file mode 100644
index 0000000..069f77a
--- /dev/null
+++ b/diesel.toml
@@ -0,0 +1,9 @@
+# For documentation on how to configure this file,
+# see https://diesel.rs/guides/configuring-diesel-cli
+
+[print_schema]
+file = "src/schema.rs"
+custom_type_derives = ["diesel::query_builder::QueryId", "Clone"]
+
+[migrations_directory]
+dir = "/home/matous/Documents/todo-baggins/migrations"
diff --git a/migrations/00000000000000_diesel_initial_setup/down.sql b/migrations/00000000000000_diesel_initial_setup/down.sql
new file mode 100644
index 0000000..a9f5260
--- /dev/null
+++ b/migrations/00000000000000_diesel_initial_setup/down.sql
@@ -0,0 +1,6 @@
+-- This file was automatically created by Diesel to setup helper functions
+-- and other internal bookkeeping. This file is safe to edit, any future
+-- changes will be added to existing projects as new migrations.
+
+DROP FUNCTION IF EXISTS diesel_manage_updated_at(_tbl regclass);
+DROP FUNCTION IF EXISTS diesel_set_updated_at();
diff --git a/migrations/00000000000000_diesel_initial_setup/up.sql b/migrations/00000000000000_diesel_initial_setup/up.sql
new file mode 100644
index 0000000..d68895b
--- /dev/null
+++ b/migrations/00000000000000_diesel_initial_setup/up.sql
@@ -0,0 +1,36 @@
+-- This file was automatically created by Diesel to setup helper functions
+-- and other internal bookkeeping. This file is safe to edit, any future
+-- changes will be added to existing projects as new migrations.
+
+
+
+
+-- Sets up a trigger for the given table to automatically set a column called
+-- `updated_at` whenever the row is modified (unless `updated_at` was included
+-- in the modified columns)
+--
+-- # Example
+--
+-- ```sql
+-- CREATE TABLE users (id SERIAL PRIMARY KEY, updated_at TIMESTAMP NOT NULL DEFAULT NOW());
+--
+-- SELECT diesel_manage_updated_at('users');
+-- ```
+CREATE OR REPLACE FUNCTION diesel_manage_updated_at(_tbl regclass) RETURNS VOID AS $$
+BEGIN
+    EXECUTE format('CREATE TRIGGER set_updated_at BEFORE UPDATE ON %s
+                    FOR EACH ROW EXECUTE PROCEDURE diesel_set_updated_at()', _tbl);
+END;
+$$ LANGUAGE plpgsql;
+
+CREATE OR REPLACE FUNCTION diesel_set_updated_at() RETURNS trigger AS $$
+BEGIN
+    IF (
+        NEW IS DISTINCT FROM OLD AND
+        NEW.updated_at IS NOT DISTINCT FROM OLD.updated_at
+    ) THEN
+        NEW.updated_at := current_timestamp;
+    END IF;
+    RETURN NEW;
+END;
+$$ LANGUAGE plpgsql;

From 4ae66f4ae2fd943daac8836211b10d10258928d8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Fri, 16 Aug 2024 13:25:27 +0200
Subject: [PATCH 16/50] chore: add a DB data source to .idea

---
 .idea/dataSources.xml | 12 ++++++++++++
 1 file changed, 12 insertions(+)
 create mode 100644 .idea/dataSources.xml

diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml
new file mode 100644
index 0000000..3c9bcff
--- /dev/null
+++ b/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="DataSourceManagerImpl" format="xml" multifile-model="true">
+    <data-source source="LOCAL" name="todo_baggins@localhost" uuid="1658668c-c2b8-426d-a22f-16fbad9eff0b">
+      <driver-ref>postgresql</driver-ref>
+      <synchronize>true</synchronize>
+      <jdbc-driver>org.postgresql.Driver</jdbc-driver>
+      <jdbc-url>jdbc:postgresql://localhost:5432/todo_baggins</jdbc-url>
+      <working-dir>$ProjectFileDir$</working-dir>
+    </data-source>
+  </component>
+</project>
\ No newline at end of file

From f9db555ec041d5d18c369d26763b0b921b272981 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Fri, 16 Aug 2024 13:26:10 +0200
Subject: [PATCH 17/50] chore: add an SQL dialect to .idea

---
 .idea/dataSources.local.xml                   |   20 +
 .../1658668c-c2b8-426d-a22f-16fbad9eff0b.xml  | 4913 +++++++++++++++++
 .../_src_/database/todo_baggins.NgsZOg.meta   |    1 +
 .../schema/information_schema.FNRwLQ.meta     |    2 +
 .../schema/pg_catalog.0S1ZNQ.meta             |    2 +
 .../schema/public.abK9xQ.meta                 |    2 +
 .../schema/public.abK9xQ.zip                  |  Bin 0 -> 1779 bytes
 .idea/sqldialects.xml                         |    8 +
 8 files changed, 4948 insertions(+)
 create mode 100644 .idea/dataSources.local.xml
 create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml
 create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta
 create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta
 create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta
 create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta
 create mode 100644 .idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip
 create mode 100644 .idea/sqldialects.xml

diff --git a/.idea/dataSources.local.xml b/.idea/dataSources.local.xml
new file mode 100644
index 0000000..a0dc61f
--- /dev/null
+++ b/.idea/dataSources.local.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="dataSourceStorageLocal" created-in="RR-242.20224.309">
+    <data-source name="todo_baggins@localhost" uuid="1658668c-c2b8-426d-a22f-16fbad9eff0b">
+      <database-info product="PostgreSQL" version="16.4 (Debian 16.4-1.pgdg120+1)" jdbc-version="4.2" driver-name="PostgreSQL JDBC Driver" driver-version="42.6.0" dbms="POSTGRES" exact-version="16.4" exact-driver-version="42.6">
+        <identifier-quote-string>&quot;</identifier-quote-string>
+      </database-info>
+      <case-sensitivity plain-identifiers="lower" quoted-identifiers="exact" />
+      <secret-storage>master_key</secret-storage>
+      <user-name>app</user-name>
+      <schema-mapping>
+        <introspection-scope>
+          <node kind="database" qname="@">
+            <node kind="schema" qname="@" />
+          </node>
+        </introspection-scope>
+      </schema-mapping>
+    </data-source>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml
new file mode 100644
index 0000000..aa0cfde
--- /dev/null
+++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml
@@ -0,0 +1,4913 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dataSource name="todo_baggins@localhost">
+  <database-model serializer="dbm" dbms="POSTGRES" family-id="POSTGRES" format-version="4.53">
+    <root id="1">
+      <DateStyle>mdy</DateStyle>
+      <Grants>1||-9223372036854775808|c|G
+1||10|c|G
+1||10|C|G
+1||10|T|G
+4||-9223372036854775808|c|G
+4||10|c|G
+4||10|C|G
+4||10|T|G</Grants>
+      <IntrospectionStateNumber>745</IntrospectionStateNumber>
+      <ServerVersion>16.4</ServerVersion>
+      <StartupTime>1723806748</StartupTime>
+      <TimeZones>true ACDT
+true ACSST
+false ACST
+false ACT
+false ACWST
+true ADT
+true AEDT
+true AESST
+false AEST
+false AFT
+true AKDT
+false AKST
+true ALMST
+false ALMT
+false AMST
+false AMT
+false ANAST
+false ANAT
+false ARST
+false ART
+false AST
+true AWSST
+false AWST
+true AZOST
+false AZOT
+false AZST
+false AZT
+false Africa/Abidjan
+false Africa/Accra
+false Africa/Addis_Ababa
+false Africa/Algiers
+false Africa/Asmara
+false Africa/Asmera
+false Africa/Bamako
+false Africa/Bangui
+false Africa/Banjul
+false Africa/Bissau
+false Africa/Blantyre
+false Africa/Brazzaville
+false Africa/Bujumbura
+true Africa/Cairo
+false Africa/Casablanca
+true Africa/Ceuta
+false Africa/Conakry
+false Africa/Dakar
+false Africa/Dar_es_Salaam
+false Africa/Djibouti
+false Africa/Douala
+false Africa/El_Aaiun
+false Africa/Freetown
+false Africa/Gaborone
+false Africa/Harare
+false Africa/Johannesburg
+false Africa/Juba
+false Africa/Kampala
+false Africa/Khartoum
+false Africa/Kigali
+false Africa/Kinshasa
+false Africa/Lagos
+false Africa/Libreville
+false Africa/Lome
+false Africa/Luanda
+false Africa/Lubumbashi
+false Africa/Lusaka
+false Africa/Malabo
+false Africa/Maputo
+false Africa/Maseru
+false Africa/Mbabane
+false Africa/Mogadishu
+false Africa/Monrovia
+false Africa/Nairobi
+false Africa/Ndjamena
+false Africa/Niamey
+false Africa/Nouakchott
+false Africa/Ouagadougou
+false Africa/Porto-Novo
+false Africa/Sao_Tome
+false Africa/Timbuktu
+false Africa/Tripoli
+false Africa/Tunis
+false Africa/Windhoek
+true America/Adak
+true America/Anchorage
+false America/Anguilla
+false America/Antigua
+false America/Araguaina
+false America/Argentina/Buenos_Aires
+false America/Argentina/Catamarca
+false America/Argentina/ComodRivadavia
+false America/Argentina/Cordoba
+false America/Argentina/Jujuy
+false America/Argentina/La_Rioja
+false America/Argentina/Mendoza
+false America/Argentina/Rio_Gallegos
+false America/Argentina/Salta
+false America/Argentina/San_Juan
+false America/Argentina/San_Luis
+false America/Argentina/Tucuman
+false America/Argentina/Ushuaia
+false America/Aruba
+false America/Asuncion
+false America/Atikokan
+true America/Atka
+false America/Bahia
+false America/Bahia_Banderas
+false America/Barbados
+false America/Belem
+false America/Belize
+false America/Blanc-Sablon
+false America/Boa_Vista
+false America/Bogota
+true America/Boise
+false America/Buenos_Aires
+true America/Cambridge_Bay
+false America/Campo_Grande
+false America/Cancun
+false America/Caracas
+false America/Catamarca
+false America/Cayenne
+false America/Cayman
+true America/Chicago
+false America/Chihuahua
+true America/Ciudad_Juarez
+false America/Coral_Harbour
+false America/Cordoba
+false America/Costa_Rica
+false America/Creston
+false America/Cuiaba
+false America/Curacao
+false America/Danmarkshavn
+false America/Dawson
+false America/Dawson_Creek
+true America/Denver
+true America/Detroit
+false America/Dominica
+true America/Edmonton
+false America/Eirunepe
+false America/El_Salvador
+true America/Ensenada
+false America/Fort_Nelson
+true America/Fort_Wayne
+false America/Fortaleza
+true America/Glace_Bay
+true America/Godthab
+true America/Goose_Bay
+true America/Grand_Turk
+false America/Grenada
+false America/Guadeloupe
+false America/Guatemala
+false America/Guayaquil
+false America/Guyana
+true America/Halifax
+true America/Havana
+false America/Hermosillo
+true America/Indiana/Indianapolis
+true America/Indiana/Knox
+true America/Indiana/Marengo
+true America/Indiana/Petersburg
+true America/Indiana/Tell_City
+true America/Indiana/Vevay
+true America/Indiana/Vincennes
+true America/Indiana/Winamac
+true America/Indianapolis
+true America/Inuvik
+true America/Iqaluit
+false America/Jamaica
+false America/Jujuy
+true America/Juneau
+true America/Kentucky/Louisville
+true America/Kentucky/Monticello
+true America/Knox_IN
+false America/Kralendijk
+false America/La_Paz
+false America/Lima
+true America/Los_Angeles
+true America/Louisville
+false America/Lower_Princes
+false America/Maceio
+false America/Managua
+false America/Manaus
+false America/Marigot
+false America/Martinique
+true America/Matamoros
+false America/Mazatlan
+false America/Mendoza
+true America/Menominee
+false America/Merida
+true America/Metlakatla
+false America/Mexico_City
+true America/Miquelon
+true America/Moncton
+false America/Monterrey
+false America/Montevideo
+true America/Montreal
+false America/Montserrat
+true America/Nassau
+true America/New_York
+true America/Nipigon
+true America/Nome
+false America/Noronha
+true America/North_Dakota/Beulah
+true America/North_Dakota/Center
+true America/North_Dakota/New_Salem
+true America/Nuuk
+true America/Ojinaga
+false America/Panama
+true America/Pangnirtung
+false America/Paramaribo
+false America/Phoenix
+true America/Port-au-Prince
+false America/Port_of_Spain
+false America/Porto_Acre
+false America/Porto_Velho
+false America/Puerto_Rico
+false America/Punta_Arenas
+true America/Rainy_River
+true America/Rankin_Inlet
+false America/Recife
+false America/Regina
+true America/Resolute
+false America/Rio_Branco
+false America/Rosario
+true America/Santa_Isabel
+false America/Santarem
+false America/Santiago
+false America/Santo_Domingo
+false America/Sao_Paulo
+true America/Scoresbysund
+true America/Shiprock
+true America/Sitka
+false America/St_Barthelemy
+true America/St_Johns
+false America/St_Kitts
+false America/St_Lucia
+false America/St_Thomas
+false America/St_Vincent
+false America/Swift_Current
+false America/Tegucigalpa
+true America/Thule
+true America/Thunder_Bay
+true America/Tijuana
+true America/Toronto
+false America/Tortola
+true America/Vancouver
+false America/Virgin
+false America/Whitehorse
+true America/Winnipeg
+true America/Yakutat
+true America/Yellowknife
+false Antarctica/Casey
+false Antarctica/Davis
+false Antarctica/DumontDUrville
+false Antarctica/Macquarie
+false Antarctica/Mawson
+false Antarctica/McMurdo
+false Antarctica/Palmer
+false Antarctica/Rothera
+false Antarctica/South_Pole
+false Antarctica/Syowa
+true Antarctica/Troll
+false Antarctica/Vostok
+true Arctic/Longyearbyen
+false Asia/Aden
+false Asia/Almaty
+false Asia/Amman
+false Asia/Anadyr
+false Asia/Aqtau
+false Asia/Aqtobe
+false Asia/Ashgabat
+false Asia/Ashkhabad
+false Asia/Atyrau
+false Asia/Baghdad
+false Asia/Bahrain
+false Asia/Baku
+false Asia/Bangkok
+false Asia/Barnaul
+true Asia/Beirut
+false Asia/Bishkek
+false Asia/Brunei
+false Asia/Calcutta
+false Asia/Chita
+false Asia/Choibalsan
+false Asia/Chongqing
+false Asia/Chungking
+false Asia/Colombo
+false Asia/Dacca
+false Asia/Damascus
+false Asia/Dhaka
+false Asia/Dili
+false Asia/Dubai
+false Asia/Dushanbe
+true Asia/Famagusta
+true Asia/Gaza
+false Asia/Harbin
+true Asia/Hebron
+false Asia/Ho_Chi_Minh
+false Asia/Hong_Kong
+false Asia/Hovd
+false Asia/Irkutsk
+false Asia/Istanbul
+false Asia/Jakarta
+false Asia/Jayapura
+true Asia/Jerusalem
+false Asia/Kabul
+false Asia/Kamchatka
+false Asia/Karachi
+false Asia/Kashgar
+false Asia/Kathmandu
+false Asia/Katmandu
+false Asia/Khandyga
+false Asia/Kolkata
+false Asia/Krasnoyarsk
+false Asia/Kuala_Lumpur
+false Asia/Kuching
+false Asia/Kuwait
+false Asia/Macao
+false Asia/Macau
+false Asia/Magadan
+false Asia/Makassar
+false Asia/Manila
+false Asia/Muscat
+true Asia/Nicosia
+false Asia/Novokuznetsk
+false Asia/Novosibirsk
+false Asia/Omsk
+false Asia/Oral
+false Asia/Phnom_Penh
+false Asia/Pontianak
+false Asia/Pyongyang
+false Asia/Qatar
+false Asia/Qostanay
+false Asia/Qyzylorda
+false Asia/Rangoon
+false Asia/Riyadh
+false Asia/Saigon
+false Asia/Sakhalin
+false Asia/Samarkand
+false Asia/Seoul
+false Asia/Shanghai
+false Asia/Singapore
+false Asia/Srednekolymsk
+false Asia/Taipei
+false Asia/Tashkent
+false Asia/Tbilisi
+false Asia/Tehran
+true Asia/Tel_Aviv
+false Asia/Thimbu
+false Asia/Thimphu
+false Asia/Tokyo
+false Asia/Tomsk
+false Asia/Ujung_Pandang
+false Asia/Ulaanbaatar
+false Asia/Ulan_Bator
+false Asia/Urumqi
+false Asia/Ust-Nera
+false Asia/Vientiane
+false Asia/Vladivostok
+false Asia/Yakutsk
+false Asia/Yangon
+false Asia/Yekaterinburg
+false Asia/Yerevan
+true Atlantic/Azores
+true Atlantic/Bermuda
+true Atlantic/Canary
+false Atlantic/Cape_Verde
+true Atlantic/Faeroe
+true Atlantic/Faroe
+true Atlantic/Jan_Mayen
+true Atlantic/Madeira
+false Atlantic/Reykjavik
+false Atlantic/South_Georgia
+false Atlantic/St_Helena
+false Atlantic/Stanley
+false Australia/ACT
+false Australia/Adelaide
+false Australia/Brisbane
+false Australia/Broken_Hill
+false Australia/Canberra
+false Australia/Currie
+false Australia/Darwin
+false Australia/Eucla
+false Australia/Hobart
+false Australia/LHI
+false Australia/Lindeman
+false Australia/Lord_Howe
+false Australia/Melbourne
+false Australia/NSW
+false Australia/North
+false Australia/Perth
+false Australia/Queensland
+false Australia/South
+false Australia/Sydney
+false Australia/Tasmania
+false Australia/Victoria
+false Australia/West
+false Australia/Yancowinna
+true BDST
+false BDT
+false BNT
+false BORT
+false BOT
+false BRA
+true BRST
+false BRT
+true BST
+false BTT
+false Brazil/Acre
+false Brazil/DeNoronha
+false Brazil/East
+false Brazil/West
+true CADT
+false CAST
+false CCT
+true CDT
+true CEST
+false CET
+true CETDST
+true CHADT
+false CHAST
+false CHUT
+false CKT
+true CLST
+false CLT
+false COT
+false CST
+true CST6CDT
+false CXT
+true Canada/Atlantic
+true Canada/Central
+true Canada/Eastern
+true Canada/Mountain
+true Canada/Newfoundland
+true Canada/Pacific
+false Canada/Saskatchewan
+false Canada/Yukon
+false Chile/Continental
+false Chile/EasterIsland
+true Cuba
+false DAVT
+false DDUT
+false EASST
+false EAST
+false EAT
+true EDT
+true EEST
+false EET
+true EETDST
+true EGST
+false EGT
+false EST
+true EST5EDT
+true Egypt
+false Eire
+false Etc/GMT
+false Etc/GMT+0
+false Etc/GMT+1
+false Etc/GMT+10
+false Etc/GMT+11
+false Etc/GMT+12
+false Etc/GMT+2
+false Etc/GMT+3
+false Etc/GMT+4
+false Etc/GMT+5
+false Etc/GMT+6
+false Etc/GMT+7
+false Etc/GMT+8
+false Etc/GMT+9
+false Etc/GMT-0
+false Etc/GMT-1
+false Etc/GMT-10
+false Etc/GMT-11
+false Etc/GMT-12
+false Etc/GMT-13
+false Etc/GMT-14
+false Etc/GMT-2
+false Etc/GMT-3
+false Etc/GMT-4
+false Etc/GMT-5
+false Etc/GMT-6
+false Etc/GMT-7
+false Etc/GMT-8
+false Etc/GMT-9
+false Etc/GMT0
+false Etc/Greenwich
+false Etc/UCT
+false Etc/UTC
+false Etc/Universal
+false Etc/Zulu
+true Europe/Amsterdam
+true Europe/Andorra
+false Europe/Astrakhan
+true Europe/Athens
+true Europe/Belfast
+true Europe/Belgrade
+true Europe/Berlin
+true Europe/Bratislava
+true Europe/Brussels
+true Europe/Bucharest
+true Europe/Budapest
+true Europe/Busingen
+true Europe/Chisinau
+true Europe/Copenhagen
+false Europe/Dublin
+true Europe/Gibraltar
+true Europe/Guernsey
+true Europe/Helsinki
+true Europe/Isle_of_Man
+false Europe/Istanbul
+true Europe/Jersey
+false Europe/Kaliningrad
+true Europe/Kiev
+false Europe/Kirov
+true Europe/Kyiv
+true Europe/Lisbon
+true Europe/Ljubljana
+true Europe/London
+true Europe/Luxembourg
+true Europe/Madrid
+true Europe/Malta
+true Europe/Mariehamn
+false Europe/Minsk
+true Europe/Monaco
+false Europe/Moscow
+true Europe/Nicosia
+true Europe/Oslo
+true Europe/Paris
+true Europe/Podgorica
+true Europe/Prague
+true Europe/Riga
+true Europe/Rome
+false Europe/Samara
+true Europe/San_Marino
+true Europe/Sarajevo
+false Europe/Saratov
+false Europe/Simferopol
+true Europe/Skopje
+true Europe/Sofia
+true Europe/Stockholm
+true Europe/Tallinn
+true Europe/Tirane
+true Europe/Tiraspol
+false Europe/Ulyanovsk
+true Europe/Uzhgorod
+true Europe/Vaduz
+true Europe/Vatican
+true Europe/Vienna
+true Europe/Vilnius
+false Europe/Volgograd
+true Europe/Warsaw
+true Europe/Zagreb
+true Europe/Zaporozhye
+true Europe/Zurich
+false FET
+true FJST
+false FJT
+false FKST
+false FKT
+true FNST
+false FNT
+false Factory
+false GALT
+false GAMT
+true GB
+true GB-Eire
+false GEST
+false GET
+false GFT
+false GILT
+false GMT
+false GMT+0
+false GMT-0
+false GMT0
+false GYT
+false Greenwich
+false HKT
+false HST
+false Hongkong
+false ICT
+true IDT
+false IOT
+false IRKST
+false IRKT
+false IRT
+false IST
+false Iceland
+false Indian/Antananarivo
+false Indian/Chagos
+false Indian/Christmas
+false Indian/Cocos
+false Indian/Comoro
+false Indian/Kerguelen
+false Indian/Mahe
+false Indian/Maldives
+false Indian/Mauritius
+false Indian/Mayotte
+false Indian/Reunion
+false Iran
+true Israel
+false JAYT
+false JST
+false Jamaica
+false Japan
+true KDT
+true KGST
+false KGT
+false KOST
+false KRAST
+false KRAT
+false KST
+false Kwajalein
+false LHDT
+false LHST
+false LIGT
+false LINT
+false LKT
+false Libya
+false MAGST
+false MAGT
+false MART
+false MAWT
+true MDT
+true MEST
+true MESZ
+true MET
+true METDST
+false MEZ
+false MHT
+false MMT
+false MPT
+true MSD
+false MSK
+false MST
+true MST7MDT
+true MUST
+false MUT
+false MVT
+false MYT
+true Mexico/BajaNorte
+false Mexico/BajaSur
+false Mexico/General
+true NDT
+false NFT
+false NOVST
+false NOVT
+false NPT
+false NST
+false NUT
+false NZ
+false NZ-CHAT
+true NZDT
+false NZST
+false NZT
+true Navajo
+false OMSST
+false OMST
+true PDT
+false PET
+false PETST
+false PETT
+false PGT
+false PHT
+true PKST
+false PKT
+true PMDT
+false PMST
+false PONT
+false PRC
+false PST
+true PST8PDT
+false PWT
+true PYST
+false PYT
+false Pacific/Apia
+false Pacific/Auckland
+false Pacific/Bougainville
+false Pacific/Chatham
+false Pacific/Chuuk
+false Pacific/Easter
+false Pacific/Efate
+false Pacific/Enderbury
+false Pacific/Fakaofo
+false Pacific/Fiji
+false Pacific/Funafuti
+false Pacific/Galapagos
+false Pacific/Gambier
+false Pacific/Guadalcanal
+false Pacific/Guam
+false Pacific/Honolulu
+false Pacific/Johnston
+false Pacific/Kanton
+false Pacific/Kiritimati
+false Pacific/Kosrae
+false Pacific/Kwajalein
+false Pacific/Majuro
+false Pacific/Marquesas
+false Pacific/Midway
+false Pacific/Nauru
+false Pacific/Niue
+false Pacific/Norfolk
+false Pacific/Noumea
+false Pacific/Pago_Pago
+false Pacific/Palau
+false Pacific/Pitcairn
+false Pacific/Pohnpei
+false Pacific/Ponape
+false Pacific/Port_Moresby
+false Pacific/Rarotonga
+false Pacific/Saipan
+false Pacific/Samoa
+false Pacific/Tahiti
+false Pacific/Tarawa
+false Pacific/Tongatapu
+false Pacific/Truk
+false Pacific/Wake
+false Pacific/Wallis
+false Pacific/Yap
+true Poland
+true Portugal
+false RET
+false ROC
+false ROK
+true SADT
+false SAST
+false SCT
+false SGT
+false Singapore
+false TAHT
+false TFT
+false TJT
+false TKT
+false TMT
+false TOT
+false TRUT
+false TVT
+false Turkey
+false UCT
+true ULAST
+false ULAT
+true US/Alaska
+true US/Aleutian
+false US/Arizona
+true US/Central
+true US/East-Indiana
+true US/Eastern
+false US/Hawaii
+true US/Indiana-Starke
+true US/Michigan
+true US/Mountain
+true US/Pacific
+false US/Samoa
+false UT
+false UTC
+true UYST
+false UYT
+true UZST
+false UZT
+false Universal
+false VET
+false VLAST
+false VLAT
+false VOLT
+false VUT
+false W-SU
+true WADT
+false WAKT
+false WAST
+false WAT
+true WDT
+true WET
+true WETDST
+false WFT
+true WGST
+false WGT
+false XJT
+false YAKST
+false YAKT
+false YAPT
+true YEKST
+false YEKT
+false Z
+false Zulu
+false localtime
+false posix/Africa/Abidjan
+false posix/Africa/Accra
+false posix/Africa/Addis_Ababa
+false posix/Africa/Algiers
+false posix/Africa/Asmara
+false posix/Africa/Asmera
+false posix/Africa/Bamako
+false posix/Africa/Bangui
+false posix/Africa/Banjul
+false posix/Africa/Bissau
+false posix/Africa/Blantyre
+false posix/Africa/Brazzaville
+false posix/Africa/Bujumbura
+true posix/Africa/Cairo
+false posix/Africa/Casablanca
+true posix/Africa/Ceuta
+false posix/Africa/Conakry
+false posix/Africa/Dakar
+false posix/Africa/Dar_es_Salaam
+false posix/Africa/Djibouti
+false posix/Africa/Douala
+false posix/Africa/El_Aaiun
+false posix/Africa/Freetown
+false posix/Africa/Gaborone
+false posix/Africa/Harare
+false posix/Africa/Johannesburg
+false posix/Africa/Juba
+false posix/Africa/Kampala
+false posix/Africa/Khartoum
+false posix/Africa/Kigali
+false posix/Africa/Kinshasa
+false posix/Africa/Lagos
+false posix/Africa/Libreville
+false posix/Africa/Lome
+false posix/Africa/Luanda
+false posix/Africa/Lubumbashi
+false posix/Africa/Lusaka
+false posix/Africa/Malabo
+false posix/Africa/Maputo
+false posix/Africa/Maseru
+false posix/Africa/Mbabane
+false posix/Africa/Mogadishu
+false posix/Africa/Monrovia
+false posix/Africa/Nairobi
+false posix/Africa/Ndjamena
+false posix/Africa/Niamey
+false posix/Africa/Nouakchott
+false posix/Africa/Ouagadougou
+false posix/Africa/Porto-Novo
+false posix/Africa/Sao_Tome
+false posix/Africa/Timbuktu
+false posix/Africa/Tripoli
+false posix/Africa/Tunis
+false posix/Africa/Windhoek
+true posix/America/Adak
+true posix/America/Anchorage
+false posix/America/Anguilla
+false posix/America/Antigua
+false posix/America/Araguaina
+false posix/America/Argentina/Buenos_Aires
+false posix/America/Argentina/Catamarca
+false posix/America/Argentina/ComodRivadavia
+false posix/America/Argentina/Cordoba
+false posix/America/Argentina/Jujuy
+false posix/America/Argentina/La_Rioja
+false posix/America/Argentina/Mendoza
+false posix/America/Argentina/Rio_Gallegos
+false posix/America/Argentina/Salta
+false posix/America/Argentina/San_Juan
+false posix/America/Argentina/San_Luis
+false posix/America/Argentina/Tucuman
+false posix/America/Argentina/Ushuaia
+false posix/America/Aruba
+false posix/America/Asuncion
+false posix/America/Atikokan
+true posix/America/Atka
+false posix/America/Bahia
+false posix/America/Bahia_Banderas
+false posix/America/Barbados
+false posix/America/Belem
+false posix/America/Belize
+false posix/America/Blanc-Sablon
+false posix/America/Boa_Vista
+false posix/America/Bogota
+true posix/America/Boise
+false posix/America/Buenos_Aires
+true posix/America/Cambridge_Bay
+false posix/America/Campo_Grande
+false posix/America/Cancun
+false posix/America/Caracas
+false posix/America/Catamarca
+false posix/America/Cayenne
+false posix/America/Cayman
+true posix/America/Chicago
+false posix/America/Chihuahua
+true posix/America/Ciudad_Juarez
+false posix/America/Coral_Harbour
+false posix/America/Cordoba
+false posix/America/Costa_Rica
+false posix/America/Creston
+false posix/America/Cuiaba
+false posix/America/Curacao
+false posix/America/Danmarkshavn
+false posix/America/Dawson
+false posix/America/Dawson_Creek
+true posix/America/Denver
+true posix/America/Detroit
+false posix/America/Dominica
+true posix/America/Edmonton
+false posix/America/Eirunepe
+false posix/America/El_Salvador
+true posix/America/Ensenada
+false posix/America/Fort_Nelson
+true posix/America/Fort_Wayne
+false posix/America/Fortaleza
+true posix/America/Glace_Bay
+true posix/America/Godthab
+true posix/America/Goose_Bay
+true posix/America/Grand_Turk
+false posix/America/Grenada
+false posix/America/Guadeloupe
+false posix/America/Guatemala
+false posix/America/Guayaquil
+false posix/America/Guyana
+true posix/America/Halifax
+true posix/America/Havana
+false posix/America/Hermosillo
+true posix/America/Indiana/Indianapolis
+true posix/America/Indiana/Knox
+true posix/America/Indiana/Marengo
+true posix/America/Indiana/Petersburg
+true posix/America/Indiana/Tell_City
+true posix/America/Indiana/Vevay
+true posix/America/Indiana/Vincennes
+true posix/America/Indiana/Winamac
+true posix/America/Indianapolis
+true posix/America/Inuvik
+true posix/America/Iqaluit
+false posix/America/Jamaica
+false posix/America/Jujuy
+true posix/America/Juneau
+true posix/America/Kentucky/Louisville
+true posix/America/Kentucky/Monticello
+true posix/America/Knox_IN
+false posix/America/Kralendijk
+false posix/America/La_Paz
+false posix/America/Lima
+true posix/America/Los_Angeles
+true posix/America/Louisville
+false posix/America/Lower_Princes
+false posix/America/Maceio
+false posix/America/Managua
+false posix/America/Manaus
+false posix/America/Marigot
+false posix/America/Martinique
+true posix/America/Matamoros
+false posix/America/Mazatlan
+false posix/America/Mendoza
+true posix/America/Menominee
+false posix/America/Merida
+true posix/America/Metlakatla
+false posix/America/Mexico_City
+true posix/America/Miquelon
+true posix/America/Moncton
+false posix/America/Monterrey
+false posix/America/Montevideo
+true posix/America/Montreal
+false posix/America/Montserrat
+true posix/America/Nassau
+true posix/America/New_York
+true posix/America/Nipigon
+true posix/America/Nome
+false posix/America/Noronha
+true posix/America/North_Dakota/Beulah
+true posix/America/North_Dakota/Center
+true posix/America/North_Dakota/New_Salem
+true posix/America/Nuuk
+true posix/America/Ojinaga
+false posix/America/Panama
+true posix/America/Pangnirtung
+false posix/America/Paramaribo
+false posix/America/Phoenix
+true posix/America/Port-au-Prince
+false posix/America/Port_of_Spain
+false posix/America/Porto_Acre
+false posix/America/Porto_Velho
+false posix/America/Puerto_Rico
+false posix/America/Punta_Arenas
+true posix/America/Rainy_River
+true posix/America/Rankin_Inlet
+false posix/America/Recife
+false posix/America/Regina
+true posix/America/Resolute
+false posix/America/Rio_Branco
+false posix/America/Rosario
+true posix/America/Santa_Isabel
+false posix/America/Santarem
+false posix/America/Santiago
+false posix/America/Santo_Domingo
+false posix/America/Sao_Paulo
+true posix/America/Scoresbysund
+true posix/America/Shiprock
+true posix/America/Sitka
+false posix/America/St_Barthelemy
+true posix/America/St_Johns
+false posix/America/St_Kitts
+false posix/America/St_Lucia
+false posix/America/St_Thomas
+false posix/America/St_Vincent
+false posix/America/Swift_Current
+false posix/America/Tegucigalpa
+true posix/America/Thule
+true posix/America/Thunder_Bay
+true posix/America/Tijuana
+true posix/America/Toronto
+false posix/America/Tortola
+true posix/America/Vancouver
+false posix/America/Virgin
+false posix/America/Whitehorse
+true posix/America/Winnipeg
+true posix/America/Yakutat
+true posix/America/Yellowknife
+false posix/Antarctica/Casey
+false posix/Antarctica/Davis
+false posix/Antarctica/DumontDUrville
+false posix/Antarctica/Macquarie
+false posix/Antarctica/Mawson
+false posix/Antarctica/McMurdo
+false posix/Antarctica/Palmer
+false posix/Antarctica/Rothera
+false posix/Antarctica/South_Pole
+false posix/Antarctica/Syowa
+true posix/Antarctica/Troll
+false posix/Antarctica/Vostok
+true posix/Arctic/Longyearbyen
+false posix/Asia/Aden
+false posix/Asia/Almaty
+false posix/Asia/Amman
+false posix/Asia/Anadyr
+false posix/Asia/Aqtau
+false posix/Asia/Aqtobe
+false posix/Asia/Ashgabat
+false posix/Asia/Ashkhabad
+false posix/Asia/Atyrau
+false posix/Asia/Baghdad
+false posix/Asia/Bahrain
+false posix/Asia/Baku
+false posix/Asia/Bangkok
+false posix/Asia/Barnaul
+true posix/Asia/Beirut
+false posix/Asia/Bishkek
+false posix/Asia/Brunei
+false posix/Asia/Calcutta
+false posix/Asia/Chita
+false posix/Asia/Choibalsan
+false posix/Asia/Chongqing
+false posix/Asia/Chungking
+false posix/Asia/Colombo
+false posix/Asia/Dacca
+false posix/Asia/Damascus
+false posix/Asia/Dhaka
+false posix/Asia/Dili
+false posix/Asia/Dubai
+false posix/Asia/Dushanbe
+true posix/Asia/Famagusta
+true posix/Asia/Gaza
+false posix/Asia/Harbin
+true posix/Asia/Hebron
+false posix/Asia/Ho_Chi_Minh
+false posix/Asia/Hong_Kong
+false posix/Asia/Hovd
+false posix/Asia/Irkutsk
+false posix/Asia/Istanbul
+false posix/Asia/Jakarta
+false posix/Asia/Jayapura
+true posix/Asia/Jerusalem
+false posix/Asia/Kabul
+false posix/Asia/Kamchatka
+false posix/Asia/Karachi
+false posix/Asia/Kashgar
+false posix/Asia/Kathmandu
+false posix/Asia/Katmandu
+false posix/Asia/Khandyga
+false posix/Asia/Kolkata
+false posix/Asia/Krasnoyarsk
+false posix/Asia/Kuala_Lumpur
+false posix/Asia/Kuching
+false posix/Asia/Kuwait
+false posix/Asia/Macao
+false posix/Asia/Macau
+false posix/Asia/Magadan
+false posix/Asia/Makassar
+false posix/Asia/Manila
+false posix/Asia/Muscat
+true posix/Asia/Nicosia
+false posix/Asia/Novokuznetsk
+false posix/Asia/Novosibirsk
+false posix/Asia/Omsk
+false posix/Asia/Oral
+false posix/Asia/Phnom_Penh
+false posix/Asia/Pontianak
+false posix/Asia/Pyongyang
+false posix/Asia/Qatar
+false posix/Asia/Qostanay
+false posix/Asia/Qyzylorda
+false posix/Asia/Rangoon
+false posix/Asia/Riyadh
+false posix/Asia/Saigon
+false posix/Asia/Sakhalin
+false posix/Asia/Samarkand
+false posix/Asia/Seoul
+false posix/Asia/Shanghai
+false posix/Asia/Singapore
+false posix/Asia/Srednekolymsk
+false posix/Asia/Taipei
+false posix/Asia/Tashkent
+false posix/Asia/Tbilisi
+false posix/Asia/Tehran
+true posix/Asia/Tel_Aviv
+false posix/Asia/Thimbu
+false posix/Asia/Thimphu
+false posix/Asia/Tokyo
+false posix/Asia/Tomsk
+false posix/Asia/Ujung_Pandang
+false posix/Asia/Ulaanbaatar
+false posix/Asia/Ulan_Bator
+false posix/Asia/Urumqi
+false posix/Asia/Ust-Nera
+false posix/Asia/Vientiane
+false posix/Asia/Vladivostok
+false posix/Asia/Yakutsk
+false posix/Asia/Yangon
+false posix/Asia/Yekaterinburg
+false posix/Asia/Yerevan
+true posix/Atlantic/Azores
+true posix/Atlantic/Bermuda
+true posix/Atlantic/Canary
+false posix/Atlantic/Cape_Verde
+true posix/Atlantic/Faeroe
+true posix/Atlantic/Faroe
+true posix/Atlantic/Jan_Mayen
+true posix/Atlantic/Madeira
+false posix/Atlantic/Reykjavik
+false posix/Atlantic/South_Georgia
+false posix/Atlantic/St_Helena
+false posix/Atlantic/Stanley
+false posix/Australia/ACT
+false posix/Australia/Adelaide
+false posix/Australia/Brisbane
+false posix/Australia/Broken_Hill
+false posix/Australia/Canberra
+false posix/Australia/Currie
+false posix/Australia/Darwin
+false posix/Australia/Eucla
+false posix/Australia/Hobart
+false posix/Australia/LHI
+false posix/Australia/Lindeman
+false posix/Australia/Lord_Howe
+false posix/Australia/Melbourne
+false posix/Australia/NSW
+false posix/Australia/North
+false posix/Australia/Perth
+false posix/Australia/Queensland
+false posix/Australia/South
+false posix/Australia/Sydney
+false posix/Australia/Tasmania
+false posix/Australia/Victoria
+false posix/Australia/West
+false posix/Australia/Yancowinna
+false posix/Brazil/Acre
+false posix/Brazil/DeNoronha
+false posix/Brazil/East
+false posix/Brazil/West
+true posix/CET
+true posix/CST6CDT
+true posix/Canada/Atlantic
+true posix/Canada/Central
+true posix/Canada/Eastern
+true posix/Canada/Mountain
+true posix/Canada/Newfoundland
+true posix/Canada/Pacific
+false posix/Canada/Saskatchewan
+false posix/Canada/Yukon
+false posix/Chile/Continental
+false posix/Chile/EasterIsland
+true posix/Cuba
+true posix/EET
+false posix/EST
+true posix/EST5EDT
+true posix/Egypt
+false posix/Eire
+false posix/Etc/GMT
+false posix/Etc/GMT+0
+false posix/Etc/GMT+1
+false posix/Etc/GMT+10
+false posix/Etc/GMT+11
+false posix/Etc/GMT+12
+false posix/Etc/GMT+2
+false posix/Etc/GMT+3
+false posix/Etc/GMT+4
+false posix/Etc/GMT+5
+false posix/Etc/GMT+6
+false posix/Etc/GMT+7
+false posix/Etc/GMT+8
+false posix/Etc/GMT+9
+false posix/Etc/GMT-0
+false posix/Etc/GMT-1
+false posix/Etc/GMT-10
+false posix/Etc/GMT-11
+false posix/Etc/GMT-12
+false posix/Etc/GMT-13
+false posix/Etc/GMT-14
+false posix/Etc/GMT-2
+false posix/Etc/GMT-3
+false posix/Etc/GMT-4
+false posix/Etc/GMT-5
+false posix/Etc/GMT-6
+false posix/Etc/GMT-7
+false posix/Etc/GMT-8
+false posix/Etc/GMT-9
+false posix/Etc/GMT0
+false posix/Etc/Greenwich
+false posix/Etc/UCT
+false posix/Etc/UTC
+false posix/Etc/Universal
+false posix/Etc/Zulu
+true posix/Europe/Amsterdam
+true posix/Europe/Andorra
+false posix/Europe/Astrakhan
+true posix/Europe/Athens
+true posix/Europe/Belfast
+true posix/Europe/Belgrade
+true posix/Europe/Berlin
+true posix/Europe/Bratislava
+true posix/Europe/Brussels
+true posix/Europe/Bucharest
+true posix/Europe/Budapest
+true posix/Europe/Busingen
+true posix/Europe/Chisinau
+true posix/Europe/Copenhagen
+false posix/Europe/Dublin
+true posix/Europe/Gibraltar
+true posix/Europe/Guernsey
+true posix/Europe/Helsinki
+true posix/Europe/Isle_of_Man
+false posix/Europe/Istanbul
+true posix/Europe/Jersey
+false posix/Europe/Kaliningrad
+true posix/Europe/Kiev
+false posix/Europe/Kirov
+true posix/Europe/Kyiv
+true posix/Europe/Lisbon
+true posix/Europe/Ljubljana
+true posix/Europe/London
+true posix/Europe/Luxembourg
+true posix/Europe/Madrid
+true posix/Europe/Malta
+true posix/Europe/Mariehamn
+false posix/Europe/Minsk
+true posix/Europe/Monaco
+false posix/Europe/Moscow
+true posix/Europe/Nicosia
+true posix/Europe/Oslo
+true posix/Europe/Paris
+true posix/Europe/Podgorica
+true posix/Europe/Prague
+true posix/Europe/Riga
+true posix/Europe/Rome
+false posix/Europe/Samara
+true posix/Europe/San_Marino
+true posix/Europe/Sarajevo
+false posix/Europe/Saratov
+false posix/Europe/Simferopol
+true posix/Europe/Skopje
+true posix/Europe/Sofia
+true posix/Europe/Stockholm
+true posix/Europe/Tallinn
+true posix/Europe/Tirane
+true posix/Europe/Tiraspol
+false posix/Europe/Ulyanovsk
+true posix/Europe/Uzhgorod
+true posix/Europe/Vaduz
+true posix/Europe/Vatican
+true posix/Europe/Vienna
+true posix/Europe/Vilnius
+false posix/Europe/Volgograd
+true posix/Europe/Warsaw
+true posix/Europe/Zagreb
+true posix/Europe/Zaporozhye
+true posix/Europe/Zurich
+false posix/Factory
+true posix/GB
+true posix/GB-Eire
+false posix/GMT
+false posix/GMT+0
+false posix/GMT-0
+false posix/GMT0
+false posix/Greenwich
+false posix/HST
+false posix/Hongkong
+false posix/Iceland
+false posix/Indian/Antananarivo
+false posix/Indian/Chagos
+false posix/Indian/Christmas
+false posix/Indian/Cocos
+false posix/Indian/Comoro
+false posix/Indian/Kerguelen
+false posix/Indian/Mahe
+false posix/Indian/Maldives
+false posix/Indian/Mauritius
+false posix/Indian/Mayotte
+false posix/Indian/Reunion
+false posix/Iran
+true posix/Israel
+false posix/Jamaica
+false posix/Japan
+false posix/Kwajalein
+false posix/Libya
+true posix/MET
+false posix/MST
+true posix/MST7MDT
+true posix/Mexico/BajaNorte
+false posix/Mexico/BajaSur
+false posix/Mexico/General
+false posix/NZ
+false posix/NZ-CHAT
+true posix/Navajo
+false posix/PRC
+true posix/PST8PDT
+false posix/Pacific/Apia
+false posix/Pacific/Auckland
+false posix/Pacific/Bougainville
+false posix/Pacific/Chatham
+false posix/Pacific/Chuuk
+false posix/Pacific/Easter
+false posix/Pacific/Efate
+false posix/Pacific/Enderbury
+false posix/Pacific/Fakaofo
+false posix/Pacific/Fiji
+false posix/Pacific/Funafuti
+false posix/Pacific/Galapagos
+false posix/Pacific/Gambier
+false posix/Pacific/Guadalcanal
+false posix/Pacific/Guam
+false posix/Pacific/Honolulu
+false posix/Pacific/Johnston
+false posix/Pacific/Kanton
+false posix/Pacific/Kiritimati
+false posix/Pacific/Kosrae
+false posix/Pacific/Kwajalein
+false posix/Pacific/Majuro
+false posix/Pacific/Marquesas
+false posix/Pacific/Midway
+false posix/Pacific/Nauru
+false posix/Pacific/Niue
+false posix/Pacific/Norfolk
+false posix/Pacific/Noumea
+false posix/Pacific/Pago_Pago
+false posix/Pacific/Palau
+false posix/Pacific/Pitcairn
+false posix/Pacific/Pohnpei
+false posix/Pacific/Ponape
+false posix/Pacific/Port_Moresby
+false posix/Pacific/Rarotonga
+false posix/Pacific/Saipan
+false posix/Pacific/Samoa
+false posix/Pacific/Tahiti
+false posix/Pacific/Tarawa
+false posix/Pacific/Tongatapu
+false posix/Pacific/Truk
+false posix/Pacific/Wake
+false posix/Pacific/Wallis
+false posix/Pacific/Yap
+true posix/Poland
+true posix/Portugal
+false posix/ROC
+false posix/ROK
+false posix/Singapore
+false posix/Turkey
+false posix/UCT
+true posix/US/Alaska
+true posix/US/Aleutian
+false posix/US/Arizona
+true posix/US/Central
+true posix/US/East-Indiana
+true posix/US/Eastern
+false posix/US/Hawaii
+true posix/US/Indiana-Starke
+true posix/US/Michigan
+true posix/US/Mountain
+true posix/US/Pacific
+false posix/US/Samoa
+false posix/UTC
+false posix/Universal
+false posix/W-SU
+true posix/WET
+false posix/Zulu
+true posixrules
+</TimeZones>
+    </root>
+    <database id="2" parent="1" name="postgres">
+      <Comment>default administrative connection database</Comment>
+      <ObjectId>5</ObjectId>
+      <OwnerName>app</OwnerName>
+    </database>
+    <database id="3" parent="1" name="todo_baggins">
+      <Current>1</Current>
+      <Grants>11||10|C|G
+11||-9223372036854775808|U|G
+11||10|U|G
+2200||6171|C|G
+2200||-9223372036854775808|U|G
+2200||6171|U|G
+13212||10|C|G
+13212||-9223372036854775808|U|G
+13212||10|U|G</Grants>
+      <IntrospectionStateNumber>745</IntrospectionStateNumber>
+      <ObjectId>16384</ObjectId>
+      <OwnerName>app</OwnerName>
+    </database>
+    <role id="4" parent="1" name="app">
+      <BypassRls>1</BypassRls>
+      <CanLogin>1</CanLogin>
+      <CreateDb>1</CreateDb>
+      <CreateRole>1</CreateRole>
+      <ObjectId>10</ObjectId>
+      <Replication>1</Replication>
+      <SuperRole>1</SuperRole>
+    </role>
+    <role id="5" parent="1" name="pg_checkpoint">
+      <ObjectId>4544</ObjectId>
+    </role>
+    <role id="6" parent="1" name="pg_create_subscription">
+      <ObjectId>6304</ObjectId>
+    </role>
+    <role id="7" parent="1" name="pg_database_owner">
+      <ObjectId>6171</ObjectId>
+    </role>
+    <role id="8" parent="1" name="pg_execute_server_program">
+      <ObjectId>4571</ObjectId>
+    </role>
+    <role id="9" parent="1" name="pg_monitor">
+      <ObjectId>3373</ObjectId>
+      <RoleGrants>3374
+3375
+3377</RoleGrants>
+    </role>
+    <role id="10" parent="1" name="pg_read_all_data">
+      <ObjectId>6181</ObjectId>
+    </role>
+    <role id="11" parent="1" name="pg_read_all_settings">
+      <ObjectId>3374</ObjectId>
+    </role>
+    <role id="12" parent="1" name="pg_read_all_stats">
+      <ObjectId>3375</ObjectId>
+    </role>
+    <role id="13" parent="1" name="pg_read_server_files">
+      <ObjectId>4569</ObjectId>
+    </role>
+    <role id="14" parent="1" name="pg_signal_backend">
+      <ObjectId>4200</ObjectId>
+    </role>
+    <role id="15" parent="1" name="pg_stat_scan_tables">
+      <ObjectId>3377</ObjectId>
+    </role>
+    <role id="16" parent="1" name="pg_use_reserved_connections">
+      <ObjectId>4550</ObjectId>
+    </role>
+    <role id="17" parent="1" name="pg_write_all_data">
+      <ObjectId>6182</ObjectId>
+    </role>
+    <role id="18" parent="1" name="pg_write_server_files">
+      <ObjectId>4570</ObjectId>
+    </role>
+    <tablespace id="19" parent="1" name="pg_default">
+      <ObjectId>1663</ObjectId>
+      <StateNumber>1</StateNumber>
+      <OwnerName>app</OwnerName>
+    </tablespace>
+    <tablespace id="20" parent="1" name="pg_global">
+      <ObjectId>1664</ObjectId>
+      <StateNumber>1</StateNumber>
+      <OwnerName>app</OwnerName>
+    </tablespace>
+    <access-method id="21" parent="3" name="brin">
+      <Comment>block range index (BRIN) access method</Comment>
+      <ObjectId>3580</ObjectId>
+      <StateNumber>1</StateNumber>
+      <Type>index</Type>
+      <HandlerId>335</HandlerId>
+      <HandlerName>brinhandler</HandlerName>
+      <HandlerParentName>pg_catalog</HandlerParentName>
+    </access-method>
+    <access-method id="22" parent="3" name="btree">
+      <Comment>b-tree index access method</Comment>
+      <ObjectId>403</ObjectId>
+      <StateNumber>1</StateNumber>
+      <Type>index</Type>
+      <HandlerId>330</HandlerId>
+      <HandlerName>bthandler</HandlerName>
+      <HandlerParentName>pg_catalog</HandlerParentName>
+    </access-method>
+    <access-method id="23" parent="3" name="gin">
+      <Comment>GIN index access method</Comment>
+      <ObjectId>2742</ObjectId>
+      <StateNumber>1</StateNumber>
+      <Type>index</Type>
+      <HandlerId>333</HandlerId>
+      <HandlerName>ginhandler</HandlerName>
+      <HandlerParentName>pg_catalog</HandlerParentName>
+    </access-method>
+    <access-method id="24" parent="3" name="gist">
+      <Comment>GiST index access method</Comment>
+      <ObjectId>783</ObjectId>
+      <StateNumber>1</StateNumber>
+      <Type>index</Type>
+      <HandlerId>332</HandlerId>
+      <HandlerName>gisthandler</HandlerName>
+      <HandlerParentName>pg_catalog</HandlerParentName>
+    </access-method>
+    <access-method id="25" parent="3" name="hash">
+      <Comment>hash index access method</Comment>
+      <ObjectId>405</ObjectId>
+      <StateNumber>1</StateNumber>
+      <Type>index</Type>
+      <HandlerId>331</HandlerId>
+      <HandlerName>hashhandler</HandlerName>
+      <HandlerParentName>pg_catalog</HandlerParentName>
+    </access-method>
+    <access-method id="26" parent="3" name="heap">
+      <Comment>heap table access method</Comment>
+      <ObjectId>2</ObjectId>
+      <StateNumber>1</StateNumber>
+      <Type>table</Type>
+      <HandlerId>3</HandlerId>
+      <HandlerName>heap_tableam_handler</HandlerName>
+      <HandlerParentName>pg_catalog</HandlerParentName>
+    </access-method>
+    <access-method id="27" parent="3" name="spgist">
+      <Comment>SP-GiST index access method</Comment>
+      <ObjectId>4000</ObjectId>
+      <StateNumber>1</StateNumber>
+      <Type>index</Type>
+      <HandlerId>334</HandlerId>
+      <HandlerName>spghandler</HandlerName>
+      <HandlerParentName>pg_catalog</HandlerParentName>
+    </access-method>
+    <cast id="28" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10035</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2558</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>16</SourceTypeId>
+      <SourceTypeName>bool</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="29" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10201</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2971</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>16</SourceTypeId>
+      <SourceTypeName>bool</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="30" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10191</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2971</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>16</SourceTypeId>
+      <SourceTypeName>bool</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="31" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10196</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2971</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>16</SourceTypeId>
+      <SourceTypeName>bool</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="32" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10143</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>77</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>18</SourceTypeId>
+      <SourceTypeName>char</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="33" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10133</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>946</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>18</SourceTypeId>
+      <SourceTypeName>char</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="34" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10131</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>946</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>18</SourceTypeId>
+      <SourceTypeName>char</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="35" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10132</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>860</CastFunctionId>
+      <CastFunctionName>bpchar</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>18</SourceTypeId>
+      <SourceTypeName>char</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="36" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10135</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>408</CastFunctionId>
+      <CastFunctionName>bpchar</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>19</SourceTypeId>
+      <SourceTypeName>name</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="37" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10134</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>406</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>19</SourceTypeId>
+      <SourceTypeName>name</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="38" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10136</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1401</CastFunctionId>
+      <CastFunctionName>varchar</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>19</SourceTypeId>
+      <SourceTypeName>name</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="39" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10090</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2206</TargetTypeId>
+      <TargetTypeName>regtype</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="40" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10060</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2203</TargetTypeId>
+      <TargetTypeName>regoper</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="41" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10003</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>482</CastFunctionId>
+      <CastFunctionName>float8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>701</TargetTypeId>
+      <TargetTypeName>float8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="42" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10069</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2204</TargetTypeId>
+      <TargetTypeName>regoperator</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="43" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10001</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>480</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="44" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10044</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>24</TargetTypeId>
+      <TargetTypeName>regproc</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="45" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10113</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4096</TargetTypeId>
+      <TargetTypeName>regrole</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="46" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10120</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4089</TargetTypeId>
+      <TargetTypeName>regnamespace</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="47" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10002</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>652</CastFunctionId>
+      <CastFunctionName>float4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>700</TargetTypeId>
+      <TargetTypeName>float4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="48" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10104</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3769</TargetTypeId>
+      <TargetTypeName>regdictionary</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="49" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10083</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4191</TargetTypeId>
+      <TargetTypeName>regcollation</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="50" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10033</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3812</CastFunctionId>
+      <CastFunctionName>money</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>790</TargetTypeId>
+      <TargetTypeName>money</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="51" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10037</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="52" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10097</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3734</TargetTypeId>
+      <TargetTypeName>regconfig</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="53" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10000</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>714</CastFunctionId>
+      <CastFunctionName>int2</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>21</TargetTypeId>
+      <TargetTypeName>int2</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="54" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10185</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2075</CastFunctionId>
+      <CastFunctionName>bit</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1560</TargetTypeId>
+      <TargetTypeName>bit</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="55" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10004</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1781</CastFunctionId>
+      <CastFunctionName>numeric</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1700</TargetTypeId>
+      <TargetTypeName>numeric</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="56" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10053</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2202</TargetTypeId>
+      <TargetTypeName>regprocedure</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="57" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10076</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1287</CastFunctionId>
+      <CastFunctionName>oid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>20</SourceTypeId>
+      <SourceTypeName>int8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2205</TargetTypeId>
+      <TargetTypeName>regclass</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="58" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10045</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>24</TargetTypeId>
+      <TargetTypeName>regproc</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="59" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10091</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2206</TargetTypeId>
+      <TargetTypeName>regtype</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="60" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10084</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4191</TargetTypeId>
+      <TargetTypeName>regcollation</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="61" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10070</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2204</TargetTypeId>
+      <TargetTypeName>regoperator</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="62" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10038</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="63" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10009</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1782</CastFunctionId>
+      <CastFunctionName>numeric</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1700</TargetTypeId>
+      <TargetTypeName>numeric</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="64" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10077</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2205</TargetTypeId>
+      <TargetTypeName>regclass</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="65" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10006</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="66" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10054</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2202</TargetTypeId>
+      <TargetTypeName>regprocedure</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="67" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10007</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>236</CastFunctionId>
+      <CastFunctionName>float4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>700</TargetTypeId>
+      <TargetTypeName>float4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="68" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10005</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>754</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="69" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10114</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4096</TargetTypeId>
+      <TargetTypeName>regrole</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="70" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10008</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>235</CastFunctionId>
+      <CastFunctionName>float8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>701</TargetTypeId>
+      <TargetTypeName>float8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="71" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10105</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3769</TargetTypeId>
+      <TargetTypeName>regdictionary</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="72" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10121</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4089</TargetTypeId>
+      <TargetTypeName>regnamespace</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="73" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10061</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2203</TargetTypeId>
+      <TargetTypeName>regoper</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="74" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10098</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>313</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>21</SourceTypeId>
+      <SourceTypeName>int2</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3734</TargetTypeId>
+      <TargetTypeName>regconfig</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="75" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10078</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2205</TargetTypeId>
+      <TargetTypeName>regclass</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="76" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10085</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4191</TargetTypeId>
+      <TargetTypeName>regcollation</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="77" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10115</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4096</TargetTypeId>
+      <TargetTypeName>regrole</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="78" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10144</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>78</CastFunctionId>
+      <CastFunctionName>char</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>18</TargetTypeId>
+      <TargetTypeName>char</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="79" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10122</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4089</TargetTypeId>
+      <TargetTypeName>regnamespace</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="80" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10010</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>481</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="81" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10106</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3769</TargetTypeId>
+      <TargetTypeName>regdictionary</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="82" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10099</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3734</TargetTypeId>
+      <TargetTypeName>regconfig</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="83" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10011</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>314</CastFunctionId>
+      <CastFunctionName>int2</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>21</TargetTypeId>
+      <TargetTypeName>int2</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="84" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10092</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2206</TargetTypeId>
+      <TargetTypeName>regtype</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="85" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10071</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2204</TargetTypeId>
+      <TargetTypeName>regoperator</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="86" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10062</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2203</TargetTypeId>
+      <TargetTypeName>regoper</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="87" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10046</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>24</TargetTypeId>
+      <TargetTypeName>regproc</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="88" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10055</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2202</TargetTypeId>
+      <TargetTypeName>regprocedure</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="89" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10034</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2557</CastFunctionId>
+      <CastFunctionName>bool</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>16</TargetTypeId>
+      <TargetTypeName>bool</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="90" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10014</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1740</CastFunctionId>
+      <CastFunctionName>numeric</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1700</TargetTypeId>
+      <TargetTypeName>numeric</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="91" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10039</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="92" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10186</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1683</CastFunctionId>
+      <CastFunctionName>bit</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1560</TargetTypeId>
+      <TargetTypeName>bit</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="93" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10012</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>318</CastFunctionId>
+      <CastFunctionName>float4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>700</TargetTypeId>
+      <TargetTypeName>float4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="94" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10013</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>316</CastFunctionId>
+      <CastFunctionName>float8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>701</TargetTypeId>
+      <TargetTypeName>float8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="95" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10032</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3811</CastFunctionId>
+      <CastFunctionName>money</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>23</SourceTypeId>
+      <SourceTypeName>int4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>790</TargetTypeId>
+      <TargetTypeName>money</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="96" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10048</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>24</SourceTypeId>
+      <SourceTypeName>regproc</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="97" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10047</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>24</SourceTypeId>
+      <SourceTypeName>regproc</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="98" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10043</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>24</SourceTypeId>
+      <SourceTypeName>regproc</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="99" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10049</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>24</SourceTypeId>
+      <SourceTypeName>regproc</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2202</TargetTypeId>
+      <TargetTypeName>regprocedure</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="100" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10125</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>25</SourceTypeId>
+      <SourceTypeName>text</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="101" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10140</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>407</CastFunctionId>
+      <CastFunctionName>name</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>25</SourceTypeId>
+      <SourceTypeName>text</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>19</TargetTypeId>
+      <TargetTypeName>name</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="102" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10137</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>944</CastFunctionId>
+      <CastFunctionName>char</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>25</SourceTypeId>
+      <SourceTypeName>text</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>18</TargetTypeId>
+      <TargetTypeName>char</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="103" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10126</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>25</SourceTypeId>
+      <SourceTypeName>text</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="104" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10193</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2896</CastFunctionId>
+      <CastFunctionName>xml</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>25</SourceTypeId>
+      <SourceTypeName>text</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>142</TargetTypeId>
+      <TargetTypeName>xml</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="105" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10109</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1079</CastFunctionId>
+      <CastFunctionName>regclass</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>25</SourceTypeId>
+      <SourceTypeName>text</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2205</TargetTypeId>
+      <TargetTypeName>regclass</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="106" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10074</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2205</TargetTypeId>
+      <TargetTypeName>regclass</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="107" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10051</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2202</TargetTypeId>
+      <TargetTypeName>regprocedure</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="108" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10095</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3734</TargetTypeId>
+      <TargetTypeName>regconfig</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="109" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10058</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2203</TargetTypeId>
+      <TargetTypeName>regoper</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="110" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10081</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4191</TargetTypeId>
+      <TargetTypeName>regcollation</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="111" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10067</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2204</TargetTypeId>
+      <TargetTypeName>regoperator</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="112" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10042</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>24</TargetTypeId>
+      <TargetTypeName>regproc</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="113" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10040</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="114" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10111</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4096</TargetTypeId>
+      <TargetTypeName>regrole</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="115" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10102</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3769</TargetTypeId>
+      <TargetTypeName>regdictionary</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="116" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10088</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2206</TargetTypeId>
+      <TargetTypeName>regtype</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="117" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10041</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="118" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10118</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>26</SourceTypeId>
+      <SourceTypeName>oid</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4089</TargetTypeId>
+      <TargetTypeName>regnamespace</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="119" parent="3">
+      <Context>assignment</Context>
+      <Method>io</Method>
+      <ObjectId>10214</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>114</SourceTypeId>
+      <SourceTypeName>json</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>3802</TargetTypeId>
+      <TargetTypeName>jsonb</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="120" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10202</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>142</SourceTypeId>
+      <SourceTypeName>xml</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="121" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10197</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>142</SourceTypeId>
+      <SourceTypeName>xml</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="122" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10192</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>142</SourceTypeId>
+      <SourceTypeName>xml</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="123" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10145</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>194</SourceTypeId>
+      <SourceTypeName>pg_node_tree</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="124" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10165</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4091</CastFunctionId>
+      <CastFunctionName>box</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>600</SourceTypeId>
+      <SourceTypeName>point</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>603</TargetTypeId>
+      <TargetTypeName>box</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="125" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10166</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1532</CastFunctionId>
+      <CastFunctionName>point</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>601</SourceTypeId>
+      <SourceTypeName>lseg</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>600</TargetTypeId>
+      <TargetTypeName>point</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="126" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10167</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1449</CastFunctionId>
+      <CastFunctionName>polygon</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>602</SourceTypeId>
+      <SourceTypeName>path</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>604</TargetTypeId>
+      <TargetTypeName>polygon</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="127" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10168</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1534</CastFunctionId>
+      <CastFunctionName>point</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>603</SourceTypeId>
+      <SourceTypeName>box</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>600</TargetTypeId>
+      <TargetTypeName>point</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="128" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10171</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1479</CastFunctionId>
+      <CastFunctionName>circle</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>603</SourceTypeId>
+      <SourceTypeName>box</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>718</TargetTypeId>
+      <TargetTypeName>circle</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="129" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10169</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1541</CastFunctionId>
+      <CastFunctionName>lseg</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>603</SourceTypeId>
+      <SourceTypeName>box</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>601</TargetTypeId>
+      <TargetTypeName>lseg</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="130" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10170</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1448</CastFunctionId>
+      <CastFunctionName>polygon</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>603</SourceTypeId>
+      <SourceTypeName>box</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>604</TargetTypeId>
+      <TargetTypeName>polygon</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="131" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10172</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1540</CastFunctionId>
+      <CastFunctionName>point</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>604</SourceTypeId>
+      <SourceTypeName>polygon</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>600</TargetTypeId>
+      <TargetTypeName>point</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="132" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10175</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1474</CastFunctionId>
+      <CastFunctionName>circle</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>604</SourceTypeId>
+      <SourceTypeName>polygon</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>718</TargetTypeId>
+      <TargetTypeName>circle</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="133" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10174</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1446</CastFunctionId>
+      <CastFunctionName>box</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>604</SourceTypeId>
+      <SourceTypeName>polygon</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>603</TargetTypeId>
+      <TargetTypeName>box</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="134" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10173</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1447</CastFunctionId>
+      <CastFunctionName>path</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>604</SourceTypeId>
+      <SourceTypeName>polygon</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>602</TargetTypeId>
+      <TargetTypeName>path</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="135" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10194</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>730</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>650</SourceTypeId>
+      <SourceTypeName>cidr</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="136" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10199</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>730</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>650</SourceTypeId>
+      <SourceTypeName>cidr</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="137" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10189</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>730</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>650</SourceTypeId>
+      <SourceTypeName>cidr</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="138" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10181</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>650</SourceTypeId>
+      <SourceTypeName>cidr</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>869</TargetTypeId>
+      <TargetTypeName>inet</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="139" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10016</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>238</CastFunctionId>
+      <CastFunctionName>int2</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>700</SourceTypeId>
+      <SourceTypeName>float4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>21</TargetTypeId>
+      <TargetTypeName>int2</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="140" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10015</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>653</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>700</SourceTypeId>
+      <SourceTypeName>float4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="141" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10018</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>311</CastFunctionId>
+      <CastFunctionName>float8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>700</SourceTypeId>
+      <SourceTypeName>float4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>701</TargetTypeId>
+      <TargetTypeName>float8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="142" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10019</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1742</CastFunctionId>
+      <CastFunctionName>numeric</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>700</SourceTypeId>
+      <SourceTypeName>float4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1700</TargetTypeId>
+      <TargetTypeName>numeric</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="143" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10017</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>319</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>700</SourceTypeId>
+      <SourceTypeName>float4</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="144" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10024</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1743</CastFunctionId>
+      <CastFunctionName>numeric</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>701</SourceTypeId>
+      <SourceTypeName>float8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1700</TargetTypeId>
+      <TargetTypeName>numeric</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="145" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10020</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>483</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>701</SourceTypeId>
+      <SourceTypeName>float8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="146" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10021</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>237</CastFunctionId>
+      <CastFunctionName>int2</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>701</SourceTypeId>
+      <SourceTypeName>float8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>21</TargetTypeId>
+      <TargetTypeName>int2</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="147" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10022</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>317</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>701</SourceTypeId>
+      <SourceTypeName>float8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="148" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10023</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>312</CastFunctionId>
+      <CastFunctionName>float4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>701</SourceTypeId>
+      <SourceTypeName>float8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>700</TargetTypeId>
+      <TargetTypeName>float4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="149" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10178</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1544</CastFunctionId>
+      <CastFunctionName>polygon</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>718</SourceTypeId>
+      <SourceTypeName>circle</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>604</TargetTypeId>
+      <TargetTypeName>polygon</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="150" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10176</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1416</CastFunctionId>
+      <CastFunctionName>point</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>718</SourceTypeId>
+      <SourceTypeName>circle</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>600</TargetTypeId>
+      <TargetTypeName>point</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="151" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10177</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1480</CastFunctionId>
+      <CastFunctionName>box</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>718</SourceTypeId>
+      <SourceTypeName>circle</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>603</TargetTypeId>
+      <TargetTypeName>box</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="152" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10180</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4124</CastFunctionId>
+      <CastFunctionName>macaddr</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>774</SourceTypeId>
+      <SourceTypeName>macaddr8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>829</TargetTypeId>
+      <TargetTypeName>macaddr</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="153" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10030</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3823</CastFunctionId>
+      <CastFunctionName>numeric</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>790</SourceTypeId>
+      <SourceTypeName>money</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1700</TargetTypeId>
+      <TargetTypeName>numeric</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="154" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10179</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4123</CastFunctionId>
+      <CastFunctionName>macaddr8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>829</SourceTypeId>
+      <SourceTypeName>macaddr</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>774</TargetTypeId>
+      <TargetTypeName>macaddr8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="155" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10195</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>730</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>869</SourceTypeId>
+      <SourceTypeName>inet</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="156" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10190</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>730</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>869</SourceTypeId>
+      <SourceTypeName>inet</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="157" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10182</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1715</CastFunctionId>
+      <CastFunctionName>cidr</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>869</SourceTypeId>
+      <SourceTypeName>inet</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>650</TargetTypeId>
+      <TargetTypeName>cidr</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="158" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10200</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>730</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>869</SourceTypeId>
+      <SourceTypeName>inet</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="159" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10204</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>668</CastFunctionId>
+      <CastFunctionName>bpchar</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1042</SourceTypeId>
+      <SourceTypeName>bpchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="160" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10128</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>401</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1042</SourceTypeId>
+      <SourceTypeName>bpchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="161" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10203</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2896</CastFunctionId>
+      <CastFunctionName>xml</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1042</SourceTypeId>
+      <SourceTypeName>bpchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>142</TargetTypeId>
+      <TargetTypeName>xml</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="162" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10127</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>401</CastFunctionId>
+      <CastFunctionName>text</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1042</SourceTypeId>
+      <SourceTypeName>bpchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="163" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10138</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>944</CastFunctionId>
+      <CastFunctionName>char</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1042</SourceTypeId>
+      <SourceTypeName>bpchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>18</TargetTypeId>
+      <TargetTypeName>char</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="164" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10141</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>409</CastFunctionId>
+      <CastFunctionName>name</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1042</SourceTypeId>
+      <SourceTypeName>bpchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>19</TargetTypeId>
+      <TargetTypeName>name</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="165" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10129</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>1043</SourceTypeId>
+      <SourceTypeName>varchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="166" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10142</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1400</CastFunctionId>
+      <CastFunctionName>name</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1043</SourceTypeId>
+      <SourceTypeName>varchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>19</TargetTypeId>
+      <TargetTypeName>name</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="167" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10130</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>1043</SourceTypeId>
+      <SourceTypeName>varchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1042</TargetTypeId>
+      <TargetTypeName>bpchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="168" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10198</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2896</CastFunctionId>
+      <CastFunctionName>xml</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1043</SourceTypeId>
+      <SourceTypeName>varchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>142</TargetTypeId>
+      <TargetTypeName>xml</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="169" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10110</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1079</CastFunctionId>
+      <CastFunctionName>regclass</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1043</SourceTypeId>
+      <SourceTypeName>varchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2205</TargetTypeId>
+      <TargetTypeName>regclass</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="170" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10205</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>669</CastFunctionId>
+      <CastFunctionName>varchar</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1043</SourceTypeId>
+      <SourceTypeName>varchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1043</TargetTypeId>
+      <TargetTypeName>varchar</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="171" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10139</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>944</CastFunctionId>
+      <CastFunctionName>char</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1043</SourceTypeId>
+      <SourceTypeName>varchar</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>18</TargetTypeId>
+      <TargetTypeName>char</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="172" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10152</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2024</CastFunctionId>
+      <CastFunctionName>timestamp</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1082</SourceTypeId>
+      <SourceTypeName>date</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1114</TargetTypeId>
+      <TargetTypeName>timestamp</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="173" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10153</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1174</CastFunctionId>
+      <CastFunctionName>timestamptz</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1082</SourceTypeId>
+      <SourceTypeName>date</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1184</TargetTypeId>
+      <TargetTypeName>timestamptz</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="174" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10206</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1968</CastFunctionId>
+      <CastFunctionName>time</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1083</SourceTypeId>
+      <SourceTypeName>time</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1083</TargetTypeId>
+      <TargetTypeName>time</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="175" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10155</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2047</CastFunctionId>
+      <CastFunctionName>timetz</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1083</SourceTypeId>
+      <SourceTypeName>time</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1266</TargetTypeId>
+      <TargetTypeName>timetz</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="176" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10154</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1370</CastFunctionId>
+      <CastFunctionName>interval</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1083</SourceTypeId>
+      <SourceTypeName>time</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1186</TargetTypeId>
+      <TargetTypeName>interval</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="177" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10158</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2028</CastFunctionId>
+      <CastFunctionName>timestamptz</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1114</SourceTypeId>
+      <SourceTypeName>timestamp</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1184</TargetTypeId>
+      <TargetTypeName>timestamptz</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="178" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10156</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2029</CastFunctionId>
+      <CastFunctionName>date</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1114</SourceTypeId>
+      <SourceTypeName>timestamp</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1082</TargetTypeId>
+      <TargetTypeName>date</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="179" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10157</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1316</CastFunctionId>
+      <CastFunctionName>time</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1114</SourceTypeId>
+      <SourceTypeName>timestamp</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1083</TargetTypeId>
+      <TargetTypeName>time</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="180" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10207</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1961</CastFunctionId>
+      <CastFunctionName>timestamp</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1114</SourceTypeId>
+      <SourceTypeName>timestamp</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1114</TargetTypeId>
+      <TargetTypeName>timestamp</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="181" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10159</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1178</CastFunctionId>
+      <CastFunctionName>date</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1184</SourceTypeId>
+      <SourceTypeName>timestamptz</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1082</TargetTypeId>
+      <TargetTypeName>date</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="182" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10162</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1388</CastFunctionId>
+      <CastFunctionName>timetz</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1184</SourceTypeId>
+      <SourceTypeName>timestamptz</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1266</TargetTypeId>
+      <TargetTypeName>timetz</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="183" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10160</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2019</CastFunctionId>
+      <CastFunctionName>time</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1184</SourceTypeId>
+      <SourceTypeName>timestamptz</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1083</TargetTypeId>
+      <TargetTypeName>time</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="184" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10161</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2027</CastFunctionId>
+      <CastFunctionName>timestamp</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1184</SourceTypeId>
+      <SourceTypeName>timestamptz</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1114</TargetTypeId>
+      <TargetTypeName>timestamp</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="185" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10208</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1967</CastFunctionId>
+      <CastFunctionName>timestamptz</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1184</SourceTypeId>
+      <SourceTypeName>timestamptz</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1184</TargetTypeId>
+      <TargetTypeName>timestamptz</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="186" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10209</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1200</CastFunctionId>
+      <CastFunctionName>interval</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1186</SourceTypeId>
+      <SourceTypeName>interval</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1186</TargetTypeId>
+      <TargetTypeName>interval</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="187" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10163</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1419</CastFunctionId>
+      <CastFunctionName>time</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1186</SourceTypeId>
+      <SourceTypeName>interval</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1083</TargetTypeId>
+      <TargetTypeName>time</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="188" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10164</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2046</CastFunctionId>
+      <CastFunctionName>time</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1266</SourceTypeId>
+      <SourceTypeName>timetz</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1083</TargetTypeId>
+      <TargetTypeName>time</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="189" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10210</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1969</CastFunctionId>
+      <CastFunctionName>timetz</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1266</SourceTypeId>
+      <SourceTypeName>timetz</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1266</TargetTypeId>
+      <TargetTypeName>timetz</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="190" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10187</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2076</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1560</SourceTypeId>
+      <SourceTypeName>bit</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="191" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10211</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1685</CastFunctionId>
+      <CastFunctionName>bit</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1560</SourceTypeId>
+      <SourceTypeName>bit</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1560</TargetTypeId>
+      <TargetTypeName>bit</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="192" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10183</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>1560</SourceTypeId>
+      <SourceTypeName>bit</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1562</TargetTypeId>
+      <TargetTypeName>varbit</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="193" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10188</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1684</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1560</SourceTypeId>
+      <SourceTypeName>bit</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="194" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10184</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>1562</SourceTypeId>
+      <SourceTypeName>varbit</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1560</TargetTypeId>
+      <TargetTypeName>bit</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="195" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10212</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1687</CastFunctionId>
+      <CastFunctionName>varbit</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1562</SourceTypeId>
+      <SourceTypeName>varbit</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1562</TargetTypeId>
+      <TargetTypeName>varbit</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="196" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10025</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1779</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1700</SourceTypeId>
+      <SourceTypeName>numeric</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="197" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10026</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1783</CastFunctionId>
+      <CastFunctionName>int2</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1700</SourceTypeId>
+      <SourceTypeName>numeric</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>21</TargetTypeId>
+      <TargetTypeName>int2</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="198" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10027</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1744</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1700</SourceTypeId>
+      <SourceTypeName>numeric</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="199" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10213</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1703</CastFunctionId>
+      <CastFunctionName>numeric</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1700</SourceTypeId>
+      <SourceTypeName>numeric</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1700</TargetTypeId>
+      <TargetTypeName>numeric</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="200" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10029</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1746</CastFunctionId>
+      <CastFunctionName>float8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1700</SourceTypeId>
+      <SourceTypeName>numeric</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>701</TargetTypeId>
+      <TargetTypeName>float8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="201" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10031</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3824</CastFunctionId>
+      <CastFunctionName>money</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1700</SourceTypeId>
+      <SourceTypeName>numeric</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>790</TargetTypeId>
+      <TargetTypeName>money</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="202" parent="3">
+      <Context>implicit</Context>
+      <Method>function</Method>
+      <ObjectId>10028</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1745</CastFunctionId>
+      <CastFunctionName>float4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>1700</SourceTypeId>
+      <SourceTypeName>numeric</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>700</TargetTypeId>
+      <TargetTypeName>float4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="203" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10057</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2202</SourceTypeId>
+      <SourceTypeName>regprocedure</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="204" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10052</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2202</SourceTypeId>
+      <SourceTypeName>regprocedure</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="205" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10056</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>2202</SourceTypeId>
+      <SourceTypeName>regprocedure</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="206" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10050</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2202</SourceTypeId>
+      <SourceTypeName>regprocedure</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>24</TargetTypeId>
+      <TargetTypeName>regproc</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="207" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10065</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2203</SourceTypeId>
+      <SourceTypeName>regoper</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2204</TargetTypeId>
+      <TargetTypeName>regoperator</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="208" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10063</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>2203</SourceTypeId>
+      <SourceTypeName>regoper</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="209" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10059</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2203</SourceTypeId>
+      <SourceTypeName>regoper</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="210" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10064</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2203</SourceTypeId>
+      <SourceTypeName>regoper</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="211" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10073</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2204</SourceTypeId>
+      <SourceTypeName>regoperator</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="212" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10068</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2204</SourceTypeId>
+      <SourceTypeName>regoperator</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="213" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10072</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>2204</SourceTypeId>
+      <SourceTypeName>regoperator</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="214" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10066</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2204</SourceTypeId>
+      <SourceTypeName>regoperator</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>2203</TargetTypeId>
+      <TargetTypeName>regoper</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="215" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10079</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>2205</SourceTypeId>
+      <SourceTypeName>regclass</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="216" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10075</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2205</SourceTypeId>
+      <SourceTypeName>regclass</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="217" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10080</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2205</SourceTypeId>
+      <SourceTypeName>regclass</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="218" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10093</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>2206</SourceTypeId>
+      <SourceTypeName>regtype</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="219" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10094</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2206</SourceTypeId>
+      <SourceTypeName>regtype</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="220" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10089</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>2206</SourceTypeId>
+      <SourceTypeName>regtype</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="221" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10146</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3361</SourceTypeId>
+      <SourceTypeName>pg_ndistinct</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>17</TargetTypeId>
+      <TargetTypeName>bytea</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="222" parent="3">
+      <Context>implicit</Context>
+      <Method>io</Method>
+      <ObjectId>10147</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3361</SourceTypeId>
+      <SourceTypeName>pg_ndistinct</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="223" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10148</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3402</SourceTypeId>
+      <SourceTypeName>pg_dependencies</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>17</TargetTypeId>
+      <TargetTypeName>bytea</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="224" parent="3">
+      <Context>implicit</Context>
+      <Method>io</Method>
+      <ObjectId>10149</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3402</SourceTypeId>
+      <SourceTypeName>pg_dependencies</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="225" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10096</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3734</SourceTypeId>
+      <SourceTypeName>regconfig</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="226" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10100</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3734</SourceTypeId>
+      <SourceTypeName>regconfig</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="227" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10101</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3734</SourceTypeId>
+      <SourceTypeName>regconfig</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="228" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10103</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3769</SourceTypeId>
+      <SourceTypeName>regdictionary</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="229" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10108</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3769</SourceTypeId>
+      <SourceTypeName>regdictionary</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="230" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10107</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3769</SourceTypeId>
+      <SourceTypeName>regdictionary</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="231" parent="3">
+      <Context>assignment</Context>
+      <Method>io</Method>
+      <ObjectId>10215</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>3802</SourceTypeId>
+      <SourceTypeName>jsonb</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>114</TargetTypeId>
+      <TargetTypeName>json</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="232" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10218</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3450</CastFunctionId>
+      <CastFunctionName>int2</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3802</SourceTypeId>
+      <SourceTypeName>jsonb</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>21</TargetTypeId>
+      <TargetTypeName>int2</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="233" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10220</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3452</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3802</SourceTypeId>
+      <SourceTypeName>jsonb</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="234" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10219</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3451</CastFunctionId>
+      <CastFunctionName>int4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3802</SourceTypeId>
+      <SourceTypeName>jsonb</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="235" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10216</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3556</CastFunctionId>
+      <CastFunctionName>bool</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3802</SourceTypeId>
+      <SourceTypeName>jsonb</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>16</TargetTypeId>
+      <TargetTypeName>bool</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="236" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10221</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3453</CastFunctionId>
+      <CastFunctionName>float4</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3802</SourceTypeId>
+      <SourceTypeName>jsonb</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>700</TargetTypeId>
+      <TargetTypeName>float4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="237" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10217</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>3449</CastFunctionId>
+      <CastFunctionName>numeric</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3802</SourceTypeId>
+      <SourceTypeName>jsonb</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>1700</TargetTypeId>
+      <TargetTypeName>numeric</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="238" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10222</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>2580</CastFunctionId>
+      <CastFunctionName>float8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3802</SourceTypeId>
+      <SourceTypeName>jsonb</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>701</TargetTypeId>
+      <TargetTypeName>float8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="239" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10223</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4281</CastFunctionId>
+      <CastFunctionName>int4multirange</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3904</SourceTypeId>
+      <SourceTypeName>int4range</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4451</TargetTypeId>
+      <TargetTypeName>int4multirange</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="240" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10225</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4284</CastFunctionId>
+      <CastFunctionName>nummultirange</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3906</SourceTypeId>
+      <SourceTypeName>numrange</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4532</TargetTypeId>
+      <TargetTypeName>nummultirange</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="241" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10227</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4287</CastFunctionId>
+      <CastFunctionName>tsmultirange</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3908</SourceTypeId>
+      <SourceTypeName>tsrange</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4533</TargetTypeId>
+      <TargetTypeName>tsmultirange</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="242" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10228</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4290</CastFunctionId>
+      <CastFunctionName>tstzmultirange</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3910</SourceTypeId>
+      <SourceTypeName>tstzrange</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4534</TargetTypeId>
+      <TargetTypeName>tstzmultirange</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="243" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10226</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4293</CastFunctionId>
+      <CastFunctionName>datemultirange</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3912</SourceTypeId>
+      <SourceTypeName>daterange</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4535</TargetTypeId>
+      <TargetTypeName>datemultirange</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="244" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10224</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>4296</CastFunctionId>
+      <CastFunctionName>int8multirange</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>3926</SourceTypeId>
+      <SourceTypeName>int8range</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>4536</TargetTypeId>
+      <TargetTypeName>int8multirange</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="245" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10124</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>4089</SourceTypeId>
+      <SourceTypeName>regnamespace</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="246" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10123</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>4089</SourceTypeId>
+      <SourceTypeName>regnamespace</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="247" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10119</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>4089</SourceTypeId>
+      <SourceTypeName>regnamespace</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="248" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10117</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>4096</SourceTypeId>
+      <SourceTypeName>regrole</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="249" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10112</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>4096</SourceTypeId>
+      <SourceTypeName>regrole</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="250" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10116</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>4096</SourceTypeId>
+      <SourceTypeName>regrole</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="251" parent="3">
+      <Context>assignment</Context>
+      <Method>function</Method>
+      <ObjectId>10086</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>1288</CastFunctionId>
+      <CastFunctionName>int8</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>4191</SourceTypeId>
+      <SourceTypeName>regcollation</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>20</TargetTypeId>
+      <TargetTypeName>int8</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="252" parent="3">
+      <Context>assignment</Context>
+      <Method>binary</Method>
+      <ObjectId>10087</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>4191</SourceTypeId>
+      <SourceTypeName>regcollation</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>23</TargetTypeId>
+      <TargetTypeName>int4</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="253" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10082</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>4191</SourceTypeId>
+      <SourceTypeName>regcollation</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>26</TargetTypeId>
+      <TargetTypeName>oid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="254" parent="3">
+      <Context>implicit</Context>
+      <Method>binary</Method>
+      <ObjectId>10150</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>5017</SourceTypeId>
+      <SourceTypeName>pg_mcv_list</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>17</TargetTypeId>
+      <TargetTypeName>bytea</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="255" parent="3">
+      <Context>implicit</Context>
+      <Method>io</Method>
+      <ObjectId>10151</ObjectId>
+      <StateNumber>1</StateNumber>
+      <SourceTypeId>5017</SourceTypeId>
+      <SourceTypeName>pg_mcv_list</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>25</TargetTypeId>
+      <TargetTypeName>text</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <cast id="256" parent="3">
+      <Context>explicit</Context>
+      <Method>function</Method>
+      <ObjectId>10036</ObjectId>
+      <StateNumber>1</StateNumber>
+      <CastFunctionId>5071</CastFunctionId>
+      <CastFunctionName>xid</CastFunctionName>
+      <CastFunctionParentName>pg_catalog</CastFunctionParentName>
+      <SourceTypeId>5069</SourceTypeId>
+      <SourceTypeName>xid8</SourceTypeName>
+      <SourceTypeParentName>pg_catalog</SourceTypeParentName>
+      <TargetTypeId>28</TargetTypeId>
+      <TargetTypeName>xid</TargetTypeName>
+      <TargetTypeParentName>pg_catalog</TargetTypeParentName>
+    </cast>
+    <extension id="257" parent="3" name="plpgsql">
+      <Comment>PL/pgSQL procedural language</Comment>
+      <ObjectId>13564</ObjectId>
+      <StateNumber>684</StateNumber>
+      <Version>1.0</Version>
+      <ExtSchemaId>11</ExtSchemaId>
+      <ExtSchemaName>pg_catalog</ExtSchemaName>
+      <MemberIds>13565
+13566
+13567
+13568</MemberIds>
+    </extension>
+    <language id="258" parent="3" name="c">
+      <Comment>dynamically-loaded C functions</Comment>
+      <ObjectId>13</ObjectId>
+      <StateNumber>1</StateNumber>
+      <ValidatorName>fmgr_c_validator</ValidatorName>
+      <ValidatorSchema>pg_catalog</ValidatorSchema>
+    </language>
+    <language id="259" parent="3" name="internal">
+      <Comment>built-in functions</Comment>
+      <ObjectId>12</ObjectId>
+      <StateNumber>1</StateNumber>
+      <ValidatorName>fmgr_internal_validator</ValidatorName>
+      <ValidatorSchema>pg_catalog</ValidatorSchema>
+    </language>
+    <language id="260" parent="3" name="plpgsql">
+      <Comment>PL/pgSQL procedural language</Comment>
+      <HandlerName>plpgsql_call_handler</HandlerName>
+      <HandlerSchema>pg_catalog</HandlerSchema>
+      <InlineHandlerName>plpgsql_inline_handler</InlineHandlerName>
+      <InlineHandlerSchema>pg_catalog</InlineHandlerSchema>
+      <ObjectId>13568</ObjectId>
+      <StateNumber>684</StateNumber>
+      <Trusted>1</Trusted>
+      <ValidatorName>plpgsql_validator</ValidatorName>
+      <ValidatorSchema>pg_catalog</ValidatorSchema>
+    </language>
+    <language id="261" parent="3" name="sql">
+      <Comment>SQL-language functions</Comment>
+      <ObjectId>14</ObjectId>
+      <StateNumber>1</StateNumber>
+      <Trusted>1</Trusted>
+      <ValidatorName>fmgr_sql_validator</ValidatorName>
+      <ValidatorSchema>pg_catalog</ValidatorSchema>
+    </language>
+    <schema id="262" parent="3" name="information_schema">
+      <ObjectId>13212</ObjectId>
+      <StateNumber>530</StateNumber>
+      <OwnerName>app</OwnerName>
+    </schema>
+    <schema id="263" parent="3" name="pg_catalog">
+      <Comment>system catalog schema</Comment>
+      <ObjectId>11</ObjectId>
+      <StateNumber>524</StateNumber>
+      <OwnerName>app</OwnerName>
+    </schema>
+    <schema id="264" parent="3" name="public">
+      <Comment>standard public schema</Comment>
+      <Current>1</Current>
+      <IntrospectionStateNumber>745</IntrospectionStateNumber>
+      <LastIntrospectionLocalTimestamp>2024-08-16.11:25:02</LastIntrospectionLocalTimestamp>
+      <ObjectId>2200</ObjectId>
+      <StateNumber>524</StateNumber>
+      <OwnerName>pg_database_owner</OwnerName>
+    </schema>
+    <routine id="265" parent="264" name="diesel_manage_updated_at">
+      <ArgumentsDefinition>_tbl regclass</ArgumentsDefinition>
+      <ObjectId>16395</ObjectId>
+      <ResultsDefinition>void</ResultsDefinition>
+      <Rows>0.0</Rows>
+      <SourceTextLength>166</SourceTextLength>
+      <StateNumber>744</StateNumber>
+      <LanguageName>plpgsql</LanguageName>
+      <OwnerName>app</OwnerName>
+    </routine>
+    <routine id="266" parent="264" name="diesel_set_updated_at">
+      <ObjectId>16396</ObjectId>
+      <PgRoutineKind>pg-trigger</PgRoutineKind>
+      <ResultsDefinition>trigger</ResultsDefinition>
+      <Rows>0.0</Rows>
+      <SourceTextLength>201</SourceTextLength>
+      <StateNumber>744</StateNumber>
+      <LanguageName>plpgsql</LanguageName>
+      <OwnerName>app</OwnerName>
+    </routine>
+    <table id="267" parent="264" name="__diesel_schema_migrations">
+      <ObjectId>16389</ObjectId>
+      <StateNumber>743</StateNumber>
+      <AccessMethodId>2</AccessMethodId>
+      <OwnerName>app</OwnerName>
+    </table>
+    <argument id="268" parent="265">
+      <ArgumentDirection>R</ArgumentDirection>
+      <StoredType>void|0s</StoredType>
+    </argument>
+    <argument id="269" parent="265" name="_tbl">
+      <Position>1</Position>
+      <StoredType>regclass|0s</StoredType>
+    </argument>
+    <argument id="270" parent="266">
+      <ArgumentDirection>R</ArgumentDirection>
+      <StoredType>trigger|0s</StoredType>
+    </argument>
+    <column id="271" parent="267" name="version">
+      <NotNull>1</NotNull>
+      <Position>1</Position>
+      <StateNumber>743</StateNumber>
+      <StoredType>varchar(50)|0s</StoredType>
+      <TypeId>1043</TypeId>
+    </column>
+    <column id="272" parent="267" name="run_on">
+      <DefaultExpression>CURRENT_TIMESTAMP</DefaultExpression>
+      <NotNull>1</NotNull>
+      <Position>2</Position>
+      <StateNumber>743</StateNumber>
+      <StoredType>timestamp|0s</StoredType>
+      <TypeId>1114</TypeId>
+    </column>
+    <index id="273" parent="267" name="__diesel_schema_migrations_pkey">
+      <ColNames>version</ColNames>
+      <NameSurrogate>1</NameSurrogate>
+      <ObjectId>16393</ObjectId>
+      <Primary>1</Primary>
+      <StateNumber>743</StateNumber>
+      <Unique>1</Unique>
+      <AccessMethodId>403</AccessMethodId>
+      <CollationNames>default</CollationNames>
+      <CollationIds>100</CollationIds>
+      <CollationParentNames>pg_catalog</CollationParentNames>
+    </index>
+    <key id="274" parent="267" name="__diesel_schema_migrations_pkey">
+      <NameSurrogate>1</NameSurrogate>
+      <ObjectId>16394</ObjectId>
+      <Primary>1</Primary>
+      <StateNumber>743</StateNumber>
+      <UnderlyingIndexId>16393</UnderlyingIndexId>
+    </key>
+  </database-model>
+</dataSource>
\ No newline at end of file
diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta
new file mode 100644
index 0000000..be276c1
--- /dev/null
+++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg.meta
@@ -0,0 +1 @@
+#n:todo_baggins
\ No newline at end of file
diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta
new file mode 100644
index 0000000..1ff3db2
--- /dev/null
+++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/information_schema.FNRwLQ.meta
@@ -0,0 +1,2 @@
+#n:information_schema
+!<md> [null, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta
new file mode 100644
index 0000000..44e65b1
--- /dev/null
+++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/pg_catalog.0S1ZNQ.meta
@@ -0,0 +1,2 @@
+#n:pg_catalog
+!<md> [null, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta
new file mode 100644
index 0000000..f79bdf4
--- /dev/null
+++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta
@@ -0,0 +1,2 @@
+#n:public
+!<md> [745, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.zip
new file mode 100644
index 0000000000000000000000000000000000000000..e121a50396d96de4bbc8494c291cdcb8c65ff999
GIT binary patch
literal 1779
zcmbW1&2G~`5P;J^4i*Q5IP^HEMYWNeHg=LGO+jjtO=}hG;5f9Xsv<XWEQ8|&drc9~
zz=;cY&O8K<z_||s2QJJyZ5%s|NZDjYYkOvAXZG7^94{?%88#ljd+_Gl+pFGpoHN-(
z+42V=bv$dU>sW#1w)>`M+EzOpc1>z^+a}HWm!<H+&h{;8u6et&%(yjYm-j8Z<C;Mr
zaF6%;-RE%Tg{~_?F1Ni?E|%p&S%kBEPJ}{Ugd&rY2<5^^q#}N}Rx+CvMUW*lkmcMt
z`f-4xEkaXdx*lmwgjXV<#y6FbM$>KlpL2~w+N*zlG>;cD87AUg(hlCc9pA!QKri$<
z)ERg%s|0+TUbrx>0nTXXdjWhHINfOXuIbq!Ru_iu(8h&1GvL<OxdU>jsF49VCDoQe
zpf~XQCgnG(I@!lZLst$Di4K89Ck_S<NL|wjv>G*Lq^a;Eh*n{RnjB~aWWRa@x^@CL
zAsV_?CAAj%U#F8?oEJ8*o|unN;fPwR;65uHXS&q#=O{#6gTbYT9&`ZaaEJ>e59PG-
zbMFft29u|^97=La*^}z0k2{ws5R*0$g(><ri#r8b$`@sc(T6}4khl^)Fp)}(wUNTt
zQYiusIhFGgqwWT^sIc?n_Vw4p`>zo-Cc@mA&1Nl`B`=KGqP}C>mOmd}N*(wyAu2fm
zr3p2qX((#dfV!@|1nor)_SM>?Q8sP`%wE-uX`cz3$W;L2h>VbCAY!Nq3)p=IozV9!
zkG84Pw*qSRkqu^uq=8Z&&2?h5bd~x3o4~2^OkuaM_$V{G39jK0#p6ybaaJ?P#?7#C
zoQ$6CMRD}sxQV%=BQ5_CJbmX@$9aEVoDQBW?Bor+wQFQ~A)RdcCdBc2OY_EyGfnM>
Tg<HADGFZmn6<)Tb754NO|8({$

literal 0
HcmV?d00001

diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml
new file mode 100644
index 0000000..2dec4ae
--- /dev/null
+++ b/.idea/sqldialects.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="SqlDialectMappings">
+    <file url="file://$PROJECT_DIR$/migrations/00000000000000_diesel_initial_setup/down.sql" dialect="GenericSQL" />
+    <file url="file://$PROJECT_DIR$/migrations/00000000000000_diesel_initial_setup/up.sql" dialect="PostgreSQL" />
+    <file url="PROJECT" dialect="PostgreSQL" />
+  </component>
+</project>
\ No newline at end of file

From 472593bbc1ddf9f91cb994f1c68dbb507a038c7b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Fri, 16 Aug 2024 17:44:43 +0200
Subject: [PATCH 18/50] fix: Tailwind build in development

---
 .dockerignore                   |  1 -
 Dioxus.toml                     |  2 +-
 assets/styles/.gitignore        |  2 +-
 docker-compose-dev.yml          |  1 -
 docker/dev/app/Dockerfile       |  6 ++++--
 docker/dev/app/supervisord.conf | 23 +++++++++++++++++++++++
 6 files changed, 29 insertions(+), 6 deletions(-)
 create mode 100644 docker/dev/app/supervisord.conf

diff --git a/.dockerignore b/.dockerignore
index 1a4d15f..c41aef0 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -3,7 +3,6 @@
 /.github/
 /dist/
 /debug/
-/docker/
 /node_modules/
 /static/
 /target/
diff --git a/Dioxus.toml b/Dioxus.toml
index b99cf59..2e07cb6 100644
--- a/Dioxus.toml
+++ b/Dioxus.toml
@@ -31,7 +31,7 @@ watch_path = ["src", "assets"]
 
 # CSS style file
 
-style = ["/tailwind.css"]
+style = ["/styles/tailwind_output.css"]
 
 # Javascript code file
 script = []
diff --git a/assets/styles/.gitignore b/assets/styles/.gitignore
index ddeb771..c63c213 100644
--- a/assets/styles/.gitignore
+++ b/assets/styles/.gitignore
@@ -1 +1 @@
-tailwind_output.css
+/tailwind_output.css
diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
index 3b90249..43b704f 100644
--- a/docker-compose-dev.yml
+++ b/docker-compose-dev.yml
@@ -9,7 +9,6 @@ services:
       - /srv/app/.dioxus/
       - /srv/app/dist/
       - /srv/app/debug/
-      - /srv/app/docker/
       - /srv/app/node_modules/
       - /srv/app/static/
       - /srv/app/target/
diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index f992884..209098d 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -2,11 +2,13 @@ FROM rust:1.80-bookworm
 
 RUN rustup target add wasm32-unknown-unknown
 RUN cargo install dioxus-cli diesel_cli
-RUN apt-get update && apt-get install -y nodejs npm
+RUN apt-get update && apt-get install -y nodejs npm supervisor
 
 COPY . /srv/app
 WORKDIR /srv/app
 
 RUN npm install
 
-CMD npm run watch & dx serve --port 8000
+COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
+
+CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
diff --git a/docker/dev/app/supervisord.conf b/docker/dev/app/supervisord.conf
new file mode 100644
index 0000000..938f860
--- /dev/null
+++ b/docker/dev/app/supervisord.conf
@@ -0,0 +1,23 @@
+[supervisord]
+nodaemon=true
+logfile=/dev/null
+logfile_maxbytes=0
+pidfile=/dev/null
+
+[program:npm]
+command=npm run watch
+directory=/srv/app
+autostart=true
+autorestart=true
+stdout_logfile=/dev/fd/1
+stdout_logfile_maxbytes=0
+redirect_stderr=true
+
+[program:dx]
+command=dx serve --port 8000
+directory=/srv/app
+autostart=true
+autorestart=true
+stdout_logfile=/dev/fd/1
+stdout_logfile_maxbytes=0
+redirect_stderr=true

From cb68d5dd0d6385cc164ae56a4bd6fbc1484248bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 00:20:52 +0200
Subject: [PATCH 19/50] fix: Diesel configuration

---
 diesel.toml | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/diesel.toml b/diesel.toml
index 069f77a..06da47c 100644
--- a/diesel.toml
+++ b/diesel.toml
@@ -2,8 +2,5 @@
 # see https://diesel.rs/guides/configuring-diesel-cli
 
 [print_schema]
-file = "src/schema.rs"
+file = "src/schema/mod.rs"
 custom_type_derives = ["diesel::query_builder::QueryId", "Clone"]
-
-[migrations_directory]
-dir = "/home/matous/Documents/todo-baggins/migrations"

From 6b13e568402dfa1530734713ec90154d50bac2ee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 00:23:05 +0200
Subject: [PATCH 20/50] feat: add a project model

---
 .../2024-08-16-221326_create_projects/down.sql  |  2 ++
 .../2024-08-16-221326_create_projects/up.sql    |  6 ++++++
 src/models/mod.rs                               |  1 +
 src/models/project.rs                           | 17 +++++++++++++++++
 src/schema/mod.rs                               |  8 ++++++++
 5 files changed, 34 insertions(+)
 create mode 100644 migrations/2024-08-16-221326_create_projects/down.sql
 create mode 100644 migrations/2024-08-16-221326_create_projects/up.sql
 create mode 100644 src/models/mod.rs
 create mode 100644 src/models/project.rs
 create mode 100644 src/schema/mod.rs

diff --git a/migrations/2024-08-16-221326_create_projects/down.sql b/migrations/2024-08-16-221326_create_projects/down.sql
new file mode 100644
index 0000000..1884a8f
--- /dev/null
+++ b/migrations/2024-08-16-221326_create_projects/down.sql
@@ -0,0 +1,2 @@
+-- This file should undo anything in `up.sql`
+DROP TABLE IF EXISTS "projects";
diff --git a/migrations/2024-08-16-221326_create_projects/up.sql b/migrations/2024-08-16-221326_create_projects/up.sql
new file mode 100644
index 0000000..1bddc94
--- /dev/null
+++ b/migrations/2024-08-16-221326_create_projects/up.sql
@@ -0,0 +1,6 @@
+-- Your SQL goes here
+CREATE TABLE "projects"(
+	"id" SERIAL NOT NULL PRIMARY KEY,
+	"title" TEXT NOT NULL
+);
+
diff --git a/src/models/mod.rs b/src/models/mod.rs
new file mode 100644
index 0000000..dfc721a
--- /dev/null
+++ b/src/models/mod.rs
@@ -0,0 +1 @@
+pub(crate) mod project;
diff --git a/src/models/project.rs b/src/models/project.rs
new file mode 100644
index 0000000..8bed447
--- /dev/null
+++ b/src/models/project.rs
@@ -0,0 +1,17 @@
+use crate::schema::projects;
+use diesel::prelude::*;
+use serde::{Deserialize, Serialize};
+
+#[derive(Queryable, Selectable, Serialize, Deserialize)]
+#[diesel(table_name = crate::schema::projects)]
+#[diesel(check_for_backend(diesel::pg::Pg))]
+pub struct Project {
+    pub(crate) id: i32,
+    pub(crate) title: String,
+}
+
+#[derive(Insertable, Serialize, Deserialize)]
+#[diesel(table_name = projects)]
+pub struct NewProject<'a> {
+    pub title: &'a str,
+}
diff --git a/src/schema/mod.rs b/src/schema/mod.rs
new file mode 100644
index 0000000..6ad8716
--- /dev/null
+++ b/src/schema/mod.rs
@@ -0,0 +1,8 @@
+// @generated automatically by Diesel CLI.
+
+diesel::table! {
+    projects (id) {
+        id -> Int4,
+        title -> Text,
+    }
+}

From 97c977917046efeebe8a23c1380b0bceff8d9d6a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 00:30:17 +0200
Subject: [PATCH 21/50] feat: switch Dioxus to fullstack, add a form for
 creating a project

---
 Cargo.lock                        | 829 +++++++++++++++++++++++++++++-
 Cargo.toml                        |   9 +-
 Dioxus.toml                       |   2 +-
 docker/dev/app/supervisord.conf   |   2 +-
 src/components/app.rs             |  11 +
 src/components/form_project.rs    |  23 +
 src/components/home.rs            |  18 +
 src/components/mod.rs             |   3 +
 src/main.rs                       |  54 +-
 src/route/mod.rs                  |   8 +
 src/server/database_connection.rs |  12 +
 src/server/mod.rs                 |   2 +
 src/server/projects.rs            |  21 +
 13 files changed, 944 insertions(+), 50 deletions(-)
 create mode 100644 src/components/app.rs
 create mode 100644 src/components/form_project.rs
 create mode 100644 src/components/home.rs
 create mode 100644 src/components/mod.rs
 create mode 100644 src/route/mod.rs
 create mode 100644 src/server/database_connection.rs
 create mode 100644 src/server/mod.rs
 create mode 100644 src/server/projects.rs

diff --git a/Cargo.lock b/Cargo.lock
index bc6232d..282fb31 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2,6 +2,21 @@
 # It is not intended for manual editing.
 version = 3
 
+[[package]]
+name = "addr2line"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
 [[package]]
 name = "ahash"
 version = "0.8.11"
@@ -20,12 +35,39 @@ version = "0.2.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
 
+[[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 = "anymap"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33954243bd79057c2de7338850b85983a44588021f8a5fee574a8888c6de4344"
+
 [[package]]
 name = "anymap2"
 version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d301b3b94cb4b2f23d7917810addbbaff90738e0ca2be692bd027e70d7e0330c"
 
+[[package]]
+name = "askama_escape"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
+
 [[package]]
 name = "async-channel"
 version = "2.3.1"
@@ -67,6 +109,93 @@ version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
 
+[[package]]
+name = "axum"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a6c9af12842a67734c9a2e355436e5d03b22383ed60cf13cd0c18fbfe3dcbcf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "axum-macros",
+ "base64",
+ "bytes",
+ "futures-util",
+ "http 1.1.0",
+ "http-body",
+ "http-body-util",
+ "hyper",
+ "hyper-util",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "multer",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_urlencoded",
+ "sha1",
+ "sync_wrapper 1.0.1",
+ "tokio",
+ "tokio-tungstenite",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15c63fd72d41492dc4f497196f5da1fb04fb7529e631d73630d1b491e47a2e3"
+dependencies = [
+ "async-trait",
+ "bytes",
+ "futures-util",
+ "http 1.1.0",
+ "http-body",
+ "http-body-util",
+ "mime",
+ "pin-project-lite",
+ "rustversion",
+ "sync_wrapper 0.1.2",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "axum-macros"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00c055ee2d014ae5981ce1016374e8213682aa14d9bf40e48ab48b5f3ef20eaa"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
 [[package]]
 name = "base64"
 version = "0.21.7"
@@ -91,6 +220,15 @@ dependencies = [
  "serde",
 ]
 
+[[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 = "blocking"
 version = "1.6.1"
@@ -154,6 +292,15 @@ dependencies = [
  "thiserror",
 ]
 
+[[package]]
+name = "cc"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68064e60dbf1f17005c2fde4d07c16d8baa506fd7ffed8ccab702d93617975c7"
+dependencies = [
+ "shlex",
+]
+
 [[package]]
 name = "cfg-expr"
 version = "0.15.8"
@@ -169,6 +316,20 @@ version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
+[[package]]
+name = "chrono"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "wasm-bindgen",
+ "windows-targets",
+]
+
 [[package]]
 name = "ciborium"
 version = "0.2.2"
@@ -250,6 +411,21 @@ dependencies = [
  "unicode-segmentation",
 ]
 
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51e852e6dc9a5bed1fae92dd2375037bf2b768725bf3be87811edee3249d09ad"
+dependencies = [
+ "libc",
+]
+
 [[package]]
 name = "crossbeam-utils"
 version = "0.8.20"
@@ -262,6 +438,16 @@ version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
 
+[[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 = "darling"
 version = "0.20.10"
@@ -310,6 +496,12 @@ dependencies = [
  "parking_lot_core",
 ]
 
+[[package]]
+name = "data-encoding"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2"
+
 [[package]]
 name = "diesel"
 version = "2.2.2"
@@ -345,6 +537,16 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
 [[package]]
 name = "dioxus"
 version = "0.5.6"
@@ -358,9 +560,12 @@ dependencies = [
  "dioxus-hooks",
  "dioxus-hot-reload",
  "dioxus-html",
+ "dioxus-liveview",
  "dioxus-router",
  "dioxus-signals",
+ "dioxus-ssr",
  "dioxus-web",
+ "serde",
 ]
 
 [[package]]
@@ -430,20 +635,35 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b80f0ac18166302341164e681322e0385131c08a11c3cc1c51ee8df799ab0d3d"
 dependencies = [
+ "anymap",
  "async-trait",
+ "axum",
  "base64",
  "bytes",
  "ciborium",
+ "dioxus-cli-config",
  "dioxus-hot-reload",
  "dioxus-lib",
+ "dioxus-ssr",
  "dioxus-web",
  "dioxus_server_macro",
  "futures-util",
+ "http 1.1.0",
+ "hyper",
  "once_cell",
+ "pin-project",
  "serde",
  "serde_json",
  "server_fn",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tower",
+ "tower-http",
+ "tower-layer",
  "tracing",
+ "tracing-futures",
  "web-sys",
 ]
 
@@ -519,6 +739,8 @@ version = "0.5.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "351fad098c657d14f3ac2900362d2b86e83c22c4c620a404839e1ab628f3395b"
 dependencies = [
+ "dioxus-core",
+ "dioxus-html",
  "js-sys",
  "md5",
  "sledgehammer_bindgen",
@@ -542,6 +764,32 @@ dependencies = [
  "dioxus-signals",
 ]
 
+[[package]]
+name = "dioxus-liveview"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ada18a8fe0764f492fd4fb169b818877799e887dbb6ffb19289801d924faf18"
+dependencies = [
+ "axum",
+ "dioxus-cli-config",
+ "dioxus-core",
+ "dioxus-hot-reload",
+ "dioxus-html",
+ "dioxus-interpreter-js",
+ "futures-channel",
+ "futures-util",
+ "generational-box",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "slab",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tracing",
+]
+
 [[package]]
 name = "dioxus-logger"
 version = "0.5.1"
@@ -561,11 +809,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c235c5dbeb528c0c2b0424763da812e7500df69b82eddac54db6f4975e065c5f"
 dependencies = [
  "dioxus-cli-config",
+ "dioxus-fullstack",
  "dioxus-lib",
  "dioxus-router-macro",
+ "dioxus-ssr",
  "gloo",
  "gloo-utils 0.1.7",
  "js-sys",
+ "tokio",
  "tracing",
  "url",
  "urlencoding",
@@ -616,6 +867,27 @@ dependencies = [
  "tracing",
 ]
 
+[[package]]
+name = "dioxus-ssr"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "753b1eb29372bb3afcdbc0ac603893802a8b7b70fa94b86a1641408e2b87173b"
+dependencies = [
+ "askama_escape",
+ "async-trait",
+ "chrono",
+ "dioxus-core",
+ "dioxus-html",
+ "generational-box",
+ "http 1.1.0",
+ "lru",
+ "rustc-hash",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
 [[package]]
 name = "dioxus-web"
 version = "0.5.6"
@@ -654,6 +926,12 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "dotenvy"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
+
 [[package]]
 name = "dsl_auto_type"
 version = "0.1.2"
@@ -662,7 +940,7 @@ checksum = "c5d9abe6314103864cc2d8901b7ae224e0ab1a103a0a416661b4097b0779b607"
 dependencies = [
  "darling",
  "either",
- "heck",
+ "heck 0.5.0",
  "proc-macro2",
  "quote",
  "syn",
@@ -674,6 +952,15 @@ version = "1.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
 
+[[package]]
+name = "encoding_rs"
+version = "0.8.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59"
+dependencies = [
+ "cfg-if",
+]
+
 [[package]]
 name = "enumset"
 version = "1.1.5"
@@ -867,6 +1154,33 @@ dependencies = [
  "parking_lot",
 ]
 
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gimli"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
+
 [[package]]
 name = "gloo"
 version = "0.8.1"
@@ -1087,12 +1401,24 @@ dependencies = [
  "allocator-api2",
 ]
 
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
 [[package]]
 name = "heck"
 version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
 
+[[package]]
+name = "hermit-abi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+
 [[package]]
 name = "http"
 version = "0.2.12"
@@ -1115,6 +1441,104 @@ dependencies = [
  "itoa",
 ]
 
+[[package]]
+name = "http-body"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
+dependencies = [
+ "bytes",
+ "http 1.1.0",
+]
+
+[[package]]
+name = "http-body-util"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f"
+dependencies = [
+ "bytes",
+ "futures-util",
+ "http 1.1.0",
+ "http-body",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08a397c49fec283e3d6211adbe480be95aae5f304cfb923e9970e08956d5168a"
+
+[[package]]
+name = "httparse"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "hyper"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-util",
+ "http 1.1.0",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
+ "tokio",
+]
+
+[[package]]
+name = "hyper-util"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9"
+dependencies = [
+ "bytes",
+ "futures-util",
+ "http 1.1.0",
+ "http-body",
+ "hyper",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[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 = "ident_case"
 version = "1.0.1"
@@ -1177,6 +1601,12 @@ version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9"
 
+[[package]]
+name = "inventory"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767"
+
 [[package]]
 name = "itoa"
 version = "1.0.11"
@@ -1259,6 +1689,12 @@ dependencies = [
  "hashbrown",
 ]
 
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
 [[package]]
 name = "md5"
 version = "0.7.0"
@@ -1271,6 +1707,60 @@ version = "2.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
 
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "multer"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b"
+dependencies = [
+ "bytes",
+ "encoding_rs",
+ "futures-util",
+ "http 1.1.0",
+ "httparse",
+ "memchr",
+ "mime",
+ "spin",
+ "version_check",
+]
+
 [[package]]
 name = "nu-ansi-term"
 version = "0.46.0"
@@ -1290,6 +1780,15 @@ dependencies = [
  "autocfg",
 ]
 
+[[package]]
+name = "object"
+version = "0.36.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9"
+dependencies = [
+ "memchr",
+]
+
 [[package]]
 name = "once_cell"
 version = "1.19.0"
@@ -1399,6 +1898,15 @@ dependencies = [
  "futures-io",
 ]
 
+[[package]]
+name = "ppv-lite86"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+dependencies = [
+ "zerocopy",
+]
+
 [[package]]
 name = "pq-sys"
 version = "0.6.1"
@@ -1436,6 +1944,36 @@ dependencies = [
  "proc-macro2",
 ]
 
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
 [[package]]
 name = "redox_syscall"
 version = "0.5.3"
@@ -1445,6 +1983,12 @@ dependencies = [
  "bitflags",
 ]
 
+[[package]]
+name = "rustc-demangle"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
+
 [[package]]
 name = "rustc-hash"
 version = "1.1.0"
@@ -1460,6 +2004,12 @@ dependencies = [
  "semver",
 ]
 
+[[package]]
+name = "rustversion"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6"
+
 [[package]]
 name = "ryu"
 version = "1.0.18"
@@ -1492,9 +2042,9 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.207"
+version = "1.0.208"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5665e14a49a4ea1b91029ba7d3bca9f299e1f7cfa194388ccc20f14743e784f2"
+checksum = "cff085d2cb684faa248efb494c39b68e522822ac0de72ccf08109abde717cfb2"
 dependencies = [
  "serde_derive",
 ]
@@ -1522,9 +2072,9 @@ dependencies = [
 
 [[package]]
 name = "serde_derive"
-version = "1.0.207"
+version = "1.0.208"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6aea2634c86b0e8ef2cfdc0c340baede54ec27b1e46febd7f80dffb2aa44a00e"
+checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1543,6 +2093,16 @@ dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
 [[package]]
 name = "serde_qs"
 version = "0.12.0"
@@ -1583,12 +2143,16 @@ version = "0.6.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "024b400db1aca5bd4188714f7bbbf7a2e1962b9a12a80b2a21e937e509086963"
 dependencies = [
+ "axum",
  "bytes",
  "const_format",
  "dashmap",
  "futures",
  "gloo-net 0.6.0",
  "http 1.1.0",
+ "http-body-util",
+ "hyper",
+ "inventory",
  "js-sys",
  "once_cell",
  "send_wrapper",
@@ -1597,6 +2161,8 @@ dependencies = [
  "serde_qs",
  "server_fn_macro_default",
  "thiserror",
+ "tower",
+ "tower-layer",
  "url",
  "wasm-bindgen",
  "wasm-bindgen-futures",
@@ -1629,6 +2195,17 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
 [[package]]
 name = "sharded-slab"
 version = "0.1.7"
@@ -1638,6 +2215,21 @@ dependencies = [
  "lazy_static",
 ]
 
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
+dependencies = [
+ "libc",
+]
+
 [[package]]
 name = "slab"
 version = "0.4.9"
@@ -1694,6 +2286,22 @@ version = "1.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
 
+[[package]]
+name = "socket2"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
 [[package]]
 name = "spinning"
 version = "0.1.0"
@@ -1720,6 +2328,18 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "sync_wrapper"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394"
+
 [[package]]
 name = "thiserror"
 version = "1.0.63"
@@ -1778,14 +2398,138 @@ dependencies = [
  "diesel",
  "dioxus",
  "dioxus-logger",
+ "dotenvy",
+ "serde",
 ]
 
+[[package]]
+name = "tokio"
+version = "1.39.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38"
+dependencies = [
+ "futures-util",
+ "log",
+ "tokio",
+ "tungstenite",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hashbrown",
+ "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-http"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5"
+dependencies = [
+ "bitflags",
+ "bytes",
+ "futures-util",
+ "http 1.1.0",
+ "http-body",
+ "http-body-util",
+ "http-range-header",
+ "httpdate",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
+[[package]]
+name = "tower-service"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
+
 [[package]]
 name = "tracing"
 version = "0.1.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
 dependencies = [
+ "log",
  "pin-project-lite",
  "tracing-attributes",
  "tracing-core",
@@ -1812,6 +2556,16 @@ dependencies = [
  "valuable",
 ]
 
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
 [[package]]
 name = "tracing-log"
 version = "0.2.0"
@@ -1848,6 +2602,40 @@ dependencies = [
  "wasm-bindgen",
 ]
 
+[[package]]
+name = "tungstenite"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1"
+dependencies = [
+ "byteorder",
+ "bytes",
+ "data-encoding",
+ "http 1.1.0",
+ "httparse",
+ "log",
+ "rand",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
 [[package]]
 name = "unicode-bidi"
 version = "0.3.15"
@@ -1898,6 +2686,12 @@ version = "2.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
 
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
 [[package]]
 name = "valuable"
 version = "0.1.0"
@@ -1916,6 +2710,12 @@ version = "0.9.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
 
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
 [[package]]
 name = "wasm-bindgen"
 version = "0.2.93"
@@ -2028,6 +2828,24 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
+[[package]]
+name = "windows-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets",
+]
+
 [[package]]
 name = "windows-targets"
 version = "0.52.6"
@@ -2104,6 +2922,7 @@ version = "0.7.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
 dependencies = [
+ "byteorder",
  "zerocopy-derive",
 ]
 
diff --git a/Cargo.toml b/Cargo.toml
index 131176d..825ac02 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,7 +9,14 @@ edition = "2021"
 [dependencies]
 diesel = { version = "2.2.2", features = ["postgres"] }
 
-dioxus = { version = "0.5", features = ["web", "router"] }
+dioxus = { version = "0.5", features = ["fullstack", "router"] }
 
 # Debug
 dioxus-logger = "0.5.1"
+dotenvy = "0.15.7"
+serde = "1.0.208"
+
+[features]
+default = []
+server = ["dioxus/axum"]
+web = ["dioxus/web"]
diff --git a/Dioxus.toml b/Dioxus.toml
index 2e07cb6..e396b3a 100644
--- a/Dioxus.toml
+++ b/Dioxus.toml
@@ -5,7 +5,7 @@ name = "todo-baggins"
 
 # Dioxus App Default Platform
 # web, desktop, fullstack
-default_platform = "web"
+default_platform = "fullstack"
 
 # `build` & `serve` dist path
 out_dir = "dist"
diff --git a/docker/dev/app/supervisord.conf b/docker/dev/app/supervisord.conf
index 938f860..94b24dc 100644
--- a/docker/dev/app/supervisord.conf
+++ b/docker/dev/app/supervisord.conf
@@ -14,7 +14,7 @@ stdout_logfile_maxbytes=0
 redirect_stderr=true
 
 [program:dx]
-command=dx serve --port 8000
+command=dx serve
 directory=/srv/app
 autostart=true
 autorestart=true
diff --git a/src/components/app.rs b/src/components/app.rs
new file mode 100644
index 0000000..ac00f95
--- /dev/null
+++ b/src/components/app.rs
@@ -0,0 +1,11 @@
+use crate::route::Route;
+use dioxus::core_macro::rsx;
+use dioxus::dioxus_core::Element;
+use dioxus::prelude::*;
+
+#[component]
+pub(crate) fn App() -> Element {
+    rsx! {
+        Router::<Route> {}
+    }
+}
diff --git a/src/components/form_project.rs b/src/components/form_project.rs
new file mode 100644
index 0000000..0cb256f
--- /dev/null
+++ b/src/components/form_project.rs
@@ -0,0 +1,23 @@
+use dioxus::core_macro::{component, rsx};
+use dioxus::dioxus_core::Element;
+use dioxus::prelude::*;
+
+#[component]
+pub(crate) fn FormProject(onsubmit: EventHandler<String>) -> Element {
+    rsx! {
+        form {
+            onsubmit: move |event| {
+                onsubmit(event.values().get("title").unwrap().as_value());
+            },
+            input {
+                r#type: "text",
+                name: "title",
+                placeholder: "title"
+            }
+            button {
+                r#type: "submit",
+                "create"
+            }
+        }
+    }
+}
diff --git a/src/components/home.rs b/src/components/home.rs
new file mode 100644
index 0000000..a6eee7e
--- /dev/null
+++ b/src/components/home.rs
@@ -0,0 +1,18 @@
+use crate::components::form_project::FormProject;
+use crate::server::projects::create_project;
+use dioxus::core_macro::rsx;
+use dioxus::dioxus_core::Element;
+use dioxus::prelude::*;
+
+#[component]
+pub(crate) fn Home() -> Element {
+    rsx! {
+        FormProject {
+            onsubmit: move |title| {
+                spawn(async move {
+                    let _ = create_project(title).await;
+                });
+            }
+        }
+    }
+}
diff --git a/src/components/mod.rs b/src/components/mod.rs
new file mode 100644
index 0000000..a05a8fc
--- /dev/null
+++ b/src/components/mod.rs
@@ -0,0 +1,3 @@
+pub(crate) mod app;
+pub(crate) mod form_project;
+pub(crate) mod home;
diff --git a/src/main.rs b/src/main.rs
index 8db1d9a..ff7692a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,52 +1,22 @@
 #![allow(non_snake_case)]
 
+mod components;
+mod models;
+mod route;
+mod schema;
+mod server;
+
+use components::app::App;
 use dioxus::prelude::*;
 use dioxus_logger::tracing::{info, Level};
 
-#[derive(Clone, Routable, Debug, PartialEq)]
-enum Route {
-    #[route("/")]
-    Home {},
-    #[route("/blog/:id")]
-    Blog { id: i32 },
-}
-
 fn main() {
-    // Init logger
-    dioxus_logger::init(Level::INFO).expect("failed to init logger");
+    dioxus_logger::init(Level::INFO).expect("failed to initialize logger");
     info!("starting app");
-    launch(App);
-}
 
-fn App() -> Element {
-    rsx! {
-        Router::<Route> {}
-    }
-}
+    let cfg = server_only!(
+        dioxus::fullstack::Config::new().addr(std::net::SocketAddr::from(([0, 0, 0, 0], 8000)))
+    );
 
-#[component]
-fn Blog(id: i32) -> Element {
-    rsx! {
-        Link { to: Route::Home {}, "Go to counter" }
-        "Blog post {id}"
-    }
-}
-
-#[component]
-fn Home() -> Element {
-    let mut count = use_signal(|| 0);
-
-    rsx! {
-        Link {
-            to: Route::Blog {
-                id: count()
-            },
-            "Go to blog"
-        }
-        div {
-            h1 { "High-Five counter: {count}" }
-            button { onclick: move |_| count += 1, "Up high!" }
-            button { onclick: move |_| count -= 1, "Down low!" }
-        }
-    }
+    LaunchBuilder::fullstack().with_cfg(cfg).launch(App);
 }
diff --git a/src/route/mod.rs b/src/route/mod.rs
new file mode 100644
index 0000000..275f297
--- /dev/null
+++ b/src/route/mod.rs
@@ -0,0 +1,8 @@
+use crate::components::home::Home;
+use dioxus::prelude::*;
+
+#[derive(Clone, Routable, Debug, PartialEq)]
+pub(crate) enum Route {
+    #[route("/")]
+    Home {},
+}
diff --git a/src/server/database_connection.rs b/src/server/database_connection.rs
new file mode 100644
index 0000000..717e63e
--- /dev/null
+++ b/src/server/database_connection.rs
@@ -0,0 +1,12 @@
+use diesel::pg::PgConnection;
+use diesel::prelude::*;
+use dotenvy::dotenv;
+use std::env;
+
+pub(crate) fn establish_database_connection() -> PgConnection {
+    dotenv().ok();
+
+    let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
+    PgConnection::establish(&database_url)
+        .unwrap_or_else(|_| panic!("error connecting to {}", database_url))
+}
diff --git a/src/server/mod.rs b/src/server/mod.rs
new file mode 100644
index 0000000..56bd601
--- /dev/null
+++ b/src/server/mod.rs
@@ -0,0 +1,2 @@
+mod database_connection;
+pub(crate) mod projects;
diff --git a/src/server/projects.rs b/src/server/projects.rs
new file mode 100644
index 0000000..734e281
--- /dev/null
+++ b/src/server/projects.rs
@@ -0,0 +1,21 @@
+use crate::models::project::{NewProject, Project};
+use crate::server::database_connection::establish_database_connection;
+use diesel::{RunQueryDsl, SelectableHelper};
+use dioxus::prelude::*;
+
+#[server]
+pub(crate) async fn create_project(title: String) -> Result<Project, ServerFnError> {
+    use crate::schema::projects;
+
+    let mut connection = establish_database_connection();
+
+    let new_project = NewProject {
+        title: title.as_str(),
+    };
+
+    Ok(diesel::insert_into(projects::table)
+        .values(&new_project)
+        .returning(Project::as_returning())
+        .get_result(&mut connection)
+        .expect("error saving a new project"))
+}

From 46463dad75db6c873dae0a2dd7e9dbccdda63828 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 10:33:22 +0200
Subject: [PATCH 22/50] chore: update .idea

---
 .../1658668c-c2b8-426d-a22f-16fbad9eff0b.xml  | 80 +++++++++++++++----
 .../schema/public.abK9xQ.meta                 |  2 +-
 2 files changed, 64 insertions(+), 18 deletions(-)

diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml
index aa0cfde..ecb9799 100644
--- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml
+++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b.xml
@@ -11,9 +11,9 @@
 4||10|c|G
 4||10|C|G
 4||10|T|G</Grants>
-      <IntrospectionStateNumber>745</IntrospectionStateNumber>
+      <IntrospectionStateNumber>767</IntrospectionStateNumber>
       <ServerVersion>16.4</ServerVersion>
-      <StartupTime>1723806748</StartupTime>
+      <StartupTime>1723847104</StartupTime>
       <TimeZones>true ACDT
 true ACSST
 false ACST
@@ -1412,7 +1412,7 @@ true posixrules
 13212||10|C|G
 13212||-9223372036854775808|U|G
 13212||10|U|G</Grants>
-      <IntrospectionStateNumber>745</IntrospectionStateNumber>
+      <IntrospectionStateNumber>767</IntrospectionStateNumber>
       <ObjectId>16384</ObjectId>
       <OwnerName>app</OwnerName>
     </database>
@@ -4831,58 +4831,72 @@ true posixrules
     <schema id="264" parent="3" name="public">
       <Comment>standard public schema</Comment>
       <Current>1</Current>
-      <IntrospectionStateNumber>745</IntrospectionStateNumber>
-      <LastIntrospectionLocalTimestamp>2024-08-16.11:25:02</LastIntrospectionLocalTimestamp>
+      <IntrospectionStateNumber>767</IntrospectionStateNumber>
+      <LastIntrospectionLocalTimestamp>2024-08-16.22:33:41</LastIntrospectionLocalTimestamp>
       <ObjectId>2200</ObjectId>
       <StateNumber>524</StateNumber>
       <OwnerName>pg_database_owner</OwnerName>
     </schema>
     <routine id="265" parent="264" name="diesel_manage_updated_at">
       <ArgumentsDefinition>_tbl regclass</ArgumentsDefinition>
-      <ObjectId>16395</ObjectId>
+      <ObjectId>16422</ObjectId>
       <ResultsDefinition>void</ResultsDefinition>
       <Rows>0.0</Rows>
       <SourceTextLength>166</SourceTextLength>
-      <StateNumber>744</StateNumber>
+      <StateNumber>761</StateNumber>
       <LanguageName>plpgsql</LanguageName>
       <OwnerName>app</OwnerName>
     </routine>
     <routine id="266" parent="264" name="diesel_set_updated_at">
-      <ObjectId>16396</ObjectId>
+      <ObjectId>16423</ObjectId>
       <PgRoutineKind>pg-trigger</PgRoutineKind>
       <ResultsDefinition>trigger</ResultsDefinition>
       <Rows>0.0</Rows>
       <SourceTextLength>201</SourceTextLength>
-      <StateNumber>744</StateNumber>
+      <StateNumber>761</StateNumber>
       <LanguageName>plpgsql</LanguageName>
       <OwnerName>app</OwnerName>
     </routine>
-    <table id="267" parent="264" name="__diesel_schema_migrations">
+    <sequence id="267" parent="264" name="projects_id_seq">
+      <ObjectId>16424</ObjectId>
+      <SequenceIdentity>1</SequenceIdentity>
+      <StartValue>1</StartValue>
+      <StateNumber>762</StateNumber>
+      <StoredType>integer|0s</StoredType>
+      <OwnerName>app</OwnerName>
+    </sequence>
+    <table id="268" parent="264" name="__diesel_schema_migrations">
       <ObjectId>16389</ObjectId>
       <StateNumber>743</StateNumber>
       <AccessMethodId>2</AccessMethodId>
       <OwnerName>app</OwnerName>
     </table>
-    <argument id="268" parent="265">
+    <table id="269" parent="264" name="projects">
+      <ObjectId>16425</ObjectId>
+      <StateNumber>762</StateNumber>
+      <AccessMethodId>2</AccessMethodId>
+      <OwnerName>app</OwnerName>
+    </table>
+    <argument id="270" parent="265">
       <ArgumentDirection>R</ArgumentDirection>
       <StoredType>void|0s</StoredType>
     </argument>
-    <argument id="269" parent="265" name="_tbl">
+    <argument id="271" parent="265" name="_tbl">
       <Position>1</Position>
       <StoredType>regclass|0s</StoredType>
     </argument>
-    <argument id="270" parent="266">
+    <argument id="272" parent="266">
       <ArgumentDirection>R</ArgumentDirection>
       <StoredType>trigger|0s</StoredType>
     </argument>
-    <column id="271" parent="267" name="version">
+    <column id="273" parent="268" name="version">
       <NotNull>1</NotNull>
       <Position>1</Position>
       <StateNumber>743</StateNumber>
       <StoredType>varchar(50)|0s</StoredType>
       <TypeId>1043</TypeId>
     </column>
-    <column id="272" parent="267" name="run_on">
+    <column id="274" parent="268" name="run_on">
       <DefaultExpression>CURRENT_TIMESTAMP</DefaultExpression>
       <NotNull>1</NotNull>
       <Position>2</Position>
@@ -4890,7 +4904,7 @@ true posixrules
       <StoredType>timestamp|0s</StoredType>
       <TypeId>1114</TypeId>
     </column>
-    <index id="273" parent="267" name="__diesel_schema_migrations_pkey">
+    <index id="275" parent="268" name="__diesel_schema_migrations_pkey">
       <ColNames>version</ColNames>
       <NameSurrogate>1</NameSurrogate>
       <ObjectId>16393</ObjectId>
@@ -4902,12 +4916,44 @@ true posixrules
       <CollationIds>100</CollationIds>
       <CollationParentNames>pg_catalog</CollationParentNames>
     </index>
-    <key id="274" parent="267" name="__diesel_schema_migrations_pkey">
+    <key id="276" parent="268" name="__diesel_schema_migrations_pkey">
       <NameSurrogate>1</NameSurrogate>
       <ObjectId>16394</ObjectId>
       <Primary>1</Primary>
       <StateNumber>743</StateNumber>
       <UnderlyingIndexId>16393</UnderlyingIndexId>
     </key>
+    <column id="277" parent="269" name="id">
+      <DefaultExpression>nextval(&apos;projects_id_seq&apos;::regclass)</DefaultExpression>
+      <NotNull>1</NotNull>
+      <Position>1</Position>
+      <StateNumber>762</StateNumber>
+      <StoredType>integer|0s</StoredType>
+      <SequenceId>16424</SequenceId>
+      <TypeId>23</TypeId>
+    </column>
+    <column id="278" parent="269" name="title">
+      <NotNull>1</NotNull>
+      <Position>2</Position>
+      <StateNumber>762</StateNumber>
+      <StoredType>text|0s</StoredType>
+      <TypeId>25</TypeId>
+    </column>
+    <index id="279" parent="269" name="projects_pkey">
+      <ColNames>id</ColNames>
+      <NameSurrogate>1</NameSurrogate>
+      <ObjectId>16431</ObjectId>
+      <Primary>1</Primary>
+      <StateNumber>762</StateNumber>
+      <Unique>1</Unique>
+      <AccessMethodId>403</AccessMethodId>
+    </index>
+    <key id="280" parent="269" name="projects_pkey">
+      <NameSurrogate>1</NameSurrogate>
+      <ObjectId>16432</ObjectId>
+      <Primary>1</Primary>
+      <StateNumber>762</StateNumber>
+      <UnderlyingIndexId>16431</UnderlyingIndexId>
+    </key>
   </database-model>
 </dataSource>
\ No newline at end of file
diff --git a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta
index f79bdf4..c523994 100644
--- a/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta
+++ b/.idea/dataSources/1658668c-c2b8-426d-a22f-16fbad9eff0b/storage_v2/_src_/database/todo_baggins.NgsZOg/schema/public.abK9xQ.meta
@@ -1,2 +1,2 @@
 #n:public
-!<md> [745, 0, null, null, -2147483648, -2147483648]
+!<md> [767, 0, null, null, -2147483648, -2147483648]

From 71666f45be909a8dc4eee8413a12f9e1a3f2f28f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 10:58:56 +0200
Subject: [PATCH 23/50] style: disable stylelint for the Tailwind at rules

---
 src/styles/tailwind.css | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css
index 23e8f29..6080f5f 100644
--- a/src/styles/tailwind.css
+++ b/src/styles/tailwind.css
@@ -1,6 +1,9 @@
+/* stylelint-disable-next-line at-rule-no-unknown */
 /*noinspection CssInvalidAtRule*/
 @tailwind base;
+/* stylelint-disable-next-line at-rule-no-unknown */
 /*noinspection CssInvalidAtRule*/
 @tailwind components;
+/* stylelint-disable-next-line at-rule-no-unknown */
 /*noinspection CssInvalidAtRule*/
 @tailwind utilities;

From 6f3312ac2fd2928269bbce13ecbe6b74011d60d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 10:59:43 +0200
Subject: [PATCH 24/50] refactor: rename the project form component

---
 src/components/home.rs                              | 4 ++--
 src/components/mod.rs                               | 2 +-
 src/components/{form_project.rs => project_form.rs} | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)
 rename src/components/{form_project.rs => project_form.rs} (89%)

diff --git a/src/components/home.rs b/src/components/home.rs
index a6eee7e..2a4b74f 100644
--- a/src/components/home.rs
+++ b/src/components/home.rs
@@ -1,4 +1,4 @@
-use crate::components::form_project::FormProject;
+use crate::components::project_form::ProjectForm;
 use crate::server::projects::create_project;
 use dioxus::core_macro::rsx;
 use dioxus::dioxus_core::Element;
@@ -7,7 +7,7 @@ use dioxus::prelude::*;
 #[component]
 pub(crate) fn Home() -> Element {
     rsx! {
-        FormProject {
+        ProjectForm {
             onsubmit: move |title| {
                 spawn(async move {
                     let _ = create_project(title).await;
diff --git a/src/components/mod.rs b/src/components/mod.rs
index a05a8fc..cced83e 100644
--- a/src/components/mod.rs
+++ b/src/components/mod.rs
@@ -1,3 +1,3 @@
 pub(crate) mod app;
-pub(crate) mod form_project;
 pub(crate) mod home;
+pub(crate) mod project_form;
diff --git a/src/components/form_project.rs b/src/components/project_form.rs
similarity index 89%
rename from src/components/form_project.rs
rename to src/components/project_form.rs
index 0cb256f..628d756 100644
--- a/src/components/form_project.rs
+++ b/src/components/project_form.rs
@@ -3,7 +3,7 @@ use dioxus::dioxus_core::Element;
 use dioxus::prelude::*;
 
 #[component]
-pub(crate) fn FormProject(onsubmit: EventHandler<String>) -> Element {
+pub(crate) fn ProjectForm(onsubmit: EventHandler<String>) -> Element {
     rsx! {
         form {
             onsubmit: move |event| {

From 39a25d7d7bbf2eacc053518a7b03605cf8e2e074 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 11:40:39 +0200
Subject: [PATCH 25/50] build: optimize the development Dockerfile

---
 docker/dev/app/Dockerfile | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index 209098d..5e0d5c1 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -1,8 +1,8 @@
 FROM rust:1.80-bookworm
 
-RUN rustup target add wasm32-unknown-unknown
-RUN cargo install dioxus-cli diesel_cli
-RUN apt-get update && apt-get install -y nodejs npm supervisor
+RUN rustup target add wasm32-unknown-unknown && \
+    cargo install dioxus-cli diesel_cli && \
+    apt-get update && apt-get install -y nodejs npm supervisor
 
 COPY . /srv/app
 WORKDIR /srv/app

From 8a9c27826620b98339a82406b9d855ef0b03e761 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 11:41:07 +0200
Subject: [PATCH 26/50] build: add a healthcheck to the development Dockerfile

---
 docker/dev/app/Dockerfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index 5e0d5c1..bb8325a 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -11,4 +11,5 @@ RUN npm install
 
 COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
 
+HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1
 CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

From 5165d15d96719add8eac1d8caafb79f2697a2e06 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 11:41:20 +0200
Subject: [PATCH 27/50] build: specify the user in the development Dockerfile

---
 docker/dev/app/Dockerfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index bb8325a..799f19e 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -12,4 +12,5 @@ RUN npm install
 COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
 
 HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1
+USER root
 CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

From 4ef503b04645f5e81a841b56650101ed4cd39b03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 11:42:42 +0200
Subject: [PATCH 28/50] chore: remove an unused asset

---
 assets/header.svg | 171 ----------------------------------------------
 1 file changed, 171 deletions(-)
 delete mode 100644 assets/header.svg

diff --git a/assets/header.svg b/assets/header.svg
deleted file mode 100644
index 3581419..0000000
--- a/assets/header.svg
+++ /dev/null
@@ -1,171 +0,0 @@
-<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1007 197">
-    <style>
-        @keyframes a0_t { 0% { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } 35% {
-        transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); animation-timing-function:
-        cubic-bezier(.6,0,.4,1); } 45% { transform: translate(225px,339.9px) scale(1,1) translate(-89.5px,-24px); } 50%
-        { transform: translate(225px,339.9px) scale(1,1) translate(-89.5px,-24px); animation-timing-function:
-        cubic-bezier(.6,0,.4,1); } 60% { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } 100%
-        { transform: translate(225px,339.9px) scale(0,1) translate(-89.5px,-24px); } }
-        @keyframes a1_t { 0% { transform: translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); } 20% {
-        transform: translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); animation-timing-function:
-        cubic-bezier(.6,0,.4,1); } 30% { transform: translate(225px,348.9px) scale(1,1) translate(-41.5px,-11px); } 35%
-        { transform: translate(225px,348.9px) scale(1,1) translate(-41.5px,-11px); } 45% { transform:
-        translate(225px,348.9px) scale(0,1) translate(-41.5px,-11px); } 100% { transform: translate(225px,348.9px)
-        scale(0,1) translate(-41.5px,-11px); } }
-        @keyframes a3_t { 0% { transform: translate(225px,198.9px) rotate(-90deg); } 10% { transform:
-        translate(225px,198.9px) rotate(-90deg); } 20% { transform: translate(225px,198.9px) rotate(-90deg);
-        animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: translate(225px,198.9px) rotate(0deg); }
-        35% { transform: translate(225px,198.9px) rotate(0deg); } 45% { transform: translate(225px,198.9px)
-        rotate(0deg); } 50% { transform: translate(225px,198.9px) rotate(0deg); animation-timing-function:
-        cubic-bezier(.6,0,.4,1); } 60% { transform: translate(225px,198.9px) rotate(-90deg); } 65% { transform:
-        translate(225px,198.9px) rotate(-90deg); } 75% { transform: translate(225px,198.9px) rotate(-90deg); } 100% {
-        transform: translate(225px,198.9px) rotate(-90deg); } }
-        @keyframes a2_t { 0% { transform: translate(-200px,-167px); animation-timing-function: cubic-bezier(.6,0,.4,1);
-        } 10% { transform: translate(-150px,-80px); } 20% { transform: translate(-150px,-80px);
-        animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform: translate(-200px,-123px); } 35% {
-        transform: translate(-200px,-123px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { transform:
-        translate(-150px,-100px); } 50% { transform: translate(-150px,-100px); animation-timing-function:
-        cubic-bezier(.6,0,.4,1); } 60% { transform: translate(-150px,-80px); } 65% { transform: translate(-150px,-80px);
-        animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { transform: translate(-217px,-200px); } 100% {
-        transform: translate(-217px,-200px); } }
-        @keyframes a2_o { 0% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { opacity: 1; } 65%
-        { opacity: 1; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { opacity: 0; } 100% { opacity: 0; } }
-        @keyframes a2_sw { 0% { stroke-width: 30px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% {
-        stroke-width: 8px; } 65% { stroke-width: 8px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% {
-        stroke-width: 30px; } 100% { stroke-width: 30px; } }
-        @keyframes a2_w { 0% { width: 400px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { width: 300px; }
-        20% { width: 300px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { width: 400px; } 35% { width:
-        400px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { width: 300px; } 50% { width: 300px; } 60% {
-        width: 300px; } 65% { width: 300px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { width: 434px; }
-        100% { width: 434px; } }
-        @keyframes a2_h { 0% { height: 334px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { height: 160px;
-        } 20% { height: 160px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { height: 246px; } 35% {
-        height: 246px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 45% { height: 200px; } 50% { height: 200px;
-        animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% { height: 160px; } 65% { height: 160px;
-        animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { height: 400px; } 100% { height: 400px; } }
-        @keyframes a4_t { 0% { transform: translate(143.5px,48.9px); } 10% { transform: translate(180.5px,98.9px); }
-        100% { transform: translate(180.5px,98.9px); } }
-        @keyframes a4_w { 0% { width: 168.5px; } 10% { width: 94.5px; } 100% { width: 94.5px; } }
-        @keyframes a4_h { 0% { height: 302px; } 10% { height: 202px; } 100% { height: 202px; } }
-        @keyframes a5_t { 0% { transform: translate(217px,324.9px); animation-timing-function: cubic-bezier(.6,0,.4,1);
-        } 10% { transform: translate(190px,324.9px); } 20% { transform: translate(190px,324.9px); } 30% { transform:
-        translate(190px,324.9px); } 100% { transform: translate(190px,324.9px); } }
-        @keyframes a5_o { 0% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { opacity: 1; } 20%
-        { opacity: 1; } 30% { opacity: 0; } 100% { opacity: 0; } }
-        @keyframes a5_w { 0% { width: 16px; animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { width: 70px; }
-        20% { width: 70px; } 30% { width: 70px; } 100% { width: 70px; } }
-        @keyframes a6_t { 0% { transform: translate(217px,324.9px); } 50% { transform: translate(217px,324.9px);
-        animation-timing-function: cubic-bezier(.6,0,.4,1); } 60% { transform: translate(190px,324.9px); } 65% {
-        transform: translate(190px,324.9px); } 75% { transform: translate(190px,324.9px); } 100% { transform:
-        translate(190px,324.9px); } }
-        @keyframes a6_o { 0% { opacity: 0; } 50% { opacity: 0; animation-timing-function: cubic-bezier(.6,0,.4,1); } 60%
-        { opacity: 1; } 65% { opacity: 1; animation-timing-function: cubic-bezier(.6,0,.4,1); } 75% { opacity: 0; } 100%
-        { opacity: 0; } }
-        @keyframes a6_w { 0% { width: 16px; } 50% { width: 16px; animation-timing-function: cubic-bezier(.6,0,.4,1); }
-        60% { width: 70px; } 65% { width: 70px; } 75% { width: 70px; } 100% { width: 70px; } }
-        @keyframes a7_t { 0% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px);
-        animation-timing-function: cubic-bezier(.6,0,.4,1); } 10% { transform: translate(225px,198.9px) scale(1,1)
-        translate(-42.3px,-93px); } 20% { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px);
-        animation-timing-function: cubic-bezier(.6,0,.4,1); } 25% { transform: translate(225px,198.9px) scale(.8,.8)
-        translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.6,0,.4,1); } 30% { transform:
-        translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); } 35% { transform: translate(225px,198.9px)
-        scale(1,1) translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.4,0,.6,1); } 45% { transform:
-        translate(225px,198.9px) scale(.8,.8) translate(-42.3px,-93px); } 50% { transform: translate(225px,198.9px)
-        scale(.8,.8) translate(-42.3px,-93px); animation-timing-function: cubic-bezier(.4,0,.6,1); } 55% { transform:
-        translate(225px,198.9px) scale(.7,.7) translate(-42.3px,-93px); animation-timing-function:
-        cubic-bezier(.4,0,.6,1); } 60% { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); } 65%
-        { transform: translate(225px,198.9px) scale(1,1) translate(-42.3px,-93px); animation-timing-function:
-        cubic-bezier(.4,0,.6,1); } 75% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); }
-        100% { transform: translate(225px,198.9px) scale(1.5,1.5) translate(-42.3px,-93px); } }
-    </style>
-    <defs>
-        <symbol id="Symbol-2" preserveAspectRatio="none" width="111.5" height="186" viewBox="0 0 111.5 186"
-                overflow="visible">
-            <g transform="translate(8.5,4.5)">
-                <rect x="4" width="85" height="8" fill="#d9d9d9"/>
-                <rect x="4" y="26" width="85" height="8" fill="#d9d9d9"/>
-                <rect x="25" y="56" width="43" height="8" fill="#d9d9d9"/>
-                <rect width="85" height="8" fill="#d9d9d9"
-                      transform="translate(46.5,175) rotate(180) scale(-1,1) translate(-42.5,-4)"/>
-                <rect width="85" height="8" fill="#d9d9d9"
-                      transform="translate(46.5,149) rotate(180) scale(-1,1) translate(-42.5,-4)"/>
-                <rect width="43" height="8" fill="#d9d9d9"
-                      transform="translate(46.5,119) rotate(180) scale(-1,1) translate(-21.5,-4)"/>
-                <path d="M0 4c0 53 94.5 115 94.5 169" stroke="#3cc4dc" stroke-width="17" stroke-linecap="square"
-                      fill="none"/>
-                <path d="M94.5 4c0 53-94.5 115-94.5 169" stroke="#fb422d" stroke-width="17" stroke-linecap="square"
-                      fill="none"/>
-            </g>
-        </symbol>
-        <symbol id="Symbol-5" preserveAspectRatio="none" width="84.5" height="186" viewBox="0 0 84.5 186"
-                overflow="visible">
-            <g transform="translate(42.3,93) scale(5.352,6.9) translate(-16,60)">
-                <g transform="translate(-34.9,-125.8)">
-                    <g transform="translate(24,5)">
-                        <path d="M33 46.5c0 3.1-0.8 5.5-2.2 7.4c-1.4 1.9-3.3 3.6-5.4 5.4c-2.2 1.7-4.5 3.6-6.3 6.2c-1.8 2.5-3.1 5.5-3.1 9.5h4.7c0-3.1 .9-5.4 2.2-7.3c1.4-1.9 3.3-3.5 5.5-5.3c2.1-1.8 4.4-3.7 6.2-6.2c1.8-2.6 3.1-5.6 3.1-9.7Z"
-                              fill="#e96020"/>
-                        <path d="M20.4 70.7c-0.6 0-1 .5-1 1.1c0 .7 .4 1.2 1 1.2h12.9c.7 0 1.2-0.5 1.2-1.2c0-0.6-0.5-1.1-1.2-1.1Z"
-                              fill="#2d323b"/>
-                        <path d="M21.8 66.6c-0.7 0-1 .6-1 1.2c0 .6 .3 1 .9 1h10.3c.6 0 1.1-0.5 1.1-1.1c0-0.6-0.5-1.1-1.1-1.1Z"
-                              fill="#2d323b"/>
-                        <path d="M21.8 53c-0.7 0-1.2 .5-1.1 1.1c0 .6 .4 1.1 1.1 1.1h10.2c.6 0 .9-0.6 .9-1.2c0-0.6-0.3-1-0.9-1Z"
-                              fill="#2d323b"/>
-                        <path d="M20.4 48.8c-0.6 0-1.2 .5-1.2 1.1c0 .7 .6 1.2 1.2 1.2h12.9c.7 0 1-0.5 1-1.1c0-0.7-0.3-1.2-1-1.2Z"
-                              fill="#2d323b"/>
-                        <path d="M16 46.5c0 4.1 1.3 7.1 3.1 9.7c1.8 2.5 4.1 4.4 6.3 6.2c2.1 1.8 4 3.6 5.4 5.5c1.4 1.9 2.2 4 2.2 7.1h4.7c0-4-1.3-7.1-3.1-9.6c-1.8-2.5-4.1-4.4-6.2-6.2c-2.2-1.8-4.1-3.4-5.5-5.3c-1.3-1.9-2.2-4.3-2.2-7.4Z"
-                              fill="#00a8d6"/>
-                    </g>
-                </g>
-            </g>
-        </symbol>
-    </defs>
-    <rect width="1007" height="197" stroke="#0f1116" fill="#0f1116" stroke-width="0"/>
-    <path fill="#fff"
-          d="M83.3 106.1v-65.7h17c4.2 0 7.9 .8 11 2.4c3.1 1.6 5.5 3.9 7.2 6.9c1.7 2.9 2.6 6.4 2.6 10.4v26.2c0 4-0.9 7.5-2.6 10.5c-1.7 3-4.1 5.3-7.2 6.9c-3.1 1.6-6.8 2.4-11 2.4Zm8.1-7.2h8.9c4 0 7.1-1.1 9.3-3.3c2.3-2.3 3.4-5.3 3.4-9.3v-26.2c0-3.9-1.1-7-3.4-9.2c-2.2-2.2-5.3-3.3-9.3-3.3h-8.9Zm45.3 7.2v-7.4h17.5v-34.7h-15.7v-7.4h23.8v42.1h16.7v7.4Zm20.7-58.4c-2 0-3.6-0.5-4.7-1.5c-1.2-1.1-1.7-2.4-1.7-4.2c0-1.8 .5-3.2 1.7-4.3c1.1-1 2.7-1.5 4.7-1.5c1.9 0 3.5 .5 4.6 1.5c1.2 1.1 1.7 2.5 1.7 4.3c0 1.8-0.5 3.1-1.7 4.2c-1.1 1-2.7 1.5-4.6 1.5Zm52.6 59.1c-6 0-10.7-1.7-14.2-5.1c-3.4-3.4-5.1-8-5.1-13.8v-13.1c0-5.9 1.7-10.5 5.1-13.9c3.5-3.3 8.2-5 14.2-5c6 0 10.7 1.7 14.2 5c3.4 3.4 5.2 8 5.2 13.8v13.2c0 5.8-1.8 10.4-5.2 13.8c-3.5 3.4-8.2 5.1-14.2 5.1Zm0-7.2c3.5 0 6.3-1 8.3-3c2-1.9 3-4.8 3-8.7v-13.1c0-3.9-1-6.8-3-8.8c-2-1.9-4.8-2.9-8.3-2.9c-3.5 0-6.2 1-8.2 2.9c-2 2-3 4.9-3 8.8v13.1c0 3.9 1 6.8 3 8.7c2 2 4.7 3 8.2 3Zm31.5 6.5l17.6-25.5l-16.5-24h9.5l9.8 15.3c.5 .7 .9 1.4 1.2 2.2c.4 .7 .8 1.4 1 1.8c.2-0.4 .5-1.1 .8-1.8c.4-0.8 .8-1.5 1.3-2.2l9.9-15.3h9.4l-16.5 24.1l17.5 25.4h-9.5l-10.7-16.2c-0.4-0.7-0.8-1.4-1.2-2.3c-0.4-0.9-0.7-1.6-1-2.1c-0.2 .5-0.6 1.2-1 2.1c-0.5 .9-1 1.6-1.4 2.3l-10.7 16.2Zm76.4 .9c-5.7 0-10.2-1.7-13.7-5.1c-3.4-3.4-5.1-8-5.1-13.8v-31.5h8.1v31.5c0 3.7 1 6.6 2.9 8.7c1.9 2.1 4.5 3.1 7.8 3.1c3.4 0 6-1 8-3.1c1.9-2.1 2.9-5 2.9-8.7v-31.5h8.1v31.5c0 5.8-1.7 10.4-5.2 13.8c-3.5 3.4-8.1 5.1-13.8 5.1Zm52.6-0.2c-5.1 0-9.3-1.2-12.5-3.5c-3.3-2.3-4.9-5.5-4.9-9.6h8.3c0 1.8 .9 3.3 2.6 4.3c1.8 1.1 4 1.6 6.6 1.6h3.8c3.2 0 5.6-0.6 7.1-1.9c1.6-1.3 2.4-3 2.4-5.2c0-2.1-0.8-3.8-2.2-5c-1.5-1.2-3.6-2-6.4-2.5l-6.6-1c-5-0.9-8.6-2.4-10.9-4.7c-2.4-2.3-3.5-5.5-3.5-9.5c0-4.5 1.4-7.9 4.3-10.3c2.9-2.4 7.1-3.6 12.6-3.6h3.4c5 0 9.1 1.1 12.1 3.4c3 2.2 4.6 5.2 4.6 8.9h-8.3c0-1.6-0.8-2.8-2.3-3.7c-1.5-1-3.6-1.4-6.3-1.4h-3.4c-2.8 0-5 .6-6.5 1.7c-1.5 1.2-2.3 2.9-2.3 5c0 3.6 2.5 5.8 7.6 6.7l6.7 1.1c5.3 .8 9.2 2.4 11.7 4.6c2.4 2.3 3.6 5.6 3.6 9.9c0 4.6-1.5 8.2-4.4 10.8c-2.9 2.6-7.3 3.9-13.2 3.9Z"/>
-    <path fill="#fff"
-          d="M91 164c-2 0-3.6-0.6-4.7-1.7c-1.1-1.1-1.6-2.7-1.6-4.6v-15.9h2.7v15.9c0 1.2 .3 2.2 .9 2.8c.6 .7 1.5 1.1 2.7 1.1c1.2 0 2.1-0.4 2.7-1.1c.6-0.7 .9-1.6 .9-2.8v-15.9h2.7v15.9c0 2-0.5 3.5-1.6 4.6c-1.1 1.1-2.6 1.7-4.7 1.7Zm17.5-0.1c-1.7 0-3.1-0.3-4.2-1.1c-1.1-0.8-1.6-1.9-1.6-3.2h2.8c0 .6 .3 1.1 .8 1.4c.6 .4 1.4 .5 2.2 .5h1.3c1.1 0 1.9-0.2 2.4-0.6c.5-0.4 .8-1 .8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.2-0.7-2.1-0.8l-2.2-0.4c-1.7-0.3-2.9-0.8-3.6-1.5c-0.8-0.8-1.2-1.9-1.2-3.2c0-1.5 .5-2.6 1.4-3.4c1-0.8 2.4-1.2 4.2-1.2h1.2c1.6 0 3 .3 4 1.1c1 .7 1.5 1.7 1.5 3h-2.7c0-0.6-0.3-1-0.8-1.3c-0.5-0.3-1.2-0.4-2.1-0.4h-1.1c-1 0-1.7 .2-2.2 .5c-0.5 .4-0.8 1-0.8 1.7c0 1.2 .9 1.9 2.6 2.2l2.2 .4c1.8 .3 3.1 .8 3.9 1.5c.8 .8 1.2 1.9 1.2 3.3c0 1.6-0.5 2.8-1.5 3.6c-0.9 .9-2.4 1.3-4.4 1.3Zm18.5 .1c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3l-0.1 2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.2c.1-1.1 .6-2 1.4-2.6c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm35.8 0v-2.5h4.5v-16.9h-4.5v-2.5h11.8l-0.1 2.5h-4.4v16.9h4.4v2.5Zm17.7 0v-16.5h2.7v3.2c.1-1.1 .6-2 1.3-2.6c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 3 .5 3.9 1.5c1 1.1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm26 0c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.1v-9.7h-4.7v-2.5h4.7v-4.7h2.7v4.7h6.6v2.5h-6.6v9.7c0 .5 .2 1 .5 1.3c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm16.2 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.7-2-0.7-3.3v-4.5c0-1.3 .2-2.4 .7-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3l-0.1 2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.2c.1-1.1 .6-2 1.4-2.6c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm21.3 0v-12.4h-4.8v-2.4h4.8v-2.9c0-1.3 .4-2.3 1.2-3.1c.9-0.7 2-1.1 3.4-1.1h4.9v2.5h-4.9c-1.3 0-1.9 .5-1.9 1.7v2.9h6.8v2.4h-6.8v12.4Zm19 .3c-1.8 0-3.1-0.4-4.1-1.3c-1-0.9-1.5-2.1-1.5-3.6c0-1.6 .5-2.8 1.5-3.7c1-0.9 2.3-1.3 4-1.3h5.1v-1.6c0-1-0.3-1.8-0.9-2.4c-0.6-0.5-1.5-0.8-2.5-0.8c-1 0-1.8 .2-2.5 .6c-0.6 .4-1 1-1.2 1.7h-2.7c.1-1 .4-1.8 1-2.5c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.2-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 1 1.6 2.3 1.6 4v11.3h-2.6v-3.1h-0.1c-0.1 1-0.6 1.9-1.5 2.5c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.4-0.3 3.2-1c.8-0.6 1.2-1.4 1.2-2.4v-2.4h-5c-0.9 0-1.6 .3-2.2 .8c-0.5 .5-0.7 1.1-0.7 2c0 .9 .3 1.6 .9 2.2c.6 .5 1.5 .8 2.6 .8Zm18.9 2.1c-2 0-3.6-0.6-4.8-1.7c-1.2-1.1-1.7-2.6-1.7-4.6v-4.5c0-2 .5-3.5 1.7-4.6c1.2-1.1 2.8-1.7 4.8-1.7c1.9 0 3.5 .5 4.6 1.5c1.2 1 1.8 2.4 1.8 4.2h-2.7c0-1.1-0.4-1.9-1-2.4c-0.7-0.6-1.6-0.9-2.7-0.9c-1.2 0-2.1 .3-2.8 1c-0.7 .7-1.1 1.6-1.1 2.9l.1 4.5c-0.1 1.2 .3 2.2 1 2.9c.7 .7 1.6 1 2.8 1c1.1 0 2-0.3 2.7-0.9c.6-0.6 1-1.4 1-2.4h2.7c0 1.8-0.6 3.2-1.8 4.2c-1.1 1-2.7 1.5-4.6 1.5Zm17.9 0c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.7-2-0.7-3.3v-4.5c0-1.3 .2-2.4 .7-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .8 2 .8 3.3v2.9h-10.3v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1.1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1-2.8-1c-1.2 0-2.2 .3-2.8 1c-0.7 .7-1 1.7-1 3Zm21.3 9.8c-1.7 0-3.1-0.3-4.2-1.1c-1.1-0.8-1.6-1.9-1.6-3.2h2.8c0 .6 .3 1.1 .8 1.4c.6 .4 1.4 .5 2.3 .5h1.2c1.1 0 1.9-0.2 2.4-0.6c.5-0.4 .8-1 .8-1.7c0-0.7-0.3-1.3-0.8-1.7c-0.5-0.4-1.2-0.7-2.1-0.8l-2.2-0.4c-1.6-0.3-2.9-0.8-3.6-1.5c-0.8-0.8-1.2-1.9-1.2-3.2c0-1.5 .5-2.6 1.4-3.4c1-0.8 2.4-1.2 4.2-1.2h1.2c1.7 0 3 .3 4 1.1c1 .7 1.5 1.7 1.5 3h-2.7c0-0.6-0.3-1-0.8-1.3c-0.5-0.3-1.2-0.4-2.1-0.4h-1.1c-1 0-1.7 .2-2.2 .5c-0.5 .4-0.8 1-0.8 1.7c0 1.2 .9 1.9 2.6 2.2l2.2 .4c1.8 .3 3.1 .8 3.9 1.5c.8 .8 1.2 1.9 1.2 3.3c0 1.6-0.5 2.8-1.5 3.6c-0.9 .9-2.4 1.3-4.3 1.3Zm38.3-0.2c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.2v-9.6h-4.6v-2.5h4.6v-4.7h2.7v4.7h6.6v2.5h-6.6v9.6c0 .6 .2 1.1 .5 1.4c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm10 0v-21.9h2.7v8.6c.1-1.2 .6-2 1.3-2.6c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 3 .5 3.9 1.5c1 1.1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.7-1.5-1-2.6-1c-1.1 0-2 .3-2.7 1c-0.6 .7-0.9 1.7-0.9 3v10.5Zm22.8 .3c-1.8 0-3.1-0.4-4.1-1.3c-1-0.9-1.5-2.1-1.5-3.7c0-1.5 .5-2.7 1.5-3.6c1-0.9 2.3-1.3 4-1.3h5.1v-1.7c0-1-0.3-1.7-0.9-2.3c-0.6-0.6-1.5-0.8-2.5-0.8c-1 0-1.8 .2-2.5 .6c-0.6 .4-1 1-1.2 1.7h-2.7c.1-1 .4-1.8 1-2.5c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.2-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 1 1.6 2.3 1.6 4v11.3h-2.6v-3.2h-0.1c-0.1 1.1-0.6 1.9-1.5 2.6c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.4-0.4 3.2-1c.8-0.6 1.2-1.5 1.2-2.5v-2.3h-5c-0.9 0-1.6 .3-2.2 .8c-0.5 .5-0.7 1.1-0.7 2c0 .9 .3 1.6 .9 2.2c.6 .5 1.5 .8 2.6 .8Zm20.6 1.8c-1.4 0-2.4-0.4-3.3-1.2c-0.8-0.8-1.2-1.8-1.2-3.2v-9.6h-4.6v-2.5h4.6v-4.7h2.7v4.7h6.6v2.5h-6.6v9.6c0 .6 .2 1.1 .5 1.4c.3 .4 .8 .5 1.3 .5h4.5v2.5Zm28.5 0v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.4-2.5c.7-0.6 1.7-0.9 3-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm23.7 .3c-1.9 0-3.4-0.6-4.6-1.7c-1.1-1.1-1.7-2.7-1.7-4.6v-10.5h2.7v10.5c0 1.2 .3 2.2 1 2.9c.6 .7 1.5 1 2.6 1c1.1 0 2-0.3 2.6-1c.7-0.7 1-1.7 1-2.9v-10.5h2.7v10.5c0 1.9-0.6 3.5-1.7 4.6c-1.2 1.1-2.7 1.7-4.6 1.7Zm11.8-0.3v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm40.8 .3c-1.8 0-3.2-0.4-4.2-1.3c-1-0.9-1.5-2.1-1.5-3.7c0-1.5 .5-2.7 1.5-3.6c1-0.9 2.4-1.3 4.1-1.3h5.1v-1.7c0-1-0.3-1.7-0.9-2.3c-0.6-0.6-1.5-0.8-2.6-0.8c-0.9 0-1.7 .2-2.4 .6c-0.6 .4-1.1 1-1.2 1.6h-2.7c.1-0.9 .4-1.7 1-2.4c.6-0.7 1.3-1.2 2.2-1.6c1-0.4 2-0.6 3.1-0.6c1.9 0 3.4 .5 4.5 1.5c1.1 .9 1.7 2.3 1.7 4v11.3h-2.6v-3.2h-0.1c-0.1 1.1-0.6 1.9-1.5 2.6c-0.9 .6-2.1 .9-3.5 .9Zm.6-2.1c1.3 0 2.3-0.4 3.2-1c.8-0.6 1.2-1.5 1.2-2.5v-2.3h-5c-0.9 0-1.7 .3-2.2 .8c-0.5 .5-0.8 1.1-0.8 2c0 .9 .4 1.6 1 2.2c.6 .5 1.5 .8 2.6 .8Zm12.6 1.8v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.6-1.5-1-2.6-1c-1.1 0-2 .4-2.7 1.1c-0.6 .6-0.9 1.6-0.9 2.9v10.5Zm20.6 5.4l2.4-6.4l-6.3-15.5h2.9l4.1 10.2c.1 .3 .2 .7 .4 1.2c.1 .5 .2 .9 .3 1.2c.1-0.3 .2-0.7 .3-1.2c.1-0.5 .3-0.9 .4-1.2l3.8-10.2h2.8l-8.3 21.9Zm16.3-5.4l-2.7-16.5h2.4l1.6 11.7c.1 .4 .2 .9 .2 1.4c.1 .5 .1 1 .1 1.3h.2c0-0.3 0-0.8 .1-1.3c.1-0.5 .1-1 .2-1.4l1.8-11.7h2.7l1.9 11.7c.1 .4 .1 .9 .2 1.4c.1 .5 .1 1 .1 1.3h.2c0-0.3 .1-0.8 .1-1.3c.1-0.5 .2-1 .2-1.4l1.7-11.7h2.2l-2.7 16.5h-3l-1.8-11.4c0-0.6-0.1-1.1-0.2-1.7c-0.1-0.5-0.1-1-0.2-1.3h-0.1c0 .3-0.1 .8-0.1 1.3c-0.1 .6-0.2 1.1-0.3 1.7l-1.8 11.4Zm17.1 0v-21.9h2.7v8.5c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.6 0 2.9 .5 3.9 1.5c1 1 1.5 2.4 1.5 4.2v11.1h-2.7v-10.8c0-1.2-0.3-2.1-0.9-2.7c-0.7-0.7-1.5-1-2.6-1c-1.1 0-2 .3-2.7 1c-0.6 .7-0.9 1.7-0.9 3v10.5Zm24.2 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .7 2 .7 3.3v2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1.1-2.8-1.1c-1.2 0-2.2 .4-2.8 1.1c-0.7 .7-1 1.7-1 3Zm16.1 9.6v-16.5h2.7v3.1c.1-1.1 .6-1.9 1.3-2.5c.8-0.6 1.8-0.9 3.1-0.9c1.7 0 3.1 .5 4.1 1.6c1 1.1 1.5 2.6 1.5 4.5v1.1h-2.7v-0.9c0-1.3-0.3-2.2-0.9-2.9c-0.7-0.7-1.6-1.1-2.8-1.1c-2.4 0-3.6 1.4-3.6 4v10.5Zm23.7 .3c-1.3 0-2.4-0.3-3.4-0.8c-1-0.5-1.7-1.2-2.3-2.2c-0.5-0.9-0.8-2-0.8-3.3v-4.5c0-1.3 .3-2.4 .8-3.3c.6-1 1.3-1.7 2.3-2.2c1-0.5 2.1-0.8 3.4-0.8c1.3 0 2.4 .3 3.4 .8c1 .5 1.7 1.2 2.3 2.2c.5 .9 .7 2 .7 3.3v2.9h-10.2v1.6c0 1.3 .3 2.3 1 3c.6 .7 1.6 1 2.8 1c1 0 1.9-0.2 2.5-0.5c.7-0.4 1-1 1.2-1.7h2.7c-0.2 1.4-0.9 2.5-2 3.3c-1.2 .8-2.7 1.2-4.4 1.2Zm-3.8-9.9h7.6v-0.9c0-1.3-0.3-2.3-1-3c-0.6-0.7-1.6-1.1-2.8-1.1c-1.2 0-2.2 .4-2.8 1.1c-0.7 .7-1 1.7-1 3Z"/>
-    <g transform="translate(764,-14.5) scale(.431111,.440249) translate(-13.9,56.6)">
-        <path fill="#e0e0e0" stroke="#e0e0e0" stroke-linejoin="round"
-              d="M-50.7 4h278.2c10 0 9 0 9 0l41 40c0 0 1 0-9 0h-358c-9.9 0-9 0-9 0l38.8-40c0 0-0.9 0 9 0Z"
-              stroke-width="10" transform="translate(225,339.9) scale(0,1) translate(-89.5,-24)"
-              style="animation: 10s linear infinite both a0_t;"/>
-        <rect width="83" height="22" stroke="#fb422d" fill="#e0e0e0" rx="2" stroke-width="0"
-              transform="translate(225,348.9) scale(0,1) translate(-41.5,-11)"
-              style="animation: 10s linear infinite both a1_t;"/>
-        <g style="animation: 10s linear infinite both a3_t;">
-            <rect width="400" height="334" stroke="#e0e0e0" fill="none" stroke-width="30" stroke-miterlimit="1" rx="10"
-                  opacity="0" transform="translate(225,198.9) rotate(-90) translate(-200,-167)"
-                  style="animation: 10s linear infinite both a2_t, 10s linear infinite both a2_o, 10s linear infinite both a2_sw, 10s linear infinite both a2_w, 10s linear infinite both a2_h;"/>
-        </g>
-        <use width="168.5" height="302" xlink:href="#Symbol-2" opacity="0"
-             transform="translate(227.8,199.9) translate(-84.2,-151)"
-             style="animation: 10s linear infinite both a4_t, 10s linear infinite both a4_w, 10s linear infinite both a4_h;"/>
-        <rect width="16" height="8" stroke="#fb422d" fill="#e0e0e0" stroke-width="0" rx="2" opacity="0"
-              transform="translate(225,328.9) translate(-8,-4)"
-              style="animation: 10s linear infinite both a5_t, 10s linear infinite both a5_o, 10s linear infinite both a5_w;"/>
-        <rect width="16" height="8" stroke="#fb422d" fill="#e0e0e0" stroke-width="0" rx="2" opacity="0"
-              transform="translate(225,328.9) translate(-8,-4)"
-              style="animation: 10s linear infinite both a6_t, 10s linear infinite both a6_o, 10s linear infinite both a6_w;"/>
-        <g transform="translate(225,198.9) scale(1.5,1.5) translate(-42.3,-93)"
-           style="animation: 10s linear infinite both a7_t;">
-            <g transform="translate(42.3,93) scale(5.352,6.9) translate(-16,60)">
-                <g transform="translate(-34.9,-125.8)">
-                    <g transform="translate(24,5)">
-                        <path d="M33 46.5c0 3.1-0.8 5.5-2.2 7.4c-1.4 1.9-3.3 3.6-5.4 5.4c-2.2 1.7-4.5 3.6-6.3 6.2c-1.8 2.5-3.1 5.5-3.1 9.5h4.7c0-3.1 .9-5.4 2.2-7.3c1.4-1.9 3.3-3.5 5.5-5.3c2.1-1.8 4.4-3.7 6.2-6.2c1.8-2.6 3.1-5.6 3.1-9.7Z"
-                              fill="#e96020"/>
-                        <path d="M20.4 70.7c-0.6 0-1 .5-1 1.1c0 .7 .4 1.2 1 1.2h12.9c.7 0 1.2-0.5 1.2-1.2c0-0.6-0.5-1.1-1.2-1.1Z"
-                              fill="#2d323b"/>
-                        <path d="M21.8 66.6c-0.7 0-1 .6-1 1.2c0 .6 .3 1 .9 1h10.3c.6 0 1.1-0.5 1.1-1.1c0-0.6-0.5-1.1-1.1-1.1Z"
-                              fill="#2d323b"/>
-                        <path d="M21.8 53c-0.7 0-1.2 .5-1.1 1.1c0 .6 .4 1.1 1.1 1.1h10.2c.6 0 .9-0.6 .9-1.2c0-0.6-0.3-1-0.9-1Z"
-                              fill="#2d323b"/>
-                        <path d="M20.4 48.8c-0.6 0-1.2 .5-1.2 1.1c0 .7 .6 1.2 1.2 1.2h12.9c.7 0 1-0.5 1-1.1c0-0.7-0.3-1.2-1-1.2Z"
-                              fill="#2d323b"/>
-                        <path d="M16 46.5c0 4.1 1.3 7.1 3.1 9.7c1.8 2.5 4.1 4.4 6.3 6.2c2.1 1.8 4 3.6 5.4 5.5c1.4 1.9 2.2 4 2.2 7.1h4.7c0-4-1.3-7.1-3.1-9.6c-1.8-2.5-4.1-4.4-6.2-6.2c-2.2-1.8-4.1-3.4-5.5-5.3c-1.3-1.9-2.2-4.3-2.2-7.4Z"
-                              fill="#00a8d6"/>
-                    </g>
-                </g>
-            </g>
-        </g>
-    </g>
-</svg>
\ No newline at end of file

From 65416b3a8f5ddd0acb797dcc246891d8a373c5a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 11:42:48 +0200
Subject: [PATCH 29/50] chore: update .idea

---
 .idea/jsLibraryMappings.xml | 6 ++++++
 1 file changed, 6 insertions(+)
 create mode 100644 .idea/jsLibraryMappings.xml

diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml
new file mode 100644
index 0000000..d23208f
--- /dev/null
+++ b/.idea/jsLibraryMappings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JavaScriptLibraryMappings">
+    <includedPredefinedLibrary name="Node.js Core" />
+  </component>
+</project>
\ No newline at end of file

From 1e2a6db4d96d310dde30bd984f9dc910bdbb5a62 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 11:43:22 +0200
Subject: [PATCH 30/50] refactor: make the project model fields accessible by
 getters

---
 src/models/project.rs | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/models/project.rs b/src/models/project.rs
index 8bed447..c312217 100644
--- a/src/models/project.rs
+++ b/src/models/project.rs
@@ -6,8 +6,18 @@ use serde::{Deserialize, Serialize};
 #[diesel(table_name = crate::schema::projects)]
 #[diesel(check_for_backend(diesel::pg::Pg))]
 pub struct Project {
-    pub(crate) id: i32,
-    pub(crate) title: String,
+    id: i32,
+    title: String,
+}
+
+impl Project {
+    pub fn id(&self) -> i32 {
+        self.id
+    }
+
+    pub fn title(&self) -> &str {
+        &self.title
+    }
 }
 
 #[derive(Insertable, Serialize, Deserialize)]

From 7c97a6b7a0675b6f1408ec3f38a9d7b4532f5dfd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 12:06:40 +0200
Subject: [PATCH 31/50] build: pin the dependencies versions in the development
 Dockerfile

---
 docker/dev/app/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index 799f19e..838d6e0 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -2,7 +2,7 @@ FROM rust:1.80-bookworm
 
 RUN rustup target add wasm32-unknown-unknown && \
     cargo install dioxus-cli diesel_cli && \
-    apt-get update && apt-get install -y nodejs npm supervisor
+    apt-get update && apt-get install -y nodejs=18.19.0+dfsg-6~deb12u2 npm=9.2.0~ds1-1 supervisor=4.2.5-1
 
 COPY . /srv/app
 WORKDIR /srv/app

From 8206370f8f8b32edfbf90dc9e460d432b2c1a800 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 12:42:31 +0200
Subject: [PATCH 32/50] chore: update .idea

---
 .idea/vcs.xml | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 7ddfc9e..35eb1dd 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,11 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="CommitMessageInspectionProfile">
-    <profile version="1.0">
-      <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
-      <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
-    </profile>
-  </component>
   <component name="VcsDirectoryMappings">
     <mapping directory="" vcs="Git" />
   </component>

From 97d21fc4425525fbd0167f6105caf140d93e0299 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 12:45:02 +0200
Subject: [PATCH 33/50] chore: update .idea

---
 .idea/vcs.xml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 35eb1dd..7ddfc9e 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="CommitMessageInspectionProfile">
+    <profile version="1.0">
+      <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
+      <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
+    </profile>
+  </component>
   <component name="VcsDirectoryMappings">
     <mapping directory="" vcs="Git" />
   </component>

From 3980189ae201b29ce33ec87346f2948b3f92e6a5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 21:33:01 +0200
Subject: [PATCH 34/50] build: specify the user in the development Dockerfile

---
 docker-compose-dev.yml    | 21 ++++++++++-----------
 docker/dev/app/Dockerfile |  9 ++++++++-
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
index 43b704f..c515a25 100644
--- a/docker-compose-dev.yml
+++ b/docker-compose-dev.yml
@@ -3,17 +3,16 @@ services:
     build:
       dockerfile: docker/dev/app/Dockerfile
     volumes:
-      - .:/srv/app
-      - .env.dev:/srv/app/.env
-      - /srv/app/.git/
-      - /srv/app/.dioxus/
-      - /srv/app/dist/
-      - /srv/app/debug/
-      - /srv/app/node_modules/
-      - /srv/app/static/
-      - /srv/app/target/
-      - /dev/null:/srv/app/docker-compose-dev.yml
-      - /dev/null:/srv/app/docker-compose-prod.yml
+      - ./assets:/srv/app/assets
+      - ./src:/srv/app/src
+      - ./migrations:/srv/app/migrations
+      - ./Cargo.lock:/srv/app/Cargo.lock
+      - ./Cargo.toml:/srv/app/Cargo.toml
+      - ./diesel.toml:/srv/app/diesel.toml
+      - ./Dioxus.toml:/srv/app/Dioxus.toml
+      - ./package.json:/srv/app/package.json
+      - ./package-lock.json:/srv/app/package-lock.json
+      - ./tailwind.config.js:/srv/app/tailwind.config.js
     restart: always
     ports: [ "8000:8000" ]
     depends_on: [ "db" ]
diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index 838d6e0..ef23140 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -11,6 +11,13 @@ RUN npm install
 
 COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
 
+RUN chown -R 1000:1000 /srv/app
+RUN chown -R 1000:1000 /usr/local/cargo
+RUN mkdir -p /.local/share/dioxus
+RUN chown -R 1000:1000 /.local/share/dioxus
+
 HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1
-USER root
+
+USER 1000:1000
+
 CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]

From 9b742f87cc29e4867b43db19d4e9b8f5e96ac847 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 21:41:43 +0200
Subject: [PATCH 35/50] style: disable stylelint for the Tailwind at rules

---
 src/styles/tailwind.css | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css
index 6080f5f..24a8f96 100644
--- a/src/styles/tailwind.css
+++ b/src/styles/tailwind.css
@@ -1,9 +1,8 @@
-/* stylelint-disable-next-line at-rule-no-unknown */
-/*noinspection CssInvalidAtRule*/
+/* stylelint-disable */
+/* noinspection CssInvalidAtRule */
 @tailwind base;
-/* stylelint-disable-next-line at-rule-no-unknown */
-/*noinspection CssInvalidAtRule*/
+/* noinspection CssInvalidAtRule */
 @tailwind components;
-/* stylelint-disable-next-line at-rule-no-unknown */
-/*noinspection CssInvalidAtRule*/
+/* noinspection CssInvalidAtRule */
 @tailwind utilities;
+/* stylelint-enable */

From a78f6bac9456bbf989e284d42f014d698766cdb9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sat, 17 Aug 2024 23:07:34 +0200
Subject: [PATCH 36/50] build: optimize the development Dockerfile

---
 docker/dev/app/Dockerfile | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index ef23140..213053b 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -11,10 +11,10 @@ RUN npm install
 
 COPY docker/dev/app/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
 
-RUN chown -R 1000:1000 /srv/app
-RUN chown -R 1000:1000 /usr/local/cargo
-RUN mkdir -p /.local/share/dioxus
-RUN chown -R 1000:1000 /.local/share/dioxus
+RUN chown -R 1000:1000 /srv/app && \
+    chown -R 1000:1000 /usr/local/cargo && \
+    mkdir -p /.local/share/dioxus && \
+    chown -R 1000:1000 /.local/share/dioxus
 
 HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1
 

From 38be8af169195fc8668174808fd1ce48c567c076 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 19:09:40 +0200
Subject: [PATCH 37/50] refactor: make the serverside error handling more
 robust

---
 Cargo.lock                         | 157 ++++++++++++++++++++++++-----
 Cargo.toml                         |   1 +
 src/components/home.rs             |   2 +-
 src/components/project_form.rs     |   5 +-
 src/errors/error.rs                |  29 ++++++
 src/errors/error_vec.rs            |  43 ++++++++
 src/errors/mod.rs                  |   3 +
 src/errors/project_create_error.rs |  50 +++++++++
 src/main.rs                        |   1 +
 src/models/project.rs              |  21 +++-
 src/server/database_connection.rs  |   6 +-
 src/server/projects.rs             |  26 +++--
 12 files changed, 301 insertions(+), 43 deletions(-)
 create mode 100644 src/errors/error.rs
 create mode 100644 src/errors/error_vec.rs
 create mode 100644 src/errors/mod.rs
 create mode 100644 src/errors/project_create_error.rs

diff --git a/Cargo.lock b/Cargo.lock
index 282fb31..53679ab 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -29,6 +29,15 @@ dependencies = [
  "zerocopy",
 ]
 
+[[package]]
+name = "aho-corasick"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
+dependencies = [
+ "memchr",
+]
+
 [[package]]
 name = "allocator-api2"
 version = "0.2.18"
@@ -94,7 +103,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -178,7 +187,7 @@ dependencies = [
  "heck 0.4.1",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -469,7 +478,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "strsim",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -480,7 +489,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
 dependencies = [
  "darling_core",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -525,7 +534,7 @@ dependencies = [
  "dsl_auto_type",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -534,7 +543,7 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "209c735641a413bc68c4923a9d6ad4bcb3ca306b794edaa7eb0b3228a99ffb25"
 dependencies = [
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -620,7 +629,7 @@ dependencies = [
  "prettyplease",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -730,7 +739,7 @@ dependencies = [
  "convert_case",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -833,7 +842,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "slab",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -847,7 +856,7 @@ dependencies = [
  "krates",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
  "tracing",
 ]
 
@@ -923,7 +932,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "server_fn_macro",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -943,7 +952,7 @@ dependencies = [
  "heck 0.5.0",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -979,7 +988,7 @@ dependencies = [
  "darling",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -1112,7 +1121,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -1872,7 +1881,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -1923,7 +1932,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e"
 dependencies = [
  "proc-macro2",
- "syn",
+ "syn 2.0.74",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
 ]
 
 [[package]]
@@ -1983,6 +2016,35 @@ dependencies = [
  "bitflags",
 ]
 
+[[package]]
+name = "regex"
+version = "1.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
+
 [[package]]
 name = "rustc-demangle"
 version = "0.1.24"
@@ -2078,7 +2140,7 @@ checksum = "24008e81ff7613ed8e5ba0cfaf24e2c2f1e5b8a0495711e44fcd4882fca62bcf"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -2122,7 +2184,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -2181,7 +2243,7 @@ dependencies = [
  "convert_case",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
  "xxhash-rust",
 ]
 
@@ -2192,7 +2254,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "556e4fd51eb9ee3e7d9fb0febec6cef486dcbc8f7f427591dfcfebee1abe1ad4"
 dependencies = [
  "server_fn_macro",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -2256,7 +2318,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "edc90d3e8623d29a664cd8dba5078b600dd203444f00b9739f744e4c6e7aeaf2"
 dependencies = [
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -2317,6 +2379,16 @@ version = "0.11.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
 
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "unicode-ident",
+]
+
 [[package]]
 name = "syn"
 version = "2.0.74"
@@ -2357,7 +2429,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -2400,6 +2472,7 @@ dependencies = [
  "dioxus-logger",
  "dotenvy",
  "serde",
+ "validator",
 ]
 
 [[package]]
@@ -2428,7 +2501,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -2543,7 +2616,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
 
 [[package]]
@@ -2692,6 +2765,36 @@ version = "0.7.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
 
+[[package]]
+name = "validator"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db79c75af171630a3148bd3e6d7c4f42b6a9a014c2945bc5ed0020cbb8d9478e"
+dependencies = [
+ "idna",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "url",
+ "validator_derive",
+]
+
+[[package]]
+name = "validator_derive"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55591299b7007f551ed1eb79a684af7672c19c3193fb9e0a31936987bb2438ec"
+dependencies = [
+ "darling",
+ "once_cell",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.74",
+]
+
 [[package]]
 name = "valuable"
 version = "0.1.0"
@@ -2738,7 +2841,7 @@ dependencies = [
  "once_cell",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
  "wasm-bindgen-shared",
 ]
 
@@ -2772,7 +2875,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -2934,5 +3037,5 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 2.0.74",
 ]
diff --git a/Cargo.toml b/Cargo.toml
index 825ac02..9eabee1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -15,6 +15,7 @@ dioxus = { version = "0.5", features = ["fullstack", "router"] }
 dioxus-logger = "0.5.1"
 dotenvy = "0.15.7"
 serde = "1.0.208"
+validator = { version = "0.18.1", features = ["derive"] }
 
 [features]
 default = []
diff --git a/src/components/home.rs b/src/components/home.rs
index 2a4b74f..c2d3ab9 100644
--- a/src/components/home.rs
+++ b/src/components/home.rs
@@ -10,7 +10,7 @@ pub(crate) fn Home() -> Element {
         ProjectForm {
             onsubmit: move |title| {
                 spawn(async move {
-                    let _ = create_project(title).await;
+                    create_project(title).await;
                 });
             }
         }
diff --git a/src/components/project_form.rs b/src/components/project_form.rs
index 628d756..53e30ec 100644
--- a/src/components/project_form.rs
+++ b/src/components/project_form.rs
@@ -1,13 +1,14 @@
+use crate::models::project::NewProject;
 use dioxus::core_macro::{component, rsx};
 use dioxus::dioxus_core::Element;
 use dioxus::prelude::*;
 
 #[component]
-pub(crate) fn ProjectForm(onsubmit: EventHandler<String>) -> Element {
+pub(crate) fn ProjectForm(onsubmit: EventHandler<NewProject>) -> Element {
     rsx! {
         form {
             onsubmit: move |event| {
-                onsubmit(event.values().get("title").unwrap().as_value());
+                onsubmit(NewProject::new(event.values().get("title").unwrap().as_value()));
             },
             input {
                 r#type: "text",
diff --git a/src/errors/error.rs b/src/errors/error.rs
new file mode 100644
index 0000000..dc235c5
--- /dev/null
+++ b/src/errors/error.rs
@@ -0,0 +1,29 @@
+use serde::{Deserialize, Serialize};
+use std::fmt::Display;
+use std::str::FromStr;
+
+#[derive(Serialize, Deserialize, Debug)]
+pub enum Error {
+    ServerInternal,
+}
+
+// has to be implemented for Dioxus server functions
+impl Display for Error {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        match self {
+            Error::ServerInternal => write!(f, "internal server error"),
+        }
+    }
+}
+
+// has to be implemented for Dioxus server functions
+impl FromStr for Error {
+    type Err = ();
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        Ok(match s {
+            "internal server error" => Error::ServerInternal,
+            _ => return Err(()),
+        })
+    }
+}
diff --git a/src/errors/error_vec.rs b/src/errors/error_vec.rs
new file mode 100644
index 0000000..557b338
--- /dev/null
+++ b/src/errors/error_vec.rs
@@ -0,0 +1,43 @@
+use std::fmt::Display;
+use std::str::FromStr;
+
+#[derive(Debug)]
+pub struct ErrorVec<T> {
+    errors: Vec<T>,
+}
+
+impl<T> From<ErrorVec<T>> for Vec<T> {
+    fn from(e: ErrorVec<T>) -> Self {
+        e.errors
+    }
+}
+
+impl<T> From<Vec<T>> for ErrorVec<T> {
+    fn from(e: Vec<T>) -> Self {
+        ErrorVec { errors: e }
+    }
+}
+
+// has to be implemented for Dioxus server functions
+impl<T: Display> Display for ErrorVec<T> {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        write!(
+            f,
+            "{}",
+            self.errors
+                .iter()
+                .map(|e| e.to_string())
+                .collect::<Vec<String>>()
+                .join("\n")
+        )
+    }
+}
+
+// has to be implemented for Dioxus server functions
+impl<T> FromStr for ErrorVec<T> {
+    type Err = ();
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        Ok(ErrorVec { errors: Vec::new() })
+    }
+}
diff --git a/src/errors/mod.rs b/src/errors/mod.rs
new file mode 100644
index 0000000..625611e
--- /dev/null
+++ b/src/errors/mod.rs
@@ -0,0 +1,3 @@
+pub(crate) mod error;
+pub(crate) mod error_vec;
+pub(crate) mod project_create_error;
diff --git a/src/errors/project_create_error.rs b/src/errors/project_create_error.rs
new file mode 100644
index 0000000..99ec5ae
--- /dev/null
+++ b/src/errors/project_create_error.rs
@@ -0,0 +1,50 @@
+use crate::errors::error::Error;
+use crate::errors::error_vec::ErrorVec;
+use serde::{Deserialize, Serialize};
+use std::fmt::Display;
+use std::str::FromStr;
+use validator::{ValidationErrors, ValidationErrorsKind};
+
+#[derive(Serialize, Deserialize, Debug)]
+pub enum ProjectCreateError {
+    TitleTooShort,
+    Error(Error),
+}
+
+impl From<ValidationErrors> for ErrorVec<ProjectCreateError> {
+    fn from(e: ValidationErrors) -> Self {
+        e.errors()
+            .iter()
+            .flat_map(|(&field, error_kind)| match field {
+                "title_length" => match error_kind {
+                    ValidationErrorsKind::Field(validation_errors) => validation_errors
+                        .iter()
+                        .map(|validation_error| match validation_error.code.as_ref() {
+                            "length" => ProjectCreateError::TitleTooShort,
+                            _ => ProjectCreateError::Error(Error::ServerInternal),
+                        })
+                        .collect::<Vec<ProjectCreateError>>(),
+                    _ => panic!("unexpected error kind"),
+                },
+                _ => panic!("unexpected field name"),
+            })
+            .collect::<Vec<ProjectCreateError>>()
+            .into()
+    }
+}
+
+// has to be implemented for Dioxus server functions
+impl Display for ProjectCreateError {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        write!(f, "{}", dbg!(self))
+    }
+}
+
+// has to be implemented for Dioxus server functions
+impl FromStr for ProjectCreateError {
+    type Err = ();
+
+    fn from_str(s: &str) -> Result<Self, Self::Err> {
+        Ok(ProjectCreateError::Error(Error::ServerInternal))
+    }
+}
diff --git a/src/main.rs b/src/main.rs
index ff7692a..95dffb9 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,6 +1,7 @@
 #![allow(non_snake_case)]
 
 mod components;
+mod errors;
 mod models;
 mod route;
 mod schema;
diff --git a/src/models/project.rs b/src/models/project.rs
index c312217..d2a58b8 100644
--- a/src/models/project.rs
+++ b/src/models/project.rs
@@ -1,6 +1,10 @@
 use crate::schema::projects;
 use diesel::prelude::*;
 use serde::{Deserialize, Serialize};
+use validator::Validate;
+
+const TITLE_LENGTH_MIN: u64 = 1;
+const TITLE_LENGTH_MAX: u64 = 255;
 
 #[derive(Queryable, Selectable, Serialize, Deserialize)]
 #[diesel(table_name = crate::schema::projects)]
@@ -20,8 +24,19 @@ impl Project {
     }
 }
 
-#[derive(Insertable, Serialize, Deserialize)]
+#[derive(Insertable, Serialize, Deserialize, Validate, Clone, Debug)]
 #[diesel(table_name = projects)]
-pub struct NewProject<'a> {
-    pub title: &'a str,
+pub struct NewProject {
+    #[validate(length(
+        min = "TITLE_LENGTH_MIN",
+        max = "TITLE_LENGTH_MAX",
+        code = "title_length"
+    ))]
+    pub title: String,
+}
+
+impl NewProject {
+    pub fn new(title: String) -> Self {
+        Self { title }
+    }
 }
diff --git a/src/server/database_connection.rs b/src/server/database_connection.rs
index 717e63e..826f7c8 100644
--- a/src/server/database_connection.rs
+++ b/src/server/database_connection.rs
@@ -3,10 +3,10 @@ use diesel::prelude::*;
 use dotenvy::dotenv;
 use std::env;
 
-pub(crate) fn establish_database_connection() -> PgConnection {
+pub(crate) fn establish_database_connection() -> ConnectionResult<PgConnection> {
     dotenv().ok();
 
-    let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
+    let database_url =
+        env::var("DATABASE_URL").expect("The environment variable DATABASE_URL must be set.");
     PgConnection::establish(&database_url)
-        .unwrap_or_else(|_| panic!("error connecting to {}", database_url))
 }
diff --git a/src/server/projects.rs b/src/server/projects.rs
index 734e281..85bfb1a 100644
--- a/src/server/projects.rs
+++ b/src/server/projects.rs
@@ -1,21 +1,33 @@
+use crate::errors::error::Error;
+use crate::errors::error_vec::ErrorVec;
+use crate::errors::project_create_error::ProjectCreateError;
 use crate::models::project::{NewProject, Project};
 use crate::server::database_connection::establish_database_connection;
 use diesel::{RunQueryDsl, SelectableHelper};
 use dioxus::prelude::*;
+use validator::Validate;
 
 #[server]
-pub(crate) async fn create_project(title: String) -> Result<Project, ServerFnError> {
+pub(crate) async fn create_project(
+    new_project: NewProject,
+) -> Result<Project, ServerFnError<ErrorVec<ProjectCreateError>>> {
     use crate::schema::projects;
 
-    let mut connection = establish_database_connection();
+    new_project
+        .validate()
+        .map_err::<ErrorVec<ProjectCreateError>, _>(|errors| errors.into())?;
 
-    let new_project = NewProject {
-        title: title.as_str(),
-    };
+    let mut connection =
+        establish_database_connection().or::<ErrorVec<ProjectCreateError>>(Err(vec![
+            ProjectCreateError::Error(Error::ServerInternal),
+        ]
+        .into()))?;
 
-    Ok(diesel::insert_into(projects::table)
+    let new_project = diesel::insert_into(projects::table)
         .values(&new_project)
         .returning(Project::as_returning())
         .get_result(&mut connection)
-        .expect("error saving a new project"))
+        .expect("error saving a new project");
+
+    Ok(new_project)
 }

From 1656177e66a4f22fe81a89dd059a784527bebc64 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 21:16:50 +0200
Subject: [PATCH 38/50] fix: add .env to the Docker development container

---
 docker-compose-dev.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
index c515a25..2dbcb85 100644
--- a/docker-compose-dev.yml
+++ b/docker-compose-dev.yml
@@ -3,6 +3,7 @@ services:
     build:
       dockerfile: docker/dev/app/Dockerfile
     volumes:
+      - ./.env.dev:/srv/app/.env
       - ./assets:/srv/app/assets
       - ./src:/srv/app/src
       - ./migrations:/srv/app/migrations

From c537fb4e031f2201768806a25672effdb0ae96b6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 21:17:31 +0200
Subject: [PATCH 39/50] refactor: make the project form component handle the
 server calls itself

---
 src/components/home.rs             | 10 ++--------
 src/components/project_form.rs     | 10 ++++++++--
 src/errors/project_create_error.rs | 21 +++++++++++----------
 src/models/project.rs              |  2 +-
 src/server/projects.rs             |  5 +++++
 5 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/src/components/home.rs b/src/components/home.rs
index c2d3ab9..4cfbd34 100644
--- a/src/components/home.rs
+++ b/src/components/home.rs
@@ -1,5 +1,5 @@
 use crate::components::project_form::ProjectForm;
-use crate::server::projects::create_project;
+use crate::server::projects::{create_project, testing};
 use dioxus::core_macro::rsx;
 use dioxus::dioxus_core::Element;
 use dioxus::prelude::*;
@@ -7,12 +7,6 @@ use dioxus::prelude::*;
 #[component]
 pub(crate) fn Home() -> Element {
     rsx! {
-        ProjectForm {
-            onsubmit: move |title| {
-                spawn(async move {
-                    create_project(title).await;
-                });
-            }
-        }
+        ProjectForm {}
     }
 }
diff --git a/src/components/project_form.rs b/src/components/project_form.rs
index 53e30ec..036e0d7 100644
--- a/src/components/project_form.rs
+++ b/src/components/project_form.rs
@@ -1,14 +1,20 @@
 use crate::models::project::NewProject;
+use crate::server::projects::create_project;
 use dioxus::core_macro::{component, rsx};
 use dioxus::dioxus_core::Element;
 use dioxus::prelude::*;
 
 #[component]
-pub(crate) fn ProjectForm(onsubmit: EventHandler<NewProject>) -> Element {
+pub(crate) fn ProjectForm() -> Element {
     rsx! {
         form {
             onsubmit: move |event| {
-                onsubmit(NewProject::new(event.values().get("title").unwrap().as_value()));
+                async move {
+                    let new_project = NewProject::new(
+                        event.values().get("title").unwrap().as_value()
+                    );
+                    let _ = create_project(new_project).await;
+                }
             },
             input {
                 r#type: "text",
diff --git a/src/errors/project_create_error.rs b/src/errors/project_create_error.rs
index 99ec5ae..d8fad8d 100644
--- a/src/errors/project_create_error.rs
+++ b/src/errors/project_create_error.rs
@@ -7,7 +7,7 @@ use validator::{ValidationErrors, ValidationErrorsKind};
 
 #[derive(Serialize, Deserialize, Debug)]
 pub enum ProjectCreateError {
-    TitleTooShort,
+    TitleLengthInvalid,
     Error(Error),
 }
 
@@ -16,17 +16,18 @@ impl From<ValidationErrors> for ErrorVec<ProjectCreateError> {
         e.errors()
             .iter()
             .flat_map(|(&field, error_kind)| match field {
-                "title_length" => match error_kind {
+                "title" => match error_kind {
                     ValidationErrorsKind::Field(validation_errors) => validation_errors
                         .iter()
-                        .map(|validation_error| match validation_error.code.as_ref() {
-                            "length" => ProjectCreateError::TitleTooShort,
-                            _ => ProjectCreateError::Error(Error::ServerInternal),
+                        .map(|validation_error| validation_error.code.as_ref())
+                        .map(|code| match code {
+                            "title_length" => ProjectCreateError::TitleLengthInvalid,
+                            _ => panic!("unexpected validation error code: {code}"),
                         })
                         .collect::<Vec<ProjectCreateError>>(),
-                    _ => panic!("unexpected error kind"),
+                    _ => panic!("unexpected validation error kind"),
                 },
-                _ => panic!("unexpected field name"),
+                _ => panic!("unexpected validation field name: {field}"),
             })
             .collect::<Vec<ProjectCreateError>>()
             .into()
@@ -36,7 +37,7 @@ impl From<ValidationErrors> for ErrorVec<ProjectCreateError> {
 // has to be implemented for Dioxus server functions
 impl Display for ProjectCreateError {
     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        write!(f, "{}", dbg!(self))
+        write!(f, "{:?}", self)
     }
 }
 
@@ -44,7 +45,7 @@ impl Display for ProjectCreateError {
 impl FromStr for ProjectCreateError {
     type Err = ();
 
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        Ok(ProjectCreateError::Error(Error::ServerInternal))
+    fn from_str(_: &str) -> Result<Self, Self::Err> {
+        Ok(ProjectCreateError::TitleLengthInvalid)
     }
 }
diff --git a/src/models/project.rs b/src/models/project.rs
index d2a58b8..2a02eed 100644
--- a/src/models/project.rs
+++ b/src/models/project.rs
@@ -6,7 +6,7 @@ use validator::Validate;
 const TITLE_LENGTH_MIN: u64 = 1;
 const TITLE_LENGTH_MAX: u64 = 255;
 
-#[derive(Queryable, Selectable, Serialize, Deserialize)]
+#[derive(Queryable, Selectable, Serialize, Deserialize, Debug)]
 #[diesel(table_name = crate::schema::projects)]
 #[diesel(check_for_backend(diesel::pg::Pg))]
 pub struct Project {
diff --git a/src/server/projects.rs b/src/server/projects.rs
index 85bfb1a..4b2181e 100644
--- a/src/server/projects.rs
+++ b/src/server/projects.rs
@@ -7,6 +7,11 @@ use diesel::{RunQueryDsl, SelectableHelper};
 use dioxus::prelude::*;
 use validator::Validate;
 
+#[server]
+pub(crate) async fn testing(input: i32) -> Result<i32, ServerFnError> {
+    Ok(input + 1)
+}
+
 #[server]
 pub(crate) async fn create_project(
     new_project: NewProject,

From f05295324699f5ab6f63c751259fa1dd107b7cff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 22:03:49 +0200
Subject: [PATCH 40/50] style: macro formatting

---
 src/models/project.rs | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/src/models/project.rs b/src/models/project.rs
index 2a02eed..5d545e9 100644
--- a/src/models/project.rs
+++ b/src/models/project.rs
@@ -27,11 +27,7 @@ impl Project {
 #[derive(Insertable, Serialize, Deserialize, Validate, Clone, Debug)]
 #[diesel(table_name = projects)]
 pub struct NewProject {
-    #[validate(length(
-        min = "TITLE_LENGTH_MIN",
-        max = "TITLE_LENGTH_MAX",
-        code = "title_length"
-    ))]
+    #[validate(length(min = "TITLE_LENGTH_MIN", max = "TITLE_LENGTH_MAX", code = "title_length"))]
     pub title: String,
 }
 

From 85bcbad41c4b98b53a5a6c2f6051ec810eac540f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 22:04:23 +0200
Subject: [PATCH 41/50] refactor: improve error mapping

---
 src/server/projects.rs | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/server/projects.rs b/src/server/projects.rs
index 4b2181e..cbfab09 100644
--- a/src/server/projects.rs
+++ b/src/server/projects.rs
@@ -22,17 +22,18 @@ pub(crate) async fn create_project(
         .validate()
         .map_err::<ErrorVec<ProjectCreateError>, _>(|errors| errors.into())?;
 
-    let mut connection =
-        establish_database_connection().or::<ErrorVec<ProjectCreateError>>(Err(vec![
-            ProjectCreateError::Error(Error::ServerInternal),
-        ]
-        .into()))?;
+    let mut connection = establish_database_connection()
+        .map_err::<ErrorVec<ProjectCreateError>, _>(
+            |_| vec![ProjectCreateError::Error(Error::ServerInternal), ].into()
+        )?;
 
     let new_project = diesel::insert_into(projects::table)
         .values(&new_project)
         .returning(Project::as_returning())
         .get_result(&mut connection)
-        .expect("error saving a new project");
+        .map_err::<ErrorVec<ProjectCreateError>, _>(
+            |_| vec![ProjectCreateError::Error(Error::ServerInternal), ].into()
+        )?;
 
     Ok(new_project)
 }

From f10d509bc6d7bf17cdbf669040c7237d58f349c3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 22:04:43 +0200
Subject: [PATCH 42/50] chore: update .idea

---
 .idea/rust.xml | 6 ------
 .idea/vcs.xml  | 4 ++--
 2 files changed, 2 insertions(+), 8 deletions(-)
 delete mode 100644 .idea/rust.xml

diff --git a/.idea/rust.xml b/.idea/rust.xml
deleted file mode 100644
index 7bc91ea..0000000
--- a/.idea/rust.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="RsVcsConfiguration">
-    <option name="rustFmt" value="true" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 7ddfc9e..6335f8e 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,8 +2,8 @@
 <project version="4">
   <component name="CommitMessageInspectionProfile">
     <profile version="1.0">
-      <inspection_tool class="CommitFormat" enabled="true" level="WARNING" enabled_by_default="true" />
-      <inspection_tool class="CommitNamingConvention" enabled="true" level="WARNING" enabled_by_default="true" />
+      <inspection_tool class="CommitFormat" enabled="true" level="ERROR" enabled_by_default="true" />
+      <inspection_tool class="CommitNamingConvention" enabled="true" level="ERROR" enabled_by_default="true" />
     </profile>
   </component>
   <component name="VcsDirectoryMappings">

From 6c95d363612055bb873bd71a4fde475799cf61e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 22:24:15 +0200
Subject: [PATCH 43/50] chore: remove a testing function

---
 src/server/projects.rs | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/src/server/projects.rs b/src/server/projects.rs
index cbfab09..6d459d2 100644
--- a/src/server/projects.rs
+++ b/src/server/projects.rs
@@ -7,11 +7,6 @@ use diesel::{RunQueryDsl, SelectableHelper};
 use dioxus::prelude::*;
 use validator::Validate;
 
-#[server]
-pub(crate) async fn testing(input: i32) -> Result<i32, ServerFnError> {
-    Ok(input + 1)
-}
-
 #[server]
 pub(crate) async fn create_project(
     new_project: NewProject,

From afef3d5f8432868b2bf9ad1c04441fb31b8f012a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 22:26:13 +0200
Subject: [PATCH 44/50] build: move the Tailwind config to the source directory

---
 package.json                                        | 2 +-
 tailwind.config.js => src/styles/tailwind.config.js | 0
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename tailwind.config.js => src/styles/tailwind.config.js (100%)

diff --git a/package.json b/package.json
index 1efcb98..5777291 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
     "tailwindcss": "^3.4.6"
   },
   "scripts": {
-    "build": "tailwindcss -i src/styles/tailwind.css -o assets/styles/tailwind_output.css",
+    "build": "tailwindcss -c src/styles/tailwind.config.js -i src/styles/tailwind.css -o assets/styles/tailwind_output.css",
     "watch": "npm run build -- --watch"
   }
 }
diff --git a/tailwind.config.js b/src/styles/tailwind.config.js
similarity index 100%
rename from tailwind.config.js
rename to src/styles/tailwind.config.js

From 81da7e58d853692801582921205afa8e9a4715ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 22:34:12 +0200
Subject: [PATCH 45/50] fix: remove an unused import

---
 src/components/home.rs | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/components/home.rs b/src/components/home.rs
index 4cfbd34..12b1ddc 100644
--- a/src/components/home.rs
+++ b/src/components/home.rs
@@ -1,5 +1,4 @@
 use crate::components::project_form::ProjectForm;
-use crate::server::projects::{create_project, testing};
 use dioxus::core_macro::rsx;
 use dioxus::dioxus_core::Element;
 use dioxus::prelude::*;

From c8f62bbe98d01b5fba5a5ea34e8854af9d5503d1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 22:36:08 +0200
Subject: [PATCH 46/50] style: remove the attribute allowing non-snake-case
 names

---
 src/main.rs | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 95dffb9..b7109a5 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,5 +1,3 @@
-#![allow(non_snake_case)]
-
 mod components;
 mod errors;
 mod models;

From b82b472206d3a73d466b8f55b21ef463b73177e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 22:51:12 +0200
Subject: [PATCH 47/50] build: run pending Diesel migrations on the Docker
 development container start

---
 docker-compose-dev.yml       | 1 -
 docker/dev/app/Dockerfile    | 2 +-
 docker/dev/app/entrypoint.sh | 3 +++
 3 files changed, 4 insertions(+), 2 deletions(-)
 create mode 100644 docker/dev/app/entrypoint.sh

diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml
index 2dbcb85..ebd81f3 100644
--- a/docker-compose-dev.yml
+++ b/docker-compose-dev.yml
@@ -13,7 +13,6 @@ services:
       - ./Dioxus.toml:/srv/app/Dioxus.toml
       - ./package.json:/srv/app/package.json
       - ./package-lock.json:/srv/app/package-lock.json
-      - ./tailwind.config.js:/srv/app/tailwind.config.js
     restart: always
     ports: [ "8000:8000" ]
     depends_on: [ "db" ]
diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index 213053b..076aec8 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -20,4 +20,4 @@ HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1
 
 USER 1000:1000
 
-CMD ["supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
+CMD sh docker/dev/app/entrypoint.sh
diff --git a/docker/dev/app/entrypoint.sh b/docker/dev/app/entrypoint.sh
new file mode 100644
index 0000000..aab04f4
--- /dev/null
+++ b/docker/dev/app/entrypoint.sh
@@ -0,0 +1,3 @@
+diesel migration run
+
+supervisord -c /etc/supervisor/conf.d/supervisord.conf

From 5ca35cc5f1ee67abedd8c26c713d804bfe1f4a8d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 23:03:51 +0200
Subject: [PATCH 48/50] build: add a shebang to the development Docker
 container entrypoint script

---
 docker/dev/app/entrypoint.sh | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/docker/dev/app/entrypoint.sh b/docker/dev/app/entrypoint.sh
index aab04f4..3da5abe 100644
--- a/docker/dev/app/entrypoint.sh
+++ b/docker/dev/app/entrypoint.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+
 diesel migration run
 
 supervisord -c /etc/supervisor/conf.d/supervisord.conf

From fa4476bbedce66eb72235528a4647faf9c39b40f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 23:08:23 +0200
Subject: [PATCH 49/50] style: use the correct notation for Dockerfile CMD

---
 docker/dev/app/Dockerfile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docker/dev/app/Dockerfile b/docker/dev/app/Dockerfile
index 076aec8..92e8e0e 100644
--- a/docker/dev/app/Dockerfile
+++ b/docker/dev/app/Dockerfile
@@ -20,4 +20,4 @@ HEALTHCHECK CMD curl --fail http://localhost:8000 || exit 1
 
 USER 1000:1000
 
-CMD sh docker/dev/app/entrypoint.sh
+CMD ["sh", "docker/dev/app/entrypoint.sh"]

From 3a6da62502d6c473012607996790954643916a5d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matou=C5=A1=20Volf?=
 <66163112+matous-volf@users.noreply.github.com>
Date: Sun, 18 Aug 2024 23:28:24 +0200
Subject: [PATCH 50/50] build: make the development Docker container entrypoint
 script executable

---
 docker/dev/app/entrypoint.sh | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 mode change 100644 => 100755 docker/dev/app/entrypoint.sh

diff --git a/docker/dev/app/entrypoint.sh b/docker/dev/app/entrypoint.sh
old mode 100644
new mode 100755