aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.envrc1
-rw-r--r--.gitignore1
-rw-r--r--Cargo.lock939
-rw-r--r--Cargo.nix1693
-rw-r--r--Makefile2
-rw-r--r--default.nix28
-rw-r--r--doc/api/garage-admin-v0.yml6
-rw-r--r--doc/book/connect/_index.md7
-rw-r--r--doc/book/connect/apps/index.md65
-rw-r--r--doc/book/connect/backup.md34
-rw-r--r--doc/book/connect/cli.md72
-rw-r--r--doc/book/connect/observability.md57
-rw-r--r--doc/book/cookbook/_index.md14
-rw-r--r--doc/book/cookbook/ansible.md51
-rw-r--r--doc/book/cookbook/binary-packages.md28
-rw-r--r--doc/book/cookbook/gateways.md2
-rw-r--r--doc/book/cookbook/kubernetes.md3
-rw-r--r--doc/book/cookbook/monitoring.md251
-rw-r--r--doc/book/cookbook/real-world.md10
-rw-r--r--doc/book/cookbook/reverse-proxy.md182
-rw-r--r--doc/book/cookbook/upgrading.md81
-rw-r--r--doc/book/design/_index.md12
-rw-r--r--doc/book/design/related-work.md3
-rw-r--r--doc/book/development/devenv.md2
-rw-r--r--doc/book/development/release-process.md2
-rw-r--r--doc/book/quick-start/_index.md6
-rw-r--r--doc/book/reference-manual/admin-api.md2
-rw-r--r--doc/book/reference-manual/configuration.md44
-rw-r--r--doc/book/reference-manual/k2v.md4
-rw-r--r--doc/book/reference-manual/monitoring.md285
-rw-r--r--doc/book/reference-manual/s3-compatibility.md2
-rw-r--r--doc/book/working-documents/migration-08.md25
-rw-r--r--doc/drafts/k2v-spec.md67
-rw-r--r--doc/logo/garage_hires_crop.pngbin0 -> 41924 bytes
-rw-r--r--doc/sticker/Garage.svg182
-rw-r--r--doc/sticker/Garage_NGI.pdf (renamed from doc/sticker/Garage.pdf)0
-rw-r--r--doc/sticker/Garage_NGI.png (renamed from doc/sticker/Garage.png)bin15861 -> 15861 bytes
-rw-r--r--doc/sticker/Garage_NGI.svg1
-rw-r--r--doc/talks/.envrc1
-rw-r--r--doc/talks/2023-01-18-tocatta/.gitignore17
-rw-r--r--doc/talks/2023-01-18-tocatta/Makefile34
-rw-r--r--doc/talks/2023-01-18-tocatta/abstract.md39
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/AGPLv3_Logo.pngbin0 -> 32497 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme.pngbin0 -> 117865 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme.svg1241
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.drawio.pdfbin0 -> 31966 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.pngbin0 -> 26898 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.drawio.pdfbin0 -> 31688 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.pngbin0 -> 27405 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.drawio.pdfbin0 -> 31073 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.pngbin0 -> 9090 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.drawio.pdfbin0 -> 25145 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.pngbin0 -> 17869 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/alex.jpgbin0 -> 4914 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/atuin.jpgbin0 -> 269747 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/compatibility.pngbin0 -> 84505 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/consensus.svg137
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/consistent_hashing_1.svg301
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/consistent_hashing_2.svg334
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/consistent_hashing_3.svg358
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/consistent_hashing_4.svg377
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/deuxfleurs.svg91
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/endpoint-latency-dc.pngbin0 -> 131776 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/garage.drawio.pdfbin0 -> 26098 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/garage.drawio.pngbin0 -> 13463 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/garage2.drawio.pngbin0 -> 89618 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/garage2a.drawio.pdfbin0 -> 33911 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/garage2b.drawio.pdfbin0 -> 31051 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/garage_tables.svg537
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/inframap.jpgbin0 -> 38247 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/lattice1.svg433
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/lattice2.svg514
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/lattice3.svg515
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/lattice4.svg525
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/lattice5.svg536
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/lattice6.svg553
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/lattice7.svg581
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/lattice8.svg581
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_1.svg576
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_10.svg715
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_2.svg576
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_3.svg576
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_4.svg587
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_5.svg604
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_6.svg632
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_7.svg654
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_8.svg671
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/latticeB_9.svg699
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/location-aware.pngbin0 -> 99269 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/logo_chatons.pngbin0 -> 203533 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/map.pngbin0 -> 148270 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/minio.pngbin0 -> 13497 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/neptune.jpgbin0 -> 177936 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/quentin.jpgbin0 -> 39221 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/rust_logo.pngbin0 -> 14835 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/slide1.pngbin0 -> 89059 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/slide2.pngbin0 -> 83364 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/slide3.pngbin0 -> 127275 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/slideB1.pngbin0 -> 86072 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/slideB2.pngbin0 -> 83399 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/slideB3.pngbin0 -> 82581 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/slides.svg4326
-rw-r--r--doc/talks/2023-01-18-tocatta/assets/slidesB.svg444
-rw-r--r--doc/talks/2023-01-18-tocatta/talk.pdfbin0 -> 2657696 bytes
-rw-r--r--doc/talks/2023-01-18-tocatta/talk.tex935
-rw-r--r--doc/talks/shell.nix12
-rw-r--r--flake.lock16
-rw-r--r--flake.nix46
-rw-r--r--nix/build_index.nix257
-rw-r--r--nix/common.nix11
-rw-r--r--nix/compile.nix417
-rw-r--r--nix/kaniko.nix3
-rw-r--r--nix/manifest-tool.nix3
-rw-r--r--nix/toolchain.nix38
-rw-r--r--nix/winscp.nix10
-rw-r--r--script/helm/garage/Chart.yaml4
-rw-r--r--script/helm/garage/templates/configmap.yaml26
-rw-r--r--script/helm/garage/templates/service.yaml21
-rw-r--r--script/helm/garage/templates/servicemonitor.yaml44
-rw-r--r--script/helm/garage/templates/workload.yaml (renamed from script/helm/garage/templates/statefulset.yaml)36
-rw-r--r--script/helm/garage/values.yaml85
-rw-r--r--shell.nix303
-rw-r--r--src/api/Cargo.toml26
-rw-r--r--src/api/admin/api_server.rs56
-rw-r--r--src/api/admin/bucket.rs4
-rw-r--r--src/api/admin/cluster.rs2
-rw-r--r--src/api/admin/router.rs3
-rw-r--r--src/api/generic_server.rs16
-rw-r--r--src/api/k2v/api_server.rs3
-rw-r--r--src/api/k2v/batch.rs96
-rw-r--r--src/api/k2v/error.rs2
-rw-r--r--src/api/k2v/index.rs9
-rw-r--r--src/api/k2v/item.rs19
-rw-r--r--src/api/k2v/router.rs8
-rw-r--r--src/api/s3/bucket.rs2
-rw-r--r--src/api/s3/error.rs2
-rw-r--r--src/api/s3/list.rs11
-rw-r--r--src/api/s3/post_object.rs5
-rw-r--r--src/api/s3/put.rs96
-rw-r--r--src/api/signature/error.rs2
-rw-r--r--src/block/Cargo.toml14
-rw-r--r--src/block/manager.rs79
-rw-r--r--src/block/metrics.rs17
-rw-r--r--src/block/rc.rs14
-rw-r--r--src/block/repair.rs163
-rw-r--r--src/block/resync.rs108
-rw-r--r--src/db/Cargo.toml10
-rw-r--r--src/garage/Cargo.toml26
-rw-r--r--src/garage/admin.rs249
-rw-r--r--src/garage/cli/cmd.rs18
-rw-r--r--src/garage/cli/init.rs4
-rw-r--r--src/garage/cli/structs.rs36
-rw-r--r--src/garage/cli/util.rs10
-rw-r--r--src/garage/main.rs48
-rw-r--r--src/garage/repair/offline.rs9
-rw-r--r--src/garage/repair/online.rs6
-rw-r--r--src/garage/server.rs5
-rw-r--r--src/garage/tests/admin.rs27
-rw-r--r--src/garage/tests/bucket.rs4
-rw-r--r--src/garage/tests/common/client.rs12
-rw-r--r--src/garage/tests/common/custom_requester.rs9
-rw-r--r--src/garage/tests/common/garage.rs49
-rw-r--r--src/garage/tests/common/mod.rs13
-rw-r--r--src/garage/tests/k2v/batch.rs103
-rw-r--r--src/garage/tests/k2v/item.rs37
-rw-r--r--src/garage/tests/k2v/poll.rs173
-rw-r--r--src/garage/tests/s3/streaming_signature.rs2
-rw-r--r--src/garage/tests/s3/website.rs173
-rw-r--r--src/k2v-client/Cargo.toml19
-rw-r--r--src/k2v-client/bin/k2v-cli.rs203
-rw-r--r--src/k2v-client/lib.rs89
-rw-r--r--src/model/Cargo.toml20
-rw-r--r--src/model/garage.rs45
-rw-r--r--src/model/k2v/causality.rs65
-rw-r--r--src/model/k2v/item_table.rs17
-rw-r--r--src/model/k2v/mod.rs4
-rw-r--r--src/model/k2v/poll.rs50
-rw-r--r--src/model/k2v/rpc.rs275
-rw-r--r--src/model/k2v/seen.rs105
-rw-r--r--src/model/k2v/sub.rs110
-rw-r--r--src/rpc/Cargo.toml10
-rw-r--r--src/rpc/consul.rs2
-rw-r--r--src/rpc/lib.rs4
-rw-r--r--src/rpc/rpc_helper.rs5
-rw-r--r--src/rpc/system.rs104
-rw-r--r--src/rpc/system_metrics.rs77
-rw-r--r--src/table/Cargo.toml10
-rw-r--r--src/table/data.rs24
-rw-r--r--src/util/Cargo.toml15
-rw-r--r--src/util/background/mod.rs1
-rw-r--r--src/util/background/vars.rs113
-rw-r--r--src/util/build.rs8
-rw-r--r--src/util/config.rs176
-rw-r--r--src/util/data.rs4
-rw-r--r--src/util/forwarded_headers.rs63
-rw-r--r--src/util/lib.rs2
-rw-r--r--src/util/persister.rs34
-rw-r--r--src/util/time.rs2
-rw-r--r--src/util/token_bucket.rs40
-rw-r--r--src/util/version.rs4
-rw-r--r--src/web/Cargo.toml12
-rw-r--r--src/web/web_server.rs16
202 files changed, 25936 insertions, 2768 deletions
diff --git a/.envrc b/.envrc
new file mode 100644
index 00000000..3550a30f
--- /dev/null
+++ b/.envrc
@@ -0,0 +1 @@
+use flake
diff --git a/.gitignore b/.gitignore
index 95f8a160..ef7a56eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/pki
**/*.rs.bk
*.swp
+/.direnv \ No newline at end of file
diff --git a/Cargo.lock b/Cargo.lock
index 7561b9cf..a7cca947 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -59,6 +59,55 @@ dependencies = [
]
[[package]]
+name = "anstream"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
name = "anyhow"
version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -88,16 +137,16 @@ dependencies = [
[[package]]
name = "async-compression"
-version = "0.3.10"
+version = "0.3.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00461f243d703f6999c8e7494f077799f1362720a55ae49a90ffe6214032fc0b"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
dependencies = [
"futures-core",
"memchr",
"pin-project-lite",
"tokio",
- "zstd",
- "zstd-safe",
+ "zstd 0.11.2+zstd.1.5.2",
+ "zstd-safe 5.0.2+zstd.1.5.2",
]
[[package]]
@@ -118,7 +167,7 @@ checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -129,7 +178,7 @@ checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -138,22 +187,13 @@ version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
- "hermit-abi",
+ "hermit-abi 0.1.19",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
-version = "0.1.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
-dependencies = [
- "autocfg 1.1.0",
-]
-
-[[package]]
-name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
@@ -401,7 +441,7 @@ checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
dependencies = [
"getrandom",
"instant",
- "rand 0.8.5",
+ "rand",
]
[[package]]
@@ -426,6 +466,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
name = "bincode"
version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -442,13 +488,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "blake2"
-version = "0.9.2"
+version = "0.10.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174"
+checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
dependencies = [
- "crypto-mac 0.8.0",
- "digest 0.9.0",
- "opaque-debug",
+ "digest 0.10.3",
]
[[package]]
@@ -557,57 +601,57 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
dependencies = [
"bitflags",
- "textwrap 0.11.0",
+ "textwrap",
"unicode-width",
]
[[package]]
name = "clap"
-version = "3.1.18"
+version = "4.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
+checksum = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62"
dependencies = [
- "atty",
- "bitflags",
+ "clap_builder",
"clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
"clap_lex",
- "indexmap",
- "lazy_static",
"strsim",
- "termcolor",
- "textwrap 0.15.0",
]
[[package]]
name = "clap_derive"
-version = "3.1.18"
+version = "4.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"
+checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
dependencies = [
"heck 0.4.0",
- "proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.15",
]
[[package]]
name = "clap_lex"
-version = "0.2.0"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213"
-dependencies = [
- "os_str_bytes",
-]
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
[[package]]
-name = "cloudabi"
-version = "0.0.3"
+name = "colorchoice"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
-dependencies = [
- "bitflags",
-]
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
name = "core-foundation"
@@ -668,7 +712,7 @@ version = "0.9.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"cfg-if 1.0.0",
"crossbeam-utils 0.8.8",
"lazy_static",
@@ -717,16 +761,6 @@ dependencies = [
[[package]]
name = "crypto-mac"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
-dependencies = [
- "generic-array",
- "subtle",
-]
-
-[[package]]
-name = "crypto-mac"
version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
@@ -765,7 +799,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -776,7 +810,7 @@ checksum = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5"
dependencies = [
"darling_core",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -797,7 +831,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -885,11 +919,32 @@ dependencies = [
"proc-macro2",
"quote",
"rustversion",
- "syn",
+ "syn 1.0.94",
"synstructure",
]
[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
name = "fallible-iterator"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -943,12 +998,6 @@ dependencies = [
]
[[package]]
-name = "fuchsia-cprng"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
-
-[[package]]
name = "futures"
version = "0.3.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1004,7 +1053,7 @@ checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -1048,13 +1097,13 @@ dependencies = [
[[package]]
name = "garage"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
"assert-json-diff",
"async-trait",
"aws-sdk-s3",
"backtrace",
- "base64",
+ "base64 0.21.0",
"bytes",
"bytesize",
"chrono",
@@ -1079,7 +1128,7 @@ dependencies = [
"opentelemetry-prometheus",
"parse_duration",
"prometheus",
- "rand 0.8.5",
+ "rand",
"serde",
"serde_bytes",
"serde_json",
@@ -1095,10 +1144,10 @@ dependencies = [
[[package]]
name = "garage_api"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
"async-trait",
- "base64",
+ "base64 0.21.0",
"bytes",
"chrono",
"crypto-common",
@@ -1115,9 +1164,9 @@ dependencies = [
"hmac 0.12.1",
"http",
"http-range",
- "httpdate 0.3.2",
+ "httpdate",
"hyper",
- "idna",
+ "idna 0.3.0",
"md-5 0.10.1",
"multer",
"nom",
@@ -1140,7 +1189,7 @@ dependencies = [
[[package]]
name = "garage_block"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
"arc-swap",
"async-compression",
@@ -1154,20 +1203,20 @@ dependencies = [
"garage_util",
"hex",
"opentelemetry",
- "rand 0.8.5",
+ "rand",
"serde",
"serde_bytes",
"tokio",
"tokio-util 0.6.9",
"tracing",
- "zstd",
+ "zstd 0.12.3+zstd.1.5.2",
]
[[package]]
name = "garage_db"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
- "clap 3.1.18",
+ "clap 4.2.4",
"err-derive",
"heed",
"hexdump",
@@ -1180,11 +1229,11 @@ dependencies = [
[[package]]
name = "garage_model"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
"arc-swap",
"async-trait",
- "base64",
+ "base64 0.21.0",
"blake2",
"err-derive",
"futures",
@@ -1197,17 +1246,17 @@ dependencies = [
"hex",
"netapp",
"opentelemetry",
- "rand 0.8.5",
+ "rand",
"serde",
"serde_bytes",
"tokio",
"tracing",
- "zstd",
+ "zstd 0.12.3+zstd.1.5.2",
]
[[package]]
name = "garage_rpc"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
"arc-swap",
"async-trait",
@@ -1226,12 +1275,13 @@ dependencies = [
"netapp",
"opentelemetry",
"pnet_datalink",
- "rand 0.8.5",
+ "rand",
"reqwest",
"schemars",
"serde",
"serde_bytes",
"serde_json",
+ "systemstat",
"tokio",
"tokio-stream",
"tracing",
@@ -1239,7 +1289,7 @@ dependencies = [
[[package]]
name = "garage_table"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
"arc-swap",
"async-trait",
@@ -1252,7 +1302,7 @@ dependencies = [
"hex",
"hexdump",
"opentelemetry",
- "rand 0.8.5",
+ "rand",
"serde",
"serde_bytes",
"tokio",
@@ -1261,7 +1311,7 @@ dependencies = [
[[package]]
name = "garage_util"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
"arc-swap",
"async-trait",
@@ -1278,10 +1328,12 @@ dependencies = [
"http",
"hyper",
"lazy_static",
+ "mktemp",
"netapp",
"opentelemetry",
- "rand 0.8.5",
+ "rand",
"rmp-serde 1.1.1",
+ "rustc_version",
"serde",
"serde_json",
"sha2 0.10.2",
@@ -1293,7 +1345,7 @@ dependencies = [
[[package]]
name = "garage_web"
-version = "0.8.1"
+version = "0.8.2"
dependencies = [
"err-derive",
"futures",
@@ -1364,7 +1416,7 @@ dependencies = [
"proc-macro-hack",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -1388,18 +1440,18 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.11.2"
+version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
dependencies = [
"ahash 0.7.6",
]
[[package]]
name = "hashlink"
-version = "0.7.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf"
+checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
dependencies = [
"hashbrown",
]
@@ -1467,6 +1519,12 @@ dependencies = [
]
[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1488,7 +1546,7 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
dependencies = [
- "crypto-mac 0.11.1",
+ "crypto-mac",
"digest 0.9.0",
]
@@ -1543,12 +1601,6 @@ checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4"
[[package]]
name = "httpdate"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
-
-[[package]]
-name = "httpdate"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
@@ -1576,7 +1628,7 @@ dependencies = [
"http",
"http-body",
"httparse",
- "httpdate 1.0.2",
+ "httpdate",
"itoa",
"pin-project-lite",
"socket2",
@@ -1648,12 +1700,22 @@ dependencies = [
]
[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
name = "indexmap"
-version = "1.8.0"
+version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"hashbrown",
]
@@ -1667,6 +1729,17 @@ dependencies = [
]
[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
name = "ipnet"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1674,21 +1747,32 @@ checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
[[package]]
name = "ipnetwork"
-version = "0.18.0"
+version = "0.20.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4088d739b183546b239688ddbc79891831df421773df95e236daf7867866d355"
+checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e"
dependencies = [
"serde",
]
[[package]]
+name = "is-terminal"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
name = "isolang"
-version = "1.0.0"
+version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "265ef164908329e47e753c769b14cbb27434abf0c41984dca201484022f09ce5"
+checksum = "b64fd6448ee8a45ce6e4365c58e4fa7d8740cba2ed70db3e9ab4879ebd93eaaa"
dependencies = [
"phf",
- "phf_codegen",
]
[[package]]
@@ -1754,12 +1838,13 @@ dependencies = [
[[package]]
name = "k2v-client"
-version = "0.0.1"
+version = "0.1.1"
dependencies = [
- "base64",
- "clap 3.1.18",
+ "base64 0.21.0",
+ "clap 4.2.4",
"garage_util",
"http",
+ "hyper-rustls 0.23.0",
"log",
"rusoto_core",
"rusoto_credential",
@@ -1776,7 +1861,7 @@ version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d9455388f4977de4d0934efa9f7d36296295537d774574113a20f6082de03da"
dependencies = [
- "base64",
+ "base64 0.13.0",
"bytes",
"chrono",
"http",
@@ -1806,7 +1891,7 @@ version = "0.75.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "97e1a80ecd1b1438a2fc004549e155d47250b9e01fbfcf4cfbe9c8b56a085593"
dependencies = [
- "base64",
+ "base64 0.13.0",
"bytes",
"chrono",
"dirs-next",
@@ -1864,7 +1949,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_json",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -1923,9 +2008,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
-version = "0.2.121"
+version = "0.2.142"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f"
+checksum = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"
[[package]]
name = "libsodium-sys"
@@ -1941,9 +2026,9 @@ dependencies = [
[[package]]
name = "libsqlite3-sys"
-version = "0.24.2"
+version = "0.25.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14"
+checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
dependencies = [
"cc",
"pkg-config",
@@ -1957,6 +2042,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
[[package]]
+name = "linux-raw-sys"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf"
+
+[[package]]
name = "lmdb-rkv-sys"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2032,7 +2123,7 @@ version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
]
[[package]]
@@ -2058,32 +2149,21 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.2"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
dependencies = [
"libc",
"log",
- "miow",
- "ntapi",
"wasi 0.11.0+wasi-snapshot-preview1",
- "winapi",
-]
-
-[[package]]
-name = "miow"
-version = "0.3.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
-dependencies = [
- "winapi",
+ "windows-sys 0.45.0",
]
[[package]]
name = "mktemp"
-version = "0.4.1"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "975de676448231fcde04b9149d2543077e166b78fc29eae5aa219e7928410da2"
+checksum = "4bdc1f74dd7bb717d39f784f844e490d935b3aa7e383008006dbbf29c1f7820a"
dependencies = [
"uuid",
]
@@ -2131,7 +2211,7 @@ dependencies = [
"opentelemetry",
"opentelemetry-contrib",
"pin-project",
- "rand 0.8.5",
+ "rand",
"rmp-serde 0.15.5",
"serde",
"tokio",
@@ -2140,6 +2220,12 @@ dependencies = [
]
[[package]]
+name = "no-std-net"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65"
+
+[[package]]
name = "nom"
version = "7.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2150,12 +2236,12 @@ dependencies = [
]
[[package]]
-name = "ntapi"
-version = "0.3.7"
+name = "nom8"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
+checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8"
dependencies = [
- "winapi",
+ "memchr",
]
[[package]]
@@ -2178,7 +2264,7 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-integer",
"num-traits",
]
@@ -2189,7 +2275,7 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-traits",
]
@@ -2199,7 +2285,7 @@ version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-traits",
]
@@ -2209,7 +2295,7 @@ version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-integer",
"num-traits",
]
@@ -2220,7 +2306,7 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
"num-bigint",
"num-integer",
"num-traits",
@@ -2232,7 +2318,7 @@ version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
dependencies = [
- "autocfg 1.1.0",
+ "autocfg",
]
[[package]]
@@ -2241,7 +2327,7 @@ version = "1.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
dependencies = [
- "hermit-abi",
+ "hermit-abi 0.1.19",
"libc",
]
@@ -2265,9 +2351,9 @@ dependencies = [
[[package]]
name = "once_cell"
-version = "1.10.0"
+version = "1.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
[[package]]
name = "opaque-debug"
@@ -2298,7 +2384,7 @@ dependencies = [
"lazy_static",
"percent-encoding",
"pin-project",
- "rand 0.8.5",
+ "rand",
"thiserror",
"tokio",
"tokio-stream",
@@ -2353,12 +2439,6 @@ dependencies = [
]
[[package]]
-name = "os_str_bytes"
-version = "6.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "029d8d0b2f198229de29dca79676f2738ff952edf3fde542eb8bf94d8c21b435"
-
-[[package]]
name = "page_size"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2413,7 +2493,7 @@ dependencies = [
"libc",
"redox_syscall",
"smallvec",
- "windows-sys",
+ "windows-sys 0.32.0",
]
[[package]]
@@ -2439,7 +2519,7 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "03c64931a1a212348ec4f3b4362585eca7159d0d09cbdf4a7f74f02173596fd4"
dependencies = [
- "base64",
+ "base64 0.13.0",
]
[[package]]
@@ -2460,38 +2540,18 @@ dependencies = [
[[package]]
name = "phf"
-version = "0.7.24"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
-dependencies = [
- "phf_shared",
-]
-
-[[package]]
-name = "phf_codegen"
-version = "0.7.24"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
-dependencies = [
- "phf_generator",
- "phf_shared",
-]
-
-[[package]]
-name = "phf_generator"
-version = "0.7.24"
+version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
dependencies = [
"phf_shared",
- "rand 0.6.5",
]
[[package]]
name = "phf_shared"
-version = "0.7.24"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
dependencies = [
"siphasher",
]
@@ -2513,7 +2573,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -2536,15 +2596,18 @@ checksum = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"
[[package]]
name = "pnet_base"
-version = "0.28.0"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25488cd551a753dcaaa6fffc9f69a7610a412dd8954425bf7ffad5f7d1156fb8"
+checksum = "872e46346144ebf35219ccaa64b1dffacd9c6f188cd7d012bd6977a2a838f42e"
+dependencies = [
+ "no-std-net",
+]
[[package]]
name = "pnet_datalink"
-version = "0.28.0"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4d1f8ab1ef6c914cf51dc5dfe0be64088ea5f3b08bbf5a31abc70356d271198"
+checksum = "c302da22118d2793c312a35fb3da6846cb0fab6c3ad53fd67e37809b06cdafce"
dependencies = [
"ipnetwork",
"libc",
@@ -2555,9 +2618,9 @@ dependencies = [
[[package]]
name = "pnet_sys"
-version = "0.28.0"
+version = "0.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9a3f32b0df45515befd19eed04616f6b56a488da92afc61164ef455e955f07f"
+checksum = "faf7a58b2803d818a374be9278a1fe8f88fce14b936afbe225000cfcd9c73f16"
dependencies = [
"libc",
"winapi",
@@ -2588,7 +2651,7 @@ dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
"version_check",
]
@@ -2611,9 +2674,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]]
name = "proc-macro2"
-version = "1.0.46"
+version = "1.0.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
dependencies = [
"unicode-ident",
]
@@ -2673,7 +2736,7 @@ dependencies = [
"itertools 0.10.3",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -2700,9 +2763,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
[[package]]
name = "quick-xml"
-version = "0.21.0"
+version = "0.26.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0452695941410a58c8ce4391707ba9bad26a247173bd9886a05a5e8a8babec75"
+checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd"
dependencies = [
"memchr",
"serde",
@@ -2710,51 +2773,22 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.21"
+version = "1.0.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
dependencies = [
"proc-macro2",
]
[[package]]
name = "rand"
-version = "0.6.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
-dependencies = [
- "autocfg 0.1.8",
- "libc",
- "rand_chacha 0.1.1",
- "rand_core 0.4.2",
- "rand_hc",
- "rand_isaac",
- "rand_jitter",
- "rand_os",
- "rand_pcg",
- "rand_xorshift",
- "winapi",
-]
-
-[[package]]
-name = "rand"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [
"libc",
- "rand_chacha 0.3.1",
- "rand_core 0.6.3",
-]
-
-[[package]]
-name = "rand_chacha"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
-dependencies = [
- "autocfg 0.1.8",
- "rand_core 0.3.1",
+ "rand_chacha",
+ "rand_core",
]
[[package]]
@@ -2764,26 +2798,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [
"ppv-lite86",
- "rand_core 0.6.3",
-]
-
-[[package]]
-name = "rand_core"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
-dependencies = [
- "rand_core 0.4.2",
+ "rand_core",
]
[[package]]
name = "rand_core"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
-
-[[package]]
-name = "rand_core"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
@@ -2792,77 +2811,6 @@ dependencies = [
]
[[package]]
-name = "rand_hc"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
-dependencies = [
- "rand_core 0.3.1",
-]
-
-[[package]]
-name = "rand_isaac"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
-dependencies = [
- "rand_core 0.3.1",
-]
-
-[[package]]
-name = "rand_jitter"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
-dependencies = [
- "libc",
- "rand_core 0.4.2",
- "winapi",
-]
-
-[[package]]
-name = "rand_os"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
-dependencies = [
- "cloudabi",
- "fuchsia-cprng",
- "libc",
- "rand_core 0.4.2",
- "rdrand",
- "winapi",
-]
-
-[[package]]
-name = "rand_pcg"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
-dependencies = [
- "autocfg 0.1.8",
- "rand_core 0.4.2",
-]
-
-[[package]]
-name = "rand_xorshift"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
-dependencies = [
- "rand_core 0.3.1",
-]
-
-[[package]]
-name = "rdrand"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
-dependencies = [
- "rand_core 0.3.1",
-]
-
-[[package]]
name = "redox_syscall"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2923,7 +2871,7 @@ version = "0.11.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "431949c384f4e2ae07605ccaa56d1d9d2ecdb5cadd4f9577ccfab29f2e5149fc"
dependencies = [
- "base64",
+ "base64 0.13.0",
"bytes",
"encoding_rs",
"futures-core",
@@ -3019,7 +2967,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1db30db44ea73551326269adcf7a2169428a054f14faf9e1768f2163494f2fa2"
dependencies = [
"async-trait",
- "base64",
+ "base64 0.13.0",
"bytes",
"crc32fast",
"futures",
@@ -3061,7 +3009,7 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5ae95491c8b4847931e291b151127eccd6ff8ca13f33603eb3d0035ecb05272"
dependencies = [
- "base64",
+ "base64 0.13.0",
"bytes",
"chrono",
"digest 0.9.0",
@@ -3083,16 +3031,15 @@ dependencies = [
[[package]]
name = "rusqlite"
-version = "0.27.0"
+version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85127183a999f7db96d1a976a309eebbfb6ea3b0b400ddd8340190129de6eb7a"
+checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
dependencies = [
"bitflags",
"fallible-iterator",
"fallible-streaming-iterator",
"hashlink",
"libsqlite3-sys",
- "memchr",
"smallvec",
]
@@ -3112,12 +3059,26 @@ dependencies = [
]
[[package]]
+name = "rustix"
+version = "0.37.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
name = "rustls"
version = "0.19.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
dependencies = [
- "base64",
+ "base64 0.13.0",
"log",
"ring",
"sct 0.6.1",
@@ -3166,7 +3127,7 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55"
dependencies = [
- "base64",
+ "base64 0.13.0",
]
[[package]]
@@ -3221,7 +3182,7 @@ dependencies = [
"proc-macro2",
"quote",
"serde_derive_internals",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -3291,9 +3252,9 @@ checksum = "a4a3381e03edd24287172047536f20cabde766e2cd3e65e6b00fb3af51c4f38d"
[[package]]
name = "serde"
-version = "1.0.137"
+version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
+checksum = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"
dependencies = [
"serde_derive",
]
@@ -3319,13 +3280,13 @@ dependencies = [
[[package]]
name = "serde_derive"
-version = "1.0.137"
+version = "1.0.160"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
+checksum = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.15",
]
[[package]]
@@ -3336,7 +3297,7 @@ checksum = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -3352,6 +3313,15 @@ dependencies = [
]
[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
name = "serde_urlencoded"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3436,9 +3406,9 @@ dependencies = [
[[package]]
name = "siphasher"
-version = "0.2.3"
+version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
[[package]]
name = "slab"
@@ -3470,9 +3440,9 @@ checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
[[package]]
name = "socket2"
-version = "0.4.4"
+version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
dependencies = [
"libc",
"winapi",
@@ -3515,7 +3485,7 @@ dependencies = [
"memchr",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -3545,7 +3515,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -3566,6 +3536,17 @@ dependencies = [
]
[[package]]
+name = "syn"
+version = "2.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
name = "synchronoise"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3582,11 +3563,25 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
"unicode-xid",
]
[[package]]
+name = "systemstat"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24aec24a9312c83999a28e3ef9db7e2afd5c64bf47725b758cdc1cafd5b0bd2"
+dependencies = [
+ "bytesize",
+ "lazy_static",
+ "libc",
+ "nom",
+ "time 0.3.9",
+ "winapi",
+]
+
+[[package]]
name = "tempfile"
version = "3.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3619,12 +3614,6 @@ dependencies = [
]
[[package]]
-name = "textwrap"
-version = "0.15.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
-
-[[package]]
name = "thiserror"
version = "1.0.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3641,7 +3630,7 @@ checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -3676,9 +3665,9 @@ dependencies = [
[[package]]
name = "timeago"
-version = "0.3.1"
+version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ec32dde57efb15c035ac074118d7f32820451395f28cb0524a01d4e94983b26"
+checksum = "5082dc942361cdfb74eab98bf995762d6015e5bb3a20bf7c5c71213778b4fcb4"
dependencies = [
"chrono",
"isolang",
@@ -3701,22 +3690,21 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "tokio"
-version = "1.17.0"
+version = "1.27.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee"
+checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
dependencies = [
+ "autocfg",
"bytes",
"libc",
- "memchr",
"mio",
"num_cpus",
- "once_cell",
"parking_lot 0.12.0",
"pin-project-lite",
"signal-hook-registry",
"socket2",
"tokio-macros",
- "winapi",
+ "windows-sys 0.45.0",
]
[[package]]
@@ -3731,13 +3719,13 @@ dependencies = [
[[package]]
name = "tokio-macros"
-version = "1.7.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
+checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 2.0.15",
]
[[package]]
@@ -3805,11 +3793,36 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.5.8"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
+checksum = "4fb9d890e4dc9298b70f740f615f2e05b9db37dce531f6b24fb77ac993f9f217"
dependencies = [
"serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b"
+dependencies = [
+ "indexmap",
+ "nom8",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
]
[[package]]
@@ -3820,7 +3833,7 @@ checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
dependencies = [
"async-stream",
"async-trait",
- "base64",
+ "base64 0.13.0",
"bytes",
"futures-core",
"futures-util",
@@ -3852,7 +3865,7 @@ dependencies = [
"proc-macro2",
"prost-build",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -3866,7 +3879,7 @@ dependencies = [
"indexmap",
"pin-project",
"pin-project-lite",
- "rand 0.8.5",
+ "rand",
"slab",
"tokio",
"tokio-util 0.7.0",
@@ -3881,7 +3894,7 @@ version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d342c6d58709c0a6d48d48dabbb62d4ef955cf5f0f3bbfd845838e7ae88dbae"
dependencies = [
- "base64",
+ "base64 0.13.0",
"bitflags",
"bytes",
"futures-core",
@@ -3928,7 +3941,7 @@ checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
]
[[package]]
@@ -4048,21 +4061,26 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
[[package]]
name = "url"
-version = "2.2.2"
+version = "2.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
+checksum = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3"
dependencies = [
"form_urlencoded",
- "idna",
- "matches",
+ "idna 0.2.3",
"percent-encoding",
]
[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
name = "uuid"
-version = "0.8.2"
+version = "1.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+checksum = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"
dependencies = [
"getrandom",
]
@@ -4139,7 +4157,7 @@ dependencies = [
"log",
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
"wasm-bindgen-shared",
]
@@ -4173,7 +4191,7 @@ checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
dependencies = [
"proc-macro2",
"quote",
- "syn",
+ "syn 1.0.94",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -4262,44 +4280,176 @@ version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6"
dependencies = [
- "windows_aarch64_msvc",
- "windows_i686_gnu",
- "windows_i686_msvc",
- "windows_x86_64_gnu",
- "windows_x86_64_msvc",
+ "windows_aarch64_msvc 0.32.0",
+ "windows_i686_gnu 0.32.0",
+ "windows_i686_msvc 0.32.0",
+ "windows_x86_64_gnu 0.32.0",
+ "windows_x86_64_msvc 0.32.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
]
[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
name = "windows_aarch64_msvc"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
name = "windows_i686_gnu"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
name = "windows_i686_msvc"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
name = "windows_x86_64_gnu"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
name = "windows_x86_64_msvc"
version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
name = "winreg"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4343,18 +4493,37 @@ checksum = "7eb5728b8afd3f280a869ce1d4c554ffaed35f45c231fc41bfbd0381bef50317"
[[package]]
name = "zstd"
-version = "0.9.2+zstd.1.5.1"
+version = "0.11.2+zstd.1.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2390ea1bf6c038c39674f22d95f0564725fc06034a47129179810b2fc58caa54"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
dependencies = [
- "zstd-safe",
+ "zstd-safe 5.0.2+zstd.1.5.2",
+]
+
+[[package]]
+name = "zstd"
+version = "0.12.3+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
+dependencies = [
+ "zstd-safe 6.0.5+zstd.1.5.4",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
]
[[package]]
name = "zstd-safe"
-version = "4.1.3+zstd.1.5.1"
+version = "6.0.5+zstd.1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e99d81b99fb3c2c2c794e3fe56c305c63d5173a16a46b5850b07c935ffc7db79"
+checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
dependencies = [
"libc",
"zstd-sys",
@@ -4362,9 +4531,9 @@ dependencies = [
[[package]]
name = "zstd-sys"
-version = "1.6.2+zstd.1.5.1"
+version = "2.0.8+zstd.1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2daf2f248d9ea44454bfcb2516534e8b8ad2fc91bf818a1885495fc42bc8ac9f"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
dependencies = [
"cc",
"libc",
diff --git a/Cargo.nix b/Cargo.nix
index abfb521a..be45391b 100644
--- a/Cargo.nix
+++ b/Cargo.nix
@@ -32,7 +32,7 @@ args@{
ignoreLockHash,
}:
let
- nixifiedLockHash = "105fbf59db1b2cd55878c6de5fa765404a07a5984667ef9a66c8f33ff9e0a279";
+ nixifiedLockHash = "e693bf860b25d15319b7f5fc2625e570c4fe97e29c14525cc39e47dd93a157ec";
workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc;
currentLockHash = builtins.hashFile "sha256" (workspaceSrc + /Cargo.lock);
lockHashIgnored = if ignoreLockHash
@@ -56,16 +56,16 @@ in
{
cargo2nixVersion = "0.11.0";
workspace = {
- garage_db = rustPackages.unknown.garage_db."0.8.1";
- garage_util = rustPackages.unknown.garage_util."0.8.1";
- garage_rpc = rustPackages.unknown.garage_rpc."0.8.1";
- garage_table = rustPackages.unknown.garage_table."0.8.1";
- garage_block = rustPackages.unknown.garage_block."0.8.1";
- garage_model = rustPackages.unknown.garage_model."0.8.1";
- garage_api = rustPackages.unknown.garage_api."0.8.1";
- garage_web = rustPackages.unknown.garage_web."0.8.1";
- garage = rustPackages.unknown.garage."0.8.1";
- k2v-client = rustPackages.unknown.k2v-client."0.0.1";
+ garage_db = rustPackages.unknown.garage_db."0.8.2";
+ garage_util = rustPackages.unknown.garage_util."0.8.2";
+ garage_rpc = rustPackages.unknown.garage_rpc."0.8.2";
+ garage_table = rustPackages.unknown.garage_table."0.8.2";
+ garage_block = rustPackages.unknown.garage_block."0.8.2";
+ garage_model = rustPackages.unknown.garage_model."0.8.2";
+ garage_api = rustPackages.unknown.garage_api."0.8.2";
+ garage_web = rustPackages.unknown.garage_web."0.8.2";
+ garage = rustPackages.unknown.garage."0.8.2";
+ k2v-client = rustPackages.unknown.k2v-client."0.1.1";
};
"registry+https://github.com/rust-lang/crates.io-index".addr2line."0.17.0" = overridableMkRustCrate (profileName: rec {
name = "addr2line";
@@ -91,7 +91,7 @@ in
src = fetchCratesIo { inherit name version; sha256 = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"; };
dependencies = {
${ if (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite") && (hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "windows" || hostPlatform.parsed.kernel.name == "darwin" || hostPlatform.parsed.kernel.name == "ios" || hostPlatform.parsed.kernel.name == "freebsd" || hostPlatform.parsed.kernel.name == "openbsd" || hostPlatform.parsed.kernel.name == "netbsd" || hostPlatform.parsed.kernel.name == "dragonfly" || hostPlatform.parsed.kernel.name == "solaris" || hostPlatform.parsed.kernel.name == "illumos" || hostPlatform.parsed.kernel.name == "fuchsia" || hostPlatform.parsed.kernel.name == "redox" || hostPlatform.parsed.kernel.name == "cloudabi" || hostPlatform.parsed.kernel.name == "haiku" || hostPlatform.parsed.kernel.name == "vxworks" || hostPlatform.parsed.kernel.name == "emscripten" || hostPlatform.parsed.kernel.name == "wasi") then "getrandom" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".getrandom."0.2.5" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite") && !((hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l") && hostPlatform.parsed.kernel.name == "none") then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite") && !((hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l") && hostPlatform.parsed.kernel.name == "none") then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
};
buildDependencies = {
${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "version_check" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".version_check."0.9.4" { profileName = "__noProfile"; }).out;
@@ -112,7 +112,7 @@ in
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "cfg_if" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "getrandom" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".getrandom."0.2.5" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && !((hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l") && hostPlatform.parsed.kernel.name == "none") then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && !((hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l") && hostPlatform.parsed.kernel.name == "none") then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
};
buildDependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "version_check" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".version_check."0.9.4" { profileName = "__noProfile"; }).out;
@@ -143,6 +143,73 @@ in
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".anstream."0.3.1" = overridableMkRustCrate (profileName: rec {
+ name = "anstream";
+ version = "0.3.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "6342bd4f5a1205d7f41e94a41a901f5647c938cdfa96036338e8533c9d6c2450"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "auto")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "wincon")
+ ];
+ dependencies = {
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "anstyle" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anstyle."1.0.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "anstyle_parse" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anstyle-parse."0.2.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "anstyle_query" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anstyle-query."1.0.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "anstyle_wincon" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anstyle-wincon."1.0.1" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "colorchoice" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".colorchoice."1.0.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "is_terminal" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".is-terminal."0.4.7" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "utf8parse" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".utf8parse."0.2.1" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".anstyle."1.0.0" = overridableMkRustCrate (profileName: rec {
+ name = "anstyle";
+ version = "1.0.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "std")
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".anstyle-parse."0.2.0" = overridableMkRustCrate (profileName: rec {
+ name = "anstyle-parse";
+ version = "0.2.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "utf8")
+ ];
+ dependencies = {
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "utf8parse" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".utf8parse."0.2.1" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".anstyle-query."1.0.0" = overridableMkRustCrate (profileName: rec {
+ name = "anstyle-query";
+ version = "1.0.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"; };
+ dependencies = {
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".anstyle-wincon."1.0.1" = overridableMkRustCrate (profileName: rec {
+ name = "anstyle-wincon";
+ version = "1.0.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"; };
+ dependencies = {
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "anstyle" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anstyle."1.0.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out;
+ };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".anyhow."1.0.56" = overridableMkRustCrate (profileName: rec {
name = "anyhow";
version = "1.0.56";
@@ -178,16 +245,16 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "50f1c3703dd33532d7f0ca049168930e9099ecac238e23cf932f3a69c42f06da"; };
dependencies = {
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".async-compression."0.3.10" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".async-compression."0.3.15" = overridableMkRustCrate (profileName: rec {
name = "async-compression";
- version = "0.3.10";
+ version = "0.3.15";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "00461f243d703f6999c8e7494f077799f1362720a55ae49a90ffe6214032fc0b"; };
+ src = fetchCratesIo { inherit name version; sha256 = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"; };
features = builtins.concatLists [
[ "default" ]
[ "libzstd" ]
@@ -199,9 +266,9 @@ in
futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.21" { inherit profileName; }).out;
memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.4.1" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
- libzstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.9.2+zstd.1.5.1" { inherit profileName; }).out;
- zstd_safe = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-safe."4.1.3+zstd.1.5.1" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
+ libzstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.11.2+zstd.1.5.2" { inherit profileName; }).out;
+ zstd_safe = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-safe."5.0.2+zstd.1.5.2" { inherit profileName; }).out;
};
});
@@ -222,8 +289,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"; };
dependencies = {
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -234,8 +301,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3"; };
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -246,19 +313,9 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"; };
dependencies = {
- ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.kernel.name == "hermit" then "hermit_abi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.1.19" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".autocfg."0.1.8" = overridableMkRustCrate (profileName: rec {
- name = "autocfg";
- version = "0.1.8";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"; };
- dependencies = {
- autocfg = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && hostPlatform.parsed.kernel.name == "hermit" then "hermit_abi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.1.19" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
});
@@ -378,7 +435,7 @@ in
form_urlencoded = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".form_urlencoded."1.0.1" { inherit profileName; }).out;
hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out;
http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
- once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; }).out;
regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.5.5" { inherit profileName; }).out;
ring = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ring."0.16.20" { inherit profileName; }).out;
@@ -398,7 +455,7 @@ in
dependencies = {
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.8" { inherit profileName; }).out;
};
});
@@ -451,7 +508,7 @@ in
hyper_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.22.1" { inherit profileName; }).out;
lazy_static = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tower = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.12" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
};
@@ -490,10 +547,10 @@ in
http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
http_body = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out;
hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.18" { inherit profileName; }).out;
- once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.0" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
};
@@ -584,7 +641,7 @@ in
dependencies = {
addr2line = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".addr2line."0.17.0" { inherit profileName; }).out;
cfg_if = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out;
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
miniz_oxide = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".miniz_oxide."0.5.4" { inherit profileName; }).out;
object = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".object."0.29.0" { inherit profileName; }).out;
rustc_demangle = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustc-demangle."0.1.21" { inherit profileName; }).out;
@@ -606,13 +663,24 @@ in
];
});
+ "registry+https://github.com/rust-lang/crates.io-index".base64."0.21.0" = overridableMkRustCrate (profileName: rec {
+ name = "base64";
+ version = "0.21.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".bincode."1.3.3" = overridableMkRustCrate (profileName: rec {
name = "bincode";
version = "1.3.3";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"; };
dependencies = {
- ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
@@ -626,19 +694,17 @@ in
];
});
- "registry+https://github.com/rust-lang/crates.io-index".blake2."0.9.2" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".blake2."0.10.6" = overridableMkRustCrate (profileName: rec {
name = "blake2";
- version = "0.9.2";
+ version = "0.10.6";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "0a4e37d16930f5459780f5621038b6382b9bb37c19016f39fb6b5808d831f174"; };
+ src = fetchCratesIo { inherit name version; sha256 = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"; };
features = builtins.concatLists [
[ "default" ]
[ "std" ]
];
dependencies = {
- crypto_mac = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crypto-mac."0.8.0" { inherit profileName; }).out;
- digest = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.9.0" { inherit profileName; }).out;
- opaque_debug = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opaque-debug."0.3.0" { inherit profileName; }).out;
+ digest = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.10.3" { inherit profileName; }).out;
};
});
@@ -779,10 +845,10 @@ in
[ "winapi" ]
];
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
num_integer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-integer."0.1.44" { inherit profileName; }).out;
num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.14" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.1.44" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
@@ -800,76 +866,80 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".clap."3.1.18" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".clap."4.2.4" = overridableMkRustCrate (profileName: rec {
name = "clap";
- version = "3.1.18";
+ version = "4.2.4";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"; };
+ src = fetchCratesIo { inherit name version; sha256 = "956ac1f6381d8d82ab4684768f89c0ea3afe66925ceadb4eeb3fc452ffc55d62"; };
features = builtins.concatLists [
- (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "atty")
- (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "clap_derive")
(lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "color")
(lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
(lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "derive")
(lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "env")
- (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "lazy_static")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "error-context")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "help")
(lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "std")
- (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "strsim")
(lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "suggestions")
- (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "termcolor")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "usage")
];
dependencies = {
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "atty" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".atty."0.2.14" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "clap_builder" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.2.4" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "clap_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_derive."4.2.0" { profileName = "__noProfile"; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.2.4" = overridableMkRustCrate (profileName: rec {
+ name = "clap_builder";
+ version = "4.2.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "84080e799e54cff944f4b4a4b0e71630b0e0443b25b985175c7dddc1a859b749"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "color")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "env")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "error-context")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "help")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "std")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "suggestions")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "usage")
+ ];
+ dependencies = {
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "anstream" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anstream."0.3.1" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "anstyle" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anstyle."1.0.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "bitflags" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "clap_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_derive."3.1.18" { profileName = "__noProfile"; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "clap_lex" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_lex."0.2.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.8.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "lazy_static" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "clap_lex" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_lex."0.4.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "strsim" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".strsim."0.10.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "termcolor" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".termcolor."1.1.3" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "textwrap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".textwrap."0.15.0" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".clap_derive."3.1.18" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".clap_derive."4.2.0" = overridableMkRustCrate (profileName: rec {
name = "clap_derive";
- version = "3.1.18";
+ version = "4.2.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "25320346e922cffe59c0bbc5410c8d8784509efb321488971081313cb1e1a33c"; };
+ src = fetchCratesIo { inherit name version; sha256 = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"; };
features = builtins.concatLists [
(lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
];
dependencies = {
${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "heck" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heck."0.4.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "proc_macro_error" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-error."1.0.4" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.15" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".clap_lex."0.2.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".clap_lex."0.4.1" = overridableMkRustCrate (profileName: rec {
name = "clap_lex";
- version = "0.2.0";
+ version = "0.4.1";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "a37c35f1112dad5e6e0b1adaff798507497a18fceeb30cceb3bae7d1427b9213"; };
- dependencies = {
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "os_str_bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".os_str_bytes."6.0.1" { inherit profileName; }).out;
- };
+ src = fetchCratesIo { inherit name version; sha256 = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"; };
});
- "registry+https://github.com/rust-lang/crates.io-index".cloudabi."0.0.3" = overridableMkRustCrate (profileName: rec {
- name = "cloudabi";
- version = "0.0.3";
+ "registry+https://github.com/rust-lang/crates.io-index".colorchoice."1.0.0" = overridableMkRustCrate (profileName: rec {
+ name = "colorchoice";
+ version = "1.0.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"; };
- features = builtins.concatLists [
- [ "bitflags" ]
- [ "default" ]
- ];
- dependencies = {
- bitflags = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out;
- };
+ src = fetchCratesIo { inherit name version; sha256 = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"; };
});
"registry+https://github.com/rust-lang/crates.io-index".core-foundation."0.9.3" = overridableMkRustCrate (profileName: rec {
@@ -879,7 +949,7 @@ in
src = fetchCratesIo { inherit name version; sha256 = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"; };
dependencies = {
core_foundation_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".core-foundation-sys."0.8.3" { inherit profileName; }).out;
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
@@ -896,7 +966,7 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"; };
dependencies = {
- ${ if hostPlatform.config == "aarch64-apple-darwin" || hostPlatform.config == "aarch64-linux-android" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.config == "aarch64-apple-darwin" || hostPlatform.config == "aarch64-linux-android" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
@@ -1019,20 +1089,6 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".crypto-mac."0.8.0" = overridableMkRustCrate (profileName: rec {
- name = "crypto-mac";
- version = "0.8.0";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"; };
- features = builtins.concatLists [
- [ "std" ]
- ];
- dependencies = {
- generic_array = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".generic-array."0.14.5" { inherit profileName; }).out;
- subtle = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".subtle."2.4.1" { inherit profileName; }).out;
- };
- });
-
"registry+https://github.com/rust-lang/crates.io-index".crypto-mac."0.11.1" = overridableMkRustCrate (profileName: rec {
name = "crypto-mac";
version = "0.11.1";
@@ -1081,8 +1137,8 @@ in
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "fnv" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "ident_case" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ident_case."1.0.1" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "strsim" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".strsim."0.10.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
@@ -1095,7 +1151,7 @@ in
src = fetchCratesIo { inherit name version; sha256 = "ddfc69c5bfcbd2fc09a0f38451d2daf0e372e367986a83906d1b0dbc88134fb5"; };
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "darling_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".darling_core."0.14.1" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -1120,8 +1176,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"; };
dependencies = {
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -1178,7 +1234,7 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"; };
dependencies = {
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.parsed.kernel.name == "redox" then "redox_users" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_users."0.4.2" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
@@ -1248,8 +1304,8 @@ in
];
dependencies = {
proc_macro_error = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-error."1.0.4" { inherit profileName; }).out;
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
synstructure = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".synstructure."0.12.6" { inherit profileName; }).out;
};
@@ -1258,6 +1314,31 @@ in
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".errno."0.3.1" = overridableMkRustCrate (profileName: rec {
+ name = "errno";
+ version = "0.3.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"; };
+ dependencies = {
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.kernel.name == "dragonfly" then "errno_dragonfly" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".errno-dragonfly."0.1.2" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && (hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "hermit" || hostPlatform.parsed.kernel.name == "wasi") then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".errno-dragonfly."0.1.2" = overridableMkRustCrate (profileName: rec {
+ name = "errno-dragonfly";
+ version = "0.1.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"; };
+ dependencies = {
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ };
+ buildDependencies = {
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "cc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.73" { profileName = "__noProfile"; }).out;
+ };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".fallible-iterator."0.2.0" = overridableMkRustCrate (profileName: rec {
name = "fallible-iterator";
version = "0.2.0";
@@ -1321,18 +1402,11 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"; };
dependencies = {
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".fuchsia-cprng."0.1.1" = overridableMkRustCrate (profileName: rec {
- name = "fuchsia-cprng";
- version = "0.1.1";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"; };
- });
-
"registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" = overridableMkRustCrate (profileName: rec {
name = "futures";
version = "0.3.21";
@@ -1420,8 +1494,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"; };
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -1494,9 +1568,9 @@ in
};
});
- "unknown".garage."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/garage");
features = builtins.concatLists [
@@ -1522,14 +1596,14 @@ in
bytesize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytesize."1.1.0" { inherit profileName; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
- garage_api = (rustPackages."unknown".garage_api."0.8.1" { inherit profileName; }).out;
- garage_block = (rustPackages."unknown".garage_block."0.8.1" { inherit profileName; }).out;
- garage_db = (rustPackages."unknown".garage_db."0.8.1" { inherit profileName; }).out;
- garage_model = (rustPackages."unknown".garage_model."0.8.1" { inherit profileName; }).out;
- garage_rpc = (rustPackages."unknown".garage_rpc."0.8.1" { inherit profileName; }).out;
- garage_table = (rustPackages."unknown".garage_table."0.8.1" { inherit profileName; }).out;
- garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out;
- garage_web = (rustPackages."unknown".garage_web."0.8.1" { inherit profileName; }).out;
+ garage_api = (rustPackages."unknown".garage_api."0.8.2" { inherit profileName; }).out;
+ garage_block = (rustPackages."unknown".garage_block."0.8.2" { inherit profileName; }).out;
+ garage_db = (rustPackages."unknown".garage_db."0.8.2" { inherit profileName; }).out;
+ garage_model = (rustPackages."unknown".garage_model."0.8.2" { inherit profileName; }).out;
+ garage_rpc = (rustPackages."unknown".garage_rpc."0.8.2" { inherit profileName; }).out;
+ garage_table = (rustPackages."unknown".garage_table."0.8.2" { inherit profileName; }).out;
+ garage_util = (rustPackages."unknown".garage_util."0.8.2" { inherit profileName; }).out;
+ garage_web = (rustPackages."unknown".garage_web."0.8.2" { inherit profileName; }).out;
hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out;
sodiumoxide = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kuska-sodiumoxide."0.2.5-0" { inherit profileName; }).out;
netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.2" { inherit profileName; }).out;
@@ -1539,19 +1613,19 @@ in
parse_duration = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parse_duration."2.1.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/prometheus" then "prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prometheus."0.13.0" { inherit profileName; }).out;
rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; }).out;
structopt = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".structopt."0.3.26" { inherit profileName; }).out;
- timeago = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".timeago."0.3.1" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
- toml = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml."0.5.8" { inherit profileName; }).out;
+ timeago = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".timeago."0.4.1" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
+ toml = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml."0.6.0" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
tracing_subscriber = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.11" { inherit profileName; }).out;
};
devDependencies = {
assert_json_diff = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".assert-json-diff."2.0.1" { inherit profileName; }).out;
aws_sdk_s3 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-s3."0.19.0" { inherit profileName; }).out;
- base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.0" { inherit profileName; }).out;
+ base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.0" { inherit profileName; }).out;
chrono = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" { inherit profileName; }).out;
hmac = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hmac."0.12.1" { inherit profileName; }).out;
http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
@@ -1562,9 +1636,9 @@ in
};
});
- "unknown".garage_api."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage_api."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage_api";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/api");
features = builtins.concatLists [
@@ -1575,7 +1649,7 @@ in
];
dependencies = {
async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.52" { profileName = "__noProfile"; }).out;
- base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.0" { inherit profileName; }).out;
+ base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.0" { inherit profileName; }).out;
bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.2.0" { inherit profileName; }).out;
chrono = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" { inherit profileName; }).out;
crypto_common = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crypto-common."0.1.6" { inherit profileName; }).out;
@@ -1583,18 +1657,18 @@ in
form_urlencoded = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".form_urlencoded."1.0.1" { inherit profileName; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
- garage_block = (rustPackages."unknown".garage_block."0.8.1" { inherit profileName; }).out;
- garage_model = (rustPackages."unknown".garage_model."0.8.1" { inherit profileName; }).out;
- garage_rpc = (rustPackages."unknown".garage_rpc."0.8.1" { inherit profileName; }).out;
- garage_table = (rustPackages."unknown".garage_table."0.8.1" { inherit profileName; }).out;
- garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out;
+ garage_block = (rustPackages."unknown".garage_block."0.8.2" { inherit profileName; }).out;
+ garage_model = (rustPackages."unknown".garage_model."0.8.2" { inherit profileName; }).out;
+ garage_rpc = (rustPackages."unknown".garage_rpc."0.8.2" { inherit profileName; }).out;
+ garage_table = (rustPackages."unknown".garage_table."0.8.2" { inherit profileName; }).out;
+ garage_util = (rustPackages."unknown".garage_util."0.8.2" { inherit profileName; }).out;
hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out;
hmac = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hmac."0.12.1" { inherit profileName; }).out;
http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
http_range = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-range."0.1.5" { inherit profileName; }).out;
- httpdate = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".httpdate."0.3.2" { inherit profileName; }).out;
+ httpdate = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".httpdate."1.0.2" { inherit profileName; }).out;
hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.18" { inherit profileName; }).out;
- idna = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".idna."0.2.3" { inherit profileName; }).out;
+ idna = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".idna."0.3.0" { inherit profileName; }).out;
md5 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".md-5."0.10.1" { inherit profileName; }).out;
multer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".multer."2.0.2" { inherit profileName; }).out;
nom = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".nom."7.1.1" { inherit profileName; }).out;
@@ -1603,22 +1677,22 @@ in
percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; }).out;
pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/prometheus" then "prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prometheus."0.13.0" { inherit profileName; }).out;
- quick_xml = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quick-xml."0.21.0" { inherit profileName; }).out;
+ quick_xml = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quick-xml."0.26.0" { inherit profileName; }).out;
roxmltree = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".roxmltree."0.14.1" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; }).out;
serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.10.2" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.8" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
- url = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.2.2" { inherit profileName; }).out;
+ url = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.3.0" { inherit profileName; }).out;
};
});
- "unknown".garage_block."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage_block."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage_block";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/block");
features = builtins.concatLists [
@@ -1626,30 +1700,30 @@ in
];
dependencies = {
arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.5.0" { inherit profileName; }).out;
- async_compression = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".async-compression."0.3.10" { inherit profileName; }).out;
+ async_compression = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".async-compression."0.3.15" { inherit profileName; }).out;
async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.52" { profileName = "__noProfile"; }).out;
bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.2.0" { inherit profileName; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
- garage_db = (rustPackages."unknown".garage_db."0.8.1" { inherit profileName; }).out;
- garage_rpc = (rustPackages."unknown".garage_rpc."0.8.1" { inherit profileName; }).out;
- garage_table = (rustPackages."unknown".garage_table."0.8.1" { inherit profileName; }).out;
- garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out;
+ garage_db = (rustPackages."unknown".garage_db."0.8.2" { inherit profileName; }).out;
+ garage_rpc = (rustPackages."unknown".garage_rpc."0.8.2" { inherit profileName; }).out;
+ garage_table = (rustPackages."unknown".garage_table."0.8.2" { inherit profileName; }).out;
+ garage_util = (rustPackages."unknown".garage_util."0.8.2" { inherit profileName; }).out;
hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out;
opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out;
rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.6.9" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
- zstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.9.2+zstd.1.5.1" { inherit profileName; }).out;
+ zstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.3+zstd.1.5.2" { inherit profileName; }).out;
};
});
- "unknown".garage_db."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage_db."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage_db";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/db");
features = builtins.concatLists [
@@ -1665,23 +1739,23 @@ in
(lib.optional (rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite") "sqlite")
];
dependencies = {
- ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" then "clap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap."3.1.18" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" then "clap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap."4.2.4" { inherit profileName; }).out;
err_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "heed" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heed."0.11.0" { inherit profileName; }).out;
hexdump = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hexdump."0.1.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "pretty_env_logger" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pretty_env_logger."0.4.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "rusqlite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusqlite."0.27.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "rusqlite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusqlite."0.28.0" { inherit profileName; }).out;
sled = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sled."0.34.7" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
};
devDependencies = {
- mktemp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mktemp."0.4.1" { inherit profileName; }).out;
+ mktemp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mktemp."0.5.0" { inherit profileName; }).out;
};
});
- "unknown".garage_model."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage_model."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage_model";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/model");
features = builtins.concatLists [
@@ -1694,31 +1768,31 @@ in
dependencies = {
arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.5.0" { inherit profileName; }).out;
async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.52" { profileName = "__noProfile"; }).out;
- base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.0" { inherit profileName; }).out;
- blake2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".blake2."0.9.2" { inherit profileName; }).out;
+ base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.0" { inherit profileName; }).out;
+ blake2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".blake2."0.10.6" { inherit profileName; }).out;
err_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
- garage_block = (rustPackages."unknown".garage_block."0.8.1" { inherit profileName; }).out;
- garage_db = (rustPackages."unknown".garage_db."0.8.1" { inherit profileName; }).out;
- garage_rpc = (rustPackages."unknown".garage_rpc."0.8.1" { inherit profileName; }).out;
- garage_table = (rustPackages."unknown".garage_table."0.8.1" { inherit profileName; }).out;
- garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out;
+ garage_block = (rustPackages."unknown".garage_block."0.8.2" { inherit profileName; }).out;
+ garage_db = (rustPackages."unknown".garage_db."0.8.2" { inherit profileName; }).out;
+ garage_rpc = (rustPackages."unknown".garage_rpc."0.8.2" { inherit profileName; }).out;
+ garage_table = (rustPackages."unknown".garage_table."0.8.2" { inherit profileName; }).out;
+ garage_util = (rustPackages."unknown".garage_util."0.8.2" { inherit profileName; }).out;
hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out;
netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.2" { inherit profileName; }).out;
opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out;
rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
- zstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.9.2+zstd.1.5.1" { inherit profileName; }).out;
+ zstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.3+zstd.1.5.2" { inherit profileName; }).out;
};
});
- "unknown".garage_rpc."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage_rpc."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage_rpc";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/rpc");
features = builtins.concatLists [
@@ -1739,7 +1813,7 @@ in
${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/err-derive" then "err_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
- garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out;
+ garage_util = (rustPackages."unknown".garage_util."0.8.2" { inherit profileName; }).out;
gethostname = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".gethostname."0.2.3" { inherit profileName; }).out;
hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out;
itertools = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itertools."0.10.3" { inherit profileName; }).out;
@@ -1748,22 +1822,23 @@ in
sodiumoxide = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kuska-sodiumoxide."0.2.5-0" { inherit profileName; }).out;
netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.2" { inherit profileName; }).out;
opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out;
- pnet_datalink = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pnet_datalink."0.28.0" { inherit profileName; }).out;
+ pnet_datalink = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pnet_datalink."0.33.0" { inherit profileName; }).out;
rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "reqwest" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".reqwest."0.11.12" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "schemars" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".schemars."0.8.8" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; }).out;
serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ systemstat = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".systemstat."0.2.3" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.8" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
};
});
- "unknown".garage_table."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage_table."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage_table";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/table");
dependencies = {
@@ -1772,23 +1847,23 @@ in
bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.2.0" { inherit profileName; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
- garage_db = (rustPackages."unknown".garage_db."0.8.1" { inherit profileName; }).out;
- garage_rpc = (rustPackages."unknown".garage_rpc."0.8.1" { inherit profileName; }).out;
- garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out;
+ garage_db = (rustPackages."unknown".garage_db."0.8.2" { inherit profileName; }).out;
+ garage_rpc = (rustPackages."unknown".garage_rpc."0.8.2" { inherit profileName; }).out;
+ garage_util = (rustPackages."unknown".garage_util."0.8.2" { inherit profileName; }).out;
hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out;
hexdump = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hexdump."0.1.1" { inherit profileName; }).out;
opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out;
rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.5" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
};
});
- "unknown".garage_util."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage_util."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage_util";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/util");
features = builtins.concatLists [
@@ -1797,13 +1872,13 @@ in
dependencies = {
arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.5.0" { inherit profileName; }).out;
async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.52" { profileName = "__noProfile"; }).out;
- blake2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".blake2."0.9.2" { inherit profileName; }).out;
+ blake2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".blake2."0.10.6" { inherit profileName; }).out;
bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.2.0" { inherit profileName; }).out;
chrono = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" { inherit profileName; }).out;
digest = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.10.3" { inherit profileName; }).out;
err_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
- garage_db = (rustPackages."unknown".garage_db."0.8.1" { inherit profileName; }).out;
+ garage_db = (rustPackages."unknown".garage_db."0.8.2" { inherit profileName; }).out;
git_version = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".git-version."0.3.5" { inherit profileName; }).out;
hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out;
hexdump = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hexdump."0.1.1" { inherit profileName; }).out;
@@ -1814,28 +1889,34 @@ in
opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out;
rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
rmp_serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."1.1.1" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.10.2" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
- toml = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml."0.5.8" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
+ toml = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml."0.6.0" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
xxhash_rust = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".xxhash-rust."0.8.4" { inherit profileName; }).out;
};
+ devDependencies = {
+ mktemp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mktemp."0.5.0" { inherit profileName; }).out;
+ };
+ buildDependencies = {
+ rustc_version = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".rustc_version."0.4.0" { profileName = "__noProfile"; }).out;
+ };
});
- "unknown".garage_web."0.8.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".garage_web."0.8.2" = overridableMkRustCrate (profileName: rec {
name = "garage_web";
- version = "0.8.1";
+ version = "0.8.2";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/web");
dependencies = {
err_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
- garage_api = (rustPackages."unknown".garage_api."0.8.1" { inherit profileName; }).out;
- garage_model = (rustPackages."unknown".garage_model."0.8.1" { inherit profileName; }).out;
- garage_table = (rustPackages."unknown".garage_table."0.8.1" { inherit profileName; }).out;
- garage_util = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out;
+ garage_api = (rustPackages."unknown".garage_api."0.8.2" { inherit profileName; }).out;
+ garage_model = (rustPackages."unknown".garage_model."0.8.2" { inherit profileName; }).out;
+ garage_table = (rustPackages."unknown".garage_table."0.8.2" { inherit profileName; }).out;
+ garage_util = (rustPackages."unknown".garage_util."0.8.2" { inherit profileName; }).out;
http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.18" { inherit profileName; }).out;
opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out;
@@ -1866,7 +1947,7 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"; };
dependencies = {
- ${ if !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
});
@@ -1881,7 +1962,7 @@ in
];
dependencies = {
cfg_if = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out;
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.parsed.kernel.name == "wasi" then "wasi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasi."0.10.0+wasi-snapshot-preview1" { inherit profileName; }).out;
};
});
@@ -1915,8 +1996,8 @@ in
src = fetchCratesIo { inherit name version; sha256 = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f"; };
dependencies = {
proc_macro_hack = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-hack."0.5.19" { profileName = "__noProfile"; }).out;
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -1933,19 +2014,19 @@ in
futures_sink = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.21" { inherit profileName; }).out;
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
- indexmap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.8.0" { inherit profileName; }).out;
+ indexmap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.9.3" { inherit profileName; }).out;
slab = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".slab."0.4.5" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.6.9" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.11.2" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.12.3" = overridableMkRustCrate (profileName: rec {
name = "hashbrown";
- version = "0.11.2";
+ version = "0.12.3";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"; };
+ src = fetchCratesIo { inherit name version; sha256 = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"; };
features = builtins.concatLists [
(lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite") "ahash")
(lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite") "default")
@@ -1957,13 +2038,13 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".hashlink."0.7.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".hashlink."0.8.1" = overridableMkRustCrate (profileName: rec {
name = "hashlink";
- version = "0.7.0";
+ version = "0.8.1";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf"; };
+ src = fetchCratesIo { inherit name version; sha256 = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"; };
dependencies = {
- ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "hashbrown" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.11.2" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "hashbrown" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.12.3" { inherit profileName; }).out;
};
});
@@ -2001,12 +2082,12 @@ in
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "byteorder" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "heed_traits" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heed-traits."0.8.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "heed_types" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heed-types."0.8.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "lmdb_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lmdb-rkv-sys."0.11.2" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "page_size" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".page_size."0.4.2" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "synchronoise" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".synchronoise."1.0.0" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") && hostPlatform.isWindows then "url" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.2.2" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") && hostPlatform.isWindows then "url" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.3.0" { inherit profileName; }).out;
};
});
@@ -2035,7 +2116,7 @@ in
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "bytemuck" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytemuck."1.9.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "byteorder" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "heed_traits" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heed-traits."0.8.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
};
});
@@ -2049,10 +2130,20 @@ in
[ "default" ]
];
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.3.1" = overridableMkRustCrate (profileName: rec {
+ name = "hermit-abi";
+ version = "0.3.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
+ ];
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" = overridableMkRustCrate (profileName: rec {
name = "hex";
version = "0.4.3";
@@ -2146,13 +2237,6 @@ in
];
});
- "registry+https://github.com/rust-lang/crates.io-index".httpdate."0.3.2" = overridableMkRustCrate (profileName: rec {
- name = "httpdate";
- version = "0.3.2";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"; };
- });
-
"registry+https://github.com/rust-lang/crates.io-index".httpdate."1.0.2" = overridableMkRustCrate (profileName: rec {
name = "httpdate";
version = "1.0.2";
@@ -2200,8 +2284,8 @@ in
httpdate = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".httpdate."1.0.2" { inherit profileName; }).out;
itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.1" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- socket2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".socket2."0.4.4" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ socket2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".socket2."0.4.9" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tower_service = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.1" { inherit profileName; }).out;
tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
want = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".want."0.3.0" { inherit profileName; }).out;
@@ -2227,7 +2311,7 @@ in
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.1" { inherit profileName; }).out;
rustls_native_certs = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-native-certs."0.5.0" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.22.0" { inherit profileName; }).out;
webpki = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; }).out;
};
@@ -2255,7 +2339,7 @@ in
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.20.6" { inherit profileName; }).out;
rustls_native_certs = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-native-certs."0.6.2" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.23.4" { inherit profileName; }).out;
};
});
@@ -2268,7 +2352,7 @@ in
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "hyper" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.18" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio_io_timeout" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-io-timeout."1.2.0" { inherit profileName; }).out;
};
});
@@ -2292,16 +2376,27 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".indexmap."1.8.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".idna."0.3.0" = overridableMkRustCrate (profileName: rec {
+ name = "idna";
+ version = "0.3.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"; };
+ dependencies = {
+ unicode_bidi = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-bidi."0.3.7" { inherit profileName; }).out;
+ unicode_normalization = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-normalization."0.1.19" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".indexmap."1.9.3" = overridableMkRustCrate (profileName: rec {
name = "indexmap";
- version = "1.8.0";
+ version = "1.9.3";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223"; };
+ src = fetchCratesIo { inherit name version; sha256 = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"; };
features = builtins.concatLists [
[ "std" ]
];
dependencies = {
- hashbrown = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.11.2" { inherit profileName; }).out;
+ hashbrown = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.12.3" { inherit profileName; }).out;
};
buildDependencies = {
autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out;
@@ -2318,6 +2413,25 @@ in
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".io-lifetimes."1.0.10" = overridableMkRustCrate (profileName: rec {
+ name = "io-lifetimes";
+ version = "1.0.10";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "close")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "hermit-abi")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "libc")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "windows-sys")
+ ];
+ dependencies = {
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.kernel.name == "hermit" then "hermit_abi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.3.1" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out;
+ };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".ipnet."2.5.0" = overridableMkRustCrate (profileName: rec {
name = "ipnet";
version = "2.5.0";
@@ -2328,33 +2442,44 @@ in
];
});
- "registry+https://github.com/rust-lang/crates.io-index".ipnetwork."0.18.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".ipnetwork."0.20.0" = overridableMkRustCrate (profileName: rec {
name = "ipnetwork";
- version = "0.18.0";
+ version = "0.20.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "4088d739b183546b239688ddbc79891831df421773df95e236daf7867866d355"; };
+ src = fetchCratesIo { inherit name version; sha256 = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e"; };
features = builtins.concatLists [
[ "default" ]
[ "serde" ]
];
dependencies = {
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".isolang."1.0.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".is-terminal."0.4.7" = overridableMkRustCrate (profileName: rec {
+ name = "is-terminal";
+ version = "0.4.7";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"; };
+ dependencies = {
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.kernel.name == "hermit" then "hermit_abi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.3.1" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "io_lifetimes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".io-lifetimes."1.0.10" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && !(hostPlatform.isWindows || hostPlatform.parsed.kernel.name == "hermit" || hostPlatform.parsed.kernel.name == "unknown") then "rustix" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustix."0.37.14" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".isolang."2.2.0" = overridableMkRustCrate (profileName: rec {
name = "isolang";
- version = "1.0.0";
+ version = "2.2.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "265ef164908329e47e753c769b14cbb27434abf0c41984dca201484022f09ce5"; };
+ src = fetchCratesIo { inherit name version; sha256 = "b64fd6448ee8a45ce6e4365c58e4fa7d8740cba2ed70db3e9ab4879ebd93eaaa"; };
features = builtins.concatLists [
[ "default" ]
+ [ "english_names" ]
];
dependencies = {
- phf = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".phf."0.7.24" { inherit profileName; }).out;
- };
- buildDependencies = {
- phf_codegen = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".phf_codegen."0.7.24" { profileName = "__noProfile"; }).out;
+ phf = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".phf."0.10.1" { inherit profileName; }).out;
};
});
@@ -2393,7 +2518,7 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"; };
dependencies = {
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
@@ -2418,7 +2543,7 @@ in
(lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "treediff")
];
dependencies = {
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "treediff" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".treediff."3.0.2" { inherit profileName; }).out;
};
@@ -2431,14 +2556,14 @@ in
src = fetchCratesIo { inherit name version; sha256 = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f"; };
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
};
});
- "unknown".k2v-client."0.0.1" = overridableMkRustCrate (profileName: rec {
+ "unknown".k2v-client."0.1.1" = overridableMkRustCrate (profileName: rec {
name = "k2v-client";
- version = "0.0.1";
+ version = "0.1.1";
registry = "unknown";
src = fetchCrateLocal (workspaceSrc + "/src/k2v-client");
features = builtins.concatLists [
@@ -2447,18 +2572,19 @@ in
(lib.optional (rootFeatures' ? "k2v-client/cli" || rootFeatures' ? "k2v-client/garage_util") "garage_util")
];
dependencies = {
- base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "clap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap."3.1.18" { inherit profileName; }).out;
- ${ if rootFeatures' ? "k2v-client/cli" || rootFeatures' ? "k2v-client/garage_util" then "garage_util" else null } = (rustPackages."unknown".garage_util."0.8.1" { inherit profileName; }).out;
+ base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "clap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap."4.2.4" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "k2v-client/cli" || rootFeatures' ? "k2v-client/garage_util" then "garage_util" else null } = (rustPackages."unknown".garage_util."0.8.2" { inherit profileName; }).out;
http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
+ hyper_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.23.0" { inherit profileName; }).out;
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
rusoto_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusoto_core."0.48.0" { inherit profileName; }).out;
rusoto_credential = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusoto_credential."0.48.0" { inherit profileName; }).out;
rusoto_signature = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusoto_signature."0.48.0" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.31" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
};
});
@@ -2481,10 +2607,10 @@ in
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "chrono" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "percent_encoding" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_value" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde-value."0.7.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "url" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.2.2" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "url" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.3.0" { inherit profileName; }).out;
};
});
@@ -2565,11 +2691,11 @@ in
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "rustls" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.20.6" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "rustls_pemfile" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-pemfile."1.0.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "secrecy" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".secrecy."0.8.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_yaml" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_yaml."0.8.23" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "thiserror" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.31" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tower" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.12" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tower_http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-http."0.3.3" { inherit profileName; }).out;
@@ -2594,9 +2720,9 @@ in
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.8" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "json_patch" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".json-patch."0.2.6" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "k8s_openapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".k8s-openapi."0.16.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "schemars" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".schemars."0.8.8" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "thiserror" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.31" { inherit profileName; }).out;
};
@@ -2609,8 +2735,8 @@ in
src = fetchCratesIo { inherit name version; sha256 = "98459d53b2841237392cd6959956185b2df15c19d32c3b275ed6ca7b7ee1adae"; };
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "darling" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".darling."0.14.1" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
@@ -2631,11 +2757,11 @@ in
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "kube_client" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kube-client."0.75.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "parking_lot" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.12.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "pin_project" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "smallvec" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.8.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "thiserror" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.31" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tracing" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.32" { inherit profileName; }).out;
};
@@ -2672,9 +2798,9 @@ in
(lib.optional (rootFeatures' ? "garage/system-libs" || rootFeatures' ? "garage_rpc/system-libs") "use-pkg-config")
];
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
libsodium_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libsodium-sys."0.2.7" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
@@ -2685,13 +2811,14 @@ in
src = fetchCratesIo { inherit name version; sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"; };
});
- "registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" = overridableMkRustCrate (profileName: rec {
name = "libc";
- version = "0.2.121";
+ version = "0.2.142";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f"; };
+ src = fetchCratesIo { inherit name version; sha256 = "6a987beff54b60ffa6d51982e1aa1146bc42f19bd26be28b0586f252fccf5317"; };
features = builtins.concatLists [
[ "default" ]
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "extra_traits")
[ "std" ]
];
});
@@ -2705,21 +2832,21 @@ in
(lib.optional (rootFeatures' ? "garage/system-libs" || rootFeatures' ? "garage_rpc/system-libs") "use-pkg-config")
];
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
buildDependencies = {
${ if !(hostPlatform.parsed.abi.name == "msvc") then "cc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.73" { profileName = "__noProfile"; }).out;
- ${ if hostPlatform.parsed.abi.name == "msvc" then "libc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { profileName = "__noProfile"; }).out;
+ ${ if hostPlatform.parsed.abi.name == "msvc" then "libc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { profileName = "__noProfile"; }).out;
pkg_config = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.24" { profileName = "__noProfile"; }).out;
walkdir = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".walkdir."2.3.2" { profileName = "__noProfile"; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".libsqlite3-sys."0.24.2" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".libsqlite3-sys."0.25.2" = overridableMkRustCrate (profileName: rec {
name = "libsqlite3-sys";
- version = "0.24.2";
+ version = "0.25.2";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "898745e570c7d0453cc1fbc4a701eb6c662ed54e8fec8b7d14be137ebeeb9d14"; };
+ src = fetchCratesIo { inherit name version; sha256 = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"; };
features = builtins.concatLists [
(lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage_db/bundled-libs") "bundled")
(lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage_db/bundled-libs") "bundled_bindings")
@@ -2743,6 +2870,19 @@ in
src = fetchCratesIo { inherit name version; sha256 = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"; };
});
+ "registry+https://github.com/rust-lang/crates.io-index".linux-raw-sys."0.3.4" = overridableMkRustCrate (profileName: rec {
+ name = "linux-raw-sys";
+ version = "0.3.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "36eb31c1778188ae1e64398743890d0877fef36d11521ac60406b42016e8c2cf"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "errno")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "general")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "ioctl")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "no_std")
+ ];
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".lmdb-rkv-sys."0.11.2" = overridableMkRustCrate (profileName: rec {
name = "lmdb-rkv-sys";
version = "0.11.2";
@@ -2752,7 +2892,7 @@ in
(lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "default")
];
dependencies = {
- ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
buildDependencies = {
${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "cc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.73" { profileName = "__noProfile"; }).out;
@@ -2881,11 +3021,11 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".mio."0.8.2" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".mio."0.8.6" = overridableMkRustCrate (profileName: rec {
name = "mio";
- version = "0.8.2";
+ version = "0.8.6";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9"; };
+ src = fetchCratesIo { inherit name version; sha256 = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"; };
features = builtins.concatLists [
[ "default" ]
[ "net" ]
@@ -2893,32 +3033,20 @@ in
[ "os-poll" ]
];
dependencies = {
- ${ if hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "wasi" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "wasi" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
- ${ if hostPlatform.isWindows then "miow" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".miow."0.3.7" { inherit profileName; }).out;
- ${ if hostPlatform.isWindows then "ntapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ntapi."0.3.7" { inherit profileName; }).out;
${ if hostPlatform.parsed.kernel.name == "wasi" then "wasi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasi."0.11.0+wasi-snapshot-preview1" { inherit profileName; }).out;
- ${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".miow."0.3.7" = overridableMkRustCrate (profileName: rec {
- name = "miow";
- version = "0.3.7";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"; };
- dependencies = {
- winapi = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
+ ${ if hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.45.0" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".mktemp."0.4.1" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".mktemp."0.5.0" = overridableMkRustCrate (profileName: rec {
name = "mktemp";
- version = "0.4.1";
+ version = "0.5.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "975de676448231fcde04b9149d2543077e166b78fc29eae5aa219e7928410da2"; };
+ src = fetchCratesIo { inherit name version; sha256 = "4bdc1f74dd7bb717d39f784f844e490d935b3aa7e383008006dbbf29c1f7820a"; };
dependencies = {
- uuid = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".uuid."0.8.2" { inherit profileName; }).out;
+ uuid = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".uuid."1.2.2" { inherit profileName; }).out;
};
});
@@ -2980,13 +3108,23 @@ in
pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out;
rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
rmp_serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.5" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.8" { inherit profileName; }).out;
tokio_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.0" { inherit profileName; }).out;
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".no-std-net."0.6.0" = overridableMkRustCrate (profileName: rec {
+ name = "no-std-net";
+ version = "0.6.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".nom."7.1.1" = overridableMkRustCrate (profileName: rec {
name = "nom";
version = "7.1.1";
@@ -3003,17 +3141,18 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".ntapi."0.3.7" = overridableMkRustCrate (profileName: rec {
- name = "ntapi";
- version = "0.3.7";
+ "registry+https://github.com/rust-lang/crates.io-index".nom8."0.2.0" = overridableMkRustCrate (profileName: rec {
+ name = "nom8";
+ version = "0.2.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"; };
+ src = fetchCratesIo { inherit name version; sha256 = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8"; };
features = builtins.concatLists [
+ [ "alloc" ]
[ "default" ]
- [ "user" ]
+ [ "std" ]
];
dependencies = {
- winapi = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
+ memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.4.1" { inherit profileName; }).out;
};
});
@@ -3144,7 +3283,7 @@ in
src = fetchCratesIo { inherit name version; sha256 = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"; };
dependencies = {
${ if (hostPlatform.parsed.cpu.name == "x86_64" || hostPlatform.parsed.cpu.name == "aarch64") && hostPlatform.parsed.kernel.name == "hermit" then "hermit_abi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.1.19" { inherit profileName; }).out;
- ${ if !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
@@ -3154,7 +3293,7 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0"; };
dependencies = {
- ${ if hostPlatform.parsed.kernel.name == "darwin" || hostPlatform.parsed.kernel.name == "ios" || hostPlatform.parsed.kernel.name == "freebsd" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.parsed.kernel.name == "darwin" || hostPlatform.parsed.kernel.name == "ios" || hostPlatform.parsed.kernel.name == "freebsd" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
@@ -3177,11 +3316,11 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" = overridableMkRustCrate (profileName: rec {
name = "once_cell";
- version = "1.10.0";
+ version = "1.17.1";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"; };
+ src = fetchCratesIo { inherit name version; sha256 = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"; };
features = builtins.concatLists [
[ "alloc" ]
[ "default" ]
@@ -3239,7 +3378,7 @@ in
pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out;
rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.31" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.8" { inherit profileName; }).out;
};
});
@@ -3278,7 +3417,7 @@ in
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "opentelemetry" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.9.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "thiserror" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.31" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tonic" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tonic."0.6.2" { inherit profileName; }).out;
};
buildDependencies = {
@@ -3312,23 +3451,13 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".os_str_bytes."6.0.1" = overridableMkRustCrate (profileName: rec {
- name = "os_str_bytes";
- version = "6.0.1";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "029d8d0b2f198229de29dca79676f2738ff952edf3fde542eb8bf94d8c21b435"; };
- features = builtins.concatLists [
- (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "raw_os_str")
- ];
- });
-
"registry+https://github.com/rust-lang/crates.io-index".page_size."0.4.2" = overridableMkRustCrate (profileName: rec {
name = "page_size";
version = "0.4.2";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "eebde548fbbf1ea81a99b128872779c437752fb99f217c45245e1a61dcd9edcd"; };
dependencies = {
- ${ if (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") && hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
});
@@ -3370,7 +3499,7 @@ in
dependencies = {
cfg_if = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out;
instant = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".instant."0.1.12" { inherit profileName; }).out;
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.parsed.kernel.name == "redox" then "syscall" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.11" { inherit profileName; }).out;
smallvec = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.8.0" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
@@ -3384,7 +3513,7 @@ in
src = fetchCratesIo { inherit name version; sha256 = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954"; };
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "cfg_if" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.parsed.kernel.name == "redox" then "syscall" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.11" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "smallvec" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.8.0" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.32.0" { inherit profileName; }).out;
@@ -3434,49 +3563,34 @@ in
src = fetchCratesIo { inherit name version; sha256 = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f"; };
dependencies = {
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "fixedbitset" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fixedbitset."0.4.1" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.8.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.9.3" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".phf."0.7.24" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".phf."0.10.1" = overridableMkRustCrate (profileName: rec {
name = "phf";
- version = "0.7.24";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"; };
- dependencies = {
- phf_shared = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".phf_shared."0.7.24" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".phf_codegen."0.7.24" = overridableMkRustCrate (profileName: rec {
- name = "phf_codegen";
- version = "0.7.24";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"; };
- dependencies = {
- phf_generator = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".phf_generator."0.7.24" { inherit profileName; }).out;
- phf_shared = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".phf_shared."0.7.24" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".phf_generator."0.7.24" = overridableMkRustCrate (profileName: rec {
- name = "phf_generator";
- version = "0.7.24";
+ version = "0.10.1";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"; };
+ src = fetchCratesIo { inherit name version; sha256 = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
dependencies = {
- phf_shared = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".phf_shared."0.7.24" { inherit profileName; }).out;
- rand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.6.5" { inherit profileName; }).out;
+ phf_shared = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".phf_shared."0.10.0" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".phf_shared."0.7.24" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".phf_shared."0.10.0" = overridableMkRustCrate (profileName: rec {
name = "phf_shared";
- version = "0.7.24";
+ version = "0.10.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"; };
+ src = fetchCratesIo { inherit name version; sha256 = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
dependencies = {
- siphasher = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".siphasher."0.2.3" { inherit profileName; }).out;
+ siphasher = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".siphasher."0.3.10" { inherit profileName; }).out;
};
});
@@ -3496,8 +3610,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"; };
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -3523,34 +3637,44 @@ in
src = fetchCratesIo { inherit name version; sha256 = "58893f751c9b0412871a09abd62ecd2a00298c6c83befa223ef98c52aef40cbe"; };
});
- "registry+https://github.com/rust-lang/crates.io-index".pnet_base."0.28.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".pnet_base."0.33.0" = overridableMkRustCrate (profileName: rec {
name = "pnet_base";
- version = "0.28.0";
+ version = "0.33.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "25488cd551a753dcaaa6fffc9f69a7610a412dd8954425bf7ffad5f7d1156fb8"; };
+ src = fetchCratesIo { inherit name version; sha256 = "872e46346144ebf35219ccaa64b1dffacd9c6f188cd7d012bd6977a2a838f42e"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ dependencies = {
+ no_std_net = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".no-std-net."0.6.0" { inherit profileName; }).out;
+ };
});
- "registry+https://github.com/rust-lang/crates.io-index".pnet_datalink."0.28.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".pnet_datalink."0.33.0" = overridableMkRustCrate (profileName: rec {
name = "pnet_datalink";
- version = "0.28.0";
+ version = "0.33.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "d4d1f8ab1ef6c914cf51dc5dfe0be64088ea5f3b08bbf5a31abc70356d271198"; };
+ src = fetchCratesIo { inherit name version; sha256 = "c302da22118d2793c312a35fb3da6846cb0fab6c3ad53fd67e37809b06cdafce"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
dependencies = {
- ipnetwork = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ipnetwork."0.18.0" { inherit profileName; }).out;
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
- pnet_base = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pnet_base."0.28.0" { inherit profileName; }).out;
- pnet_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pnet_sys."0.28.0" { inherit profileName; }).out;
+ ipnetwork = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ipnetwork."0.20.0" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ pnet_base = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pnet_base."0.33.0" { inherit profileName; }).out;
+ pnet_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pnet_sys."0.33.0" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".pnet_sys."0.28.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".pnet_sys."0.33.0" = overridableMkRustCrate (profileName: rec {
name = "pnet_sys";
- version = "0.28.0";
+ version = "0.33.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "d9a3f32b0df45515befd19eed04616f6b56a488da92afc61164ef455e955f07f"; };
+ src = fetchCratesIo { inherit name version; sha256 = "faf7a58b2803d818a374be9278a1fe8f88fce14b936afbe225000cfcd9c73f16"; };
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
});
@@ -3589,8 +3713,8 @@ in
];
dependencies = {
proc_macro_error_attr = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-error-attr."1.0.4" { profileName = "__noProfile"; }).out;
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
buildDependencies = {
@@ -3604,8 +3728,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"; };
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
};
buildDependencies = {
version_check = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".version_check."0.9.4" { profileName = "__noProfile"; }).out;
@@ -3619,11 +3743,11 @@ in
src = fetchCratesIo { inherit name version; sha256 = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"; };
});
- "registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" = overridableMkRustCrate (profileName: rec {
name = "proc-macro2";
- version = "1.0.46";
+ version = "1.0.56";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b"; };
+ src = fetchCratesIo { inherit name version; sha256 = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"; };
features = builtins.concatLists [
[ "default" ]
[ "proc-macro" ]
@@ -3700,8 +3824,8 @@ in
dependencies = {
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "anyhow" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anyhow."1.0.56" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "itertools" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itertools."0.10.3" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -3731,11 +3855,11 @@ in
src = fetchCratesIo { inherit name version; sha256 = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"; };
});
- "registry+https://github.com/rust-lang/crates.io-index".quick-xml."0.21.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".quick-xml."0.26.0" = overridableMkRustCrate (profileName: rec {
name = "quick-xml";
- version = "0.21.0";
+ version = "0.26.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "0452695941410a58c8ce4391707ba9bad26a247173bd9886a05a5e8a8babec75"; };
+ src = fetchCratesIo { inherit name version; sha256 = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd"; };
features = builtins.concatLists [
[ "default" ]
[ "serde" ]
@@ -3743,49 +3867,21 @@ in
];
dependencies = {
memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.4.1" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" = overridableMkRustCrate (profileName: rec {
name = "quote";
- version = "1.0.21";
+ version = "1.0.26";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"; };
+ src = fetchCratesIo { inherit name version; sha256 = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"; };
features = builtins.concatLists [
[ "default" ]
[ "proc-macro" ]
];
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".rand."0.6.5" = overridableMkRustCrate (profileName: rec {
- name = "rand";
- version = "0.6.5";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"; };
- features = builtins.concatLists [
- [ "alloc" ]
- [ "default" ]
- [ "rand_os" ]
- [ "std" ]
- ];
- dependencies = {
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
- rand_chacha = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_chacha."0.1.1" { inherit profileName; }).out;
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.4.2" { inherit profileName; }).out;
- rand_hc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_hc."0.1.0" { inherit profileName; }).out;
- rand_isaac = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_isaac."0.1.1" { inherit profileName; }).out;
- rand_jitter = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_jitter."0.1.4" { inherit profileName; }).out;
- rand_os = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_os."0.1.3" { inherit profileName; }).out;
- rand_pcg = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_pcg."0.1.2" { inherit profileName; }).out;
- rand_xorshift = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_xorshift."0.1.1" { inherit profileName; }).out;
- ${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
- };
- buildDependencies = {
- autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."0.1.8" { profileName = "__noProfile"; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
};
});
@@ -3805,25 +3901,12 @@ in
[ "std_rng" ]
];
dependencies = {
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
rand_chacha = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_chacha."0.3.1" { inherit profileName; }).out;
rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.6.3" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".rand_chacha."0.1.1" = overridableMkRustCrate (profileName: rec {
- name = "rand_chacha";
- version = "0.1.1";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"; };
- dependencies = {
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.3.1" { inherit profileName; }).out;
- };
- buildDependencies = {
- autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."0.1.8" { profileName = "__noProfile"; }).out;
- };
- });
-
"registry+https://github.com/rust-lang/crates.io-index".rand_chacha."0.3.1" = overridableMkRustCrate (profileName: rec {
name = "rand_chacha";
version = "0.3.1";
@@ -3838,27 +3921,6 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".rand_core."0.3.1" = overridableMkRustCrate (profileName: rec {
- name = "rand_core";
- version = "0.3.1";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"; };
- dependencies = {
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.4.2" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".rand_core."0.4.2" = overridableMkRustCrate (profileName: rec {
- name = "rand_core";
- version = "0.4.2";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"; };
- features = builtins.concatLists [
- [ "alloc" ]
- [ "std" ]
- ];
- });
-
"registry+https://github.com/rust-lang/crates.io-index".rand_core."0.6.3" = overridableMkRustCrate (profileName: rec {
name = "rand_core";
version = "0.6.3";
@@ -3874,93 +3936,6 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".rand_hc."0.1.0" = overridableMkRustCrate (profileName: rec {
- name = "rand_hc";
- version = "0.1.0";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"; };
- dependencies = {
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.3.1" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".rand_isaac."0.1.1" = overridableMkRustCrate (profileName: rec {
- name = "rand_isaac";
- version = "0.1.1";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"; };
- dependencies = {
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.3.1" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".rand_jitter."0.1.4" = overridableMkRustCrate (profileName: rec {
- name = "rand_jitter";
- version = "0.1.4";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"; };
- features = builtins.concatLists [
- [ "std" ]
- ];
- dependencies = {
- ${ if hostPlatform.parsed.kernel.name == "darwin" || hostPlatform.parsed.kernel.name == "ios" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.4.2" { inherit profileName; }).out;
- ${ if hostPlatform.parsed.kernel.name == "windows" then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".rand_os."0.1.3" = overridableMkRustCrate (profileName: rec {
- name = "rand_os";
- version = "0.1.3";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"; };
- dependencies = {
- ${ if hostPlatform.parsed.kernel.name == "cloudabi" then "cloudabi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cloudabi."0.0.3" { inherit profileName; }).out;
- ${ if hostPlatform.parsed.kernel.name == "fuchsia" then "fuchsia_cprng" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fuchsia-cprng."0.1.1" { inherit profileName; }).out;
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.4.2" { inherit profileName; }).out;
- ${ if target == "x86_64-fortanix-unknown-sgx" then "rdrand" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rdrand."0.4.0" { inherit profileName; }).out;
- ${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".rand_pcg."0.1.2" = overridableMkRustCrate (profileName: rec {
- name = "rand_pcg";
- version = "0.1.2";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"; };
- dependencies = {
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.4.2" { inherit profileName; }).out;
- };
- buildDependencies = {
- autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."0.1.8" { profileName = "__noProfile"; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".rand_xorshift."0.1.1" = overridableMkRustCrate (profileName: rec {
- name = "rand_xorshift";
- version = "0.1.1";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"; };
- dependencies = {
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.3.1" { inherit profileName; }).out;
- };
- });
-
- "registry+https://github.com/rust-lang/crates.io-index".rdrand."0.4.0" = overridableMkRustCrate (profileName: rec {
- name = "rdrand";
- version = "0.4.0";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"; };
- features = builtins.concatLists [
- [ "default" ]
- [ "std" ]
- ];
- dependencies = {
- rand_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand_core."0.3.1" { inherit profileName; }).out;
- };
- });
-
"registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.11" = overridableMkRustCrate (profileName: rec {
name = "redox_syscall";
version = "0.2.11";
@@ -4088,18 +4063,18 @@ in
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && hostPlatform.parsed.cpu.name == "wasm32" then "js_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.56" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "mime" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mime."0.3.16" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "percent_encoding" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "rustls" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.20.6" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "rustls_pemfile" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-pemfile."1.0.1" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "serde_urlencoded" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_urlencoded."0.7.1" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "tokio_rustls" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.23.4" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "tower_service" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.1" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "url" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.2.2" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "url" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.3.0" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && hostPlatform.parsed.cpu.name == "wasm32" then "wasm_bindgen" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.79" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && hostPlatform.parsed.cpu.name == "wasm32" then "wasm_bindgen_futures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-futures."0.4.29" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && hostPlatform.parsed.cpu.name == "wasm32" then "web_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.56" { inherit profileName; }).out;
@@ -4119,8 +4094,8 @@ in
[ "once_cell" ]
];
dependencies = {
- ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
- ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "dragonfly" || hostPlatform.parsed.kernel.name == "freebsd" || hostPlatform.parsed.kernel.name == "illumos" || hostPlatform.parsed.kernel.name == "netbsd" || hostPlatform.parsed.kernel.name == "openbsd" || hostPlatform.parsed.kernel.name == "solaris" then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "dragonfly" || hostPlatform.parsed.kernel.name == "freebsd" || hostPlatform.parsed.kernel.name == "illumos" || hostPlatform.parsed.kernel.name == "netbsd" || hostPlatform.parsed.kernel.name == "openbsd" || hostPlatform.parsed.kernel.name == "solaris" then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
${ if hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" || (hostPlatform.parsed.cpu.name == "aarch64" || hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l") && (hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "fuchsia" || hostPlatform.parsed.kernel.name == "linux") then "spin" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".spin."0.5.2" { inherit profileName; }).out;
untrusted = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".untrusted."0.7.1" { inherit profileName; }).out;
${ if hostPlatform.parsed.cpu.name == "wasm32" && hostPlatform.parsed.vendor.name == "unknown" && hostPlatform.parsed.kernel.name == "unknown" && hostPlatform.parsed.abi.name == "" then "web_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.56" { inherit profileName; }).out;
@@ -4155,7 +4130,7 @@ in
dependencies = {
byteorder = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" { inherit profileName; }).out;
rmp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp."0.8.11" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
@@ -4167,7 +4142,7 @@ in
dependencies = {
byteorder = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" { inherit profileName; }).out;
rmp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp."0.8.11" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
@@ -4207,9 +4182,9 @@ in
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
rusoto_credential = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusoto_credential."0.48.0" { inherit profileName; }).out;
rusoto_signature = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusoto_signature."0.48.0" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
xml = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".xml-rs."0.8.4" { inherit profileName; }).out;
};
buildDependencies = {
@@ -4228,10 +4203,10 @@ in
dirs_next = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".dirs-next."2.0.0" { inherit profileName; }).out;
futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.21" { inherit profileName; }).out;
hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.18" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
shlex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".shlex."1.1.0" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
zeroize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zeroize."1.5.4" { inherit profileName; }).out;
};
});
@@ -4256,20 +4231,20 @@ in
percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
rusoto_credential = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusoto_credential."0.48.0" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.9.9" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
};
buildDependencies = {
rustc_version = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".rustc_version."0.4.0" { profileName = "__noProfile"; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".rusqlite."0.27.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".rusqlite."0.28.0" = overridableMkRustCrate (profileName: rec {
name = "rusqlite";
- version = "0.27.0";
+ version = "0.28.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "85127183a999f7db96d1a976a309eebbfb6ea3b0b400ddd8340190129de6eb7a"; };
+ src = fetchCratesIo { inherit name version; sha256 = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"; };
features = builtins.concatLists [
(lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage_db/bundled-libs") "bundled")
(lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage_db/bundled-libs") "modern_sqlite")
@@ -4278,9 +4253,8 @@ in
${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "bitflags" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "fallible_iterator" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fallible-iterator."0.2.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "fallible_streaming_iterator" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fallible-streaming-iterator."0.1.9" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "hashlink" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashlink."0.7.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "libsqlite3_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libsqlite3-sys."0.24.2" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "memchr" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.4.1" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "hashlink" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashlink."0.8.1" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "libsqlite3_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libsqlite3-sys."0.25.2" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" then "smallvec" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.8.0" { inherit profileName; }).out;
};
});
@@ -4302,6 +4276,29 @@ in
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".rustix."0.37.14" = overridableMkRustCrate (profileName: rec {
+ name = "rustix";
+ version = "0.37.14";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d9b864d3c18a5785a05953adeed93e2dca37ed30f18e69bba9f30079d51f363f"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "io-lifetimes")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "libc")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "std")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "termios")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "use-libc-auxv")
+ ];
+ dependencies = {
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "bitflags" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && !(hostPlatform.parsed.kernel.name == "linux" && (hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.significantByte == "littleEndian" && (hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.name == "powerpc64" || hostPlatform.parsed.cpu.name == "riscv64" || hostPlatform.parsed.cpu.name == "mips" || hostPlatform.parsed.cpu.name == "mips64"))) then "libc_errno" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".errno."0.3.1" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "io_lifetimes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".io-lifetimes."1.0.10" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && (hostPlatform.parsed.kernel.name == "linux" && (hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.significantByte == "littleEndian" && (hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.name == "powerpc64" || hostPlatform.parsed.cpu.name == "riscv64" || hostPlatform.parsed.cpu.name == "mips" || hostPlatform.parsed.cpu.name == "mips64")) || !(hostPlatform.parsed.kernel.name == "linux" && (hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.significantByte == "littleEndian" && (hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.name == "powerpc64" || hostPlatform.parsed.cpu.name == "riscv64" || hostPlatform.parsed.cpu.name == "mips" || hostPlatform.parsed.cpu.name == "mips64")))) then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && (hostPlatform.parsed.kernel.name == "linux" && (hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.significantByte == "littleEndian" && (hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.name == "powerpc64" || hostPlatform.parsed.cpu.name == "riscv64" || hostPlatform.parsed.cpu.name == "mips" || hostPlatform.parsed.cpu.name == "mips64")) || (hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux") && !(hostPlatform.parsed.kernel.name == "linux" && (hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.significantByte == "littleEndian" && (hostPlatform.parsed.cpu.name == "armv6l" || hostPlatform.parsed.cpu.name == "armv7l" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.cpu.bits == 64 || hostPlatform.parsed.cpu.name == "powerpc64" || hostPlatform.parsed.cpu.name == "riscv64" || hostPlatform.parsed.cpu.name == "mips" || hostPlatform.parsed.cpu.name == "mips64")))) then "linux_raw_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".linux-raw-sys."0.3.4" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out;
+ };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.1" = overridableMkRustCrate (profileName: rec {
name = "rustls";
version = "0.19.1";
@@ -4429,7 +4426,7 @@ in
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "dyn_clone" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".dyn-clone."1.0.5" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "schemars_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".schemars_derive."0.8.8" { profileName = "__noProfile"; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.81" { inherit profileName; }).out;
};
});
@@ -4440,8 +4437,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "41ae4dce13e8614c46ac3c38ef1c0d668b101df6ac39817aebdaa26642ddae9b"; };
dependencies = {
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "serde_derive_internals" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_derive_internals."0.25.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
@@ -4487,7 +4484,7 @@ in
(lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "serde")
];
dependencies = {
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "zeroize" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zeroize."1.5.4" { inherit profileName; }).out;
};
});
@@ -4505,7 +4502,7 @@ in
bitflags = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out;
core_foundation = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".core-foundation."0.9.3" { inherit profileName; }).out;
core_foundation_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".core-foundation-sys."0.8.3" { inherit profileName; }).out;
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
security_framework_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".security-framework-sys."2.6.1" { inherit profileName; }).out;
};
});
@@ -4520,7 +4517,7 @@ in
];
dependencies = {
core_foundation_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".core-foundation-sys."0.8.3" { inherit profileName; }).out;
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
@@ -4535,11 +4532,11 @@ in
];
});
- "registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" = overridableMkRustCrate (profileName: rec {
name = "serde";
- version = "1.0.137";
+ version = "1.0.160";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"; };
+ src = fetchCratesIo { inherit name version; sha256 = "bb2f3770c8bce3bcda7e149193a069a0f4365bda1fa5cd88e03bca26afc1216c"; };
features = builtins.concatLists [
(lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "alloc")
[ "default" ]
@@ -4549,7 +4546,7 @@ in
[ "std" ]
];
dependencies = {
- serde_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.137" { profileName = "__noProfile"; }).out;
+ serde_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.160" { profileName = "__noProfile"; }).out;
};
});
@@ -4560,7 +4557,7 @@ in
src = fetchCratesIo { inherit name version; sha256 = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"; };
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "ordered_float" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ordered-float."2.10.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
@@ -4574,22 +4571,22 @@ in
[ "std" ]
];
dependencies = {
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.137" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.160" = overridableMkRustCrate (profileName: rec {
name = "serde_derive";
- version = "1.0.137";
+ version = "1.0.160";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"; };
+ src = fetchCratesIo { inherit name version; sha256 = "291a097c63d8497e00160b166a967a4a79c64f3facdd01cbd7502231688d77df"; };
features = builtins.concatLists [
[ "default" ]
];
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
- syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
+ syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.15" { inherit profileName; }).out;
};
});
@@ -4599,8 +4596,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "1dbab34ca63057a1f15280bdf3c39f2b1eb1b54c17e98360e511637aef7418c6"; };
dependencies = {
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -4618,10 +4615,23 @@ in
[ "std" ]
];
dependencies = {
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.8.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.9.3" { inherit profileName; }).out;
itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.1" { inherit profileName; }).out;
ryu = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.9" { inherit profileName; }).out;
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".serde_spanned."0.6.1" = overridableMkRustCrate (profileName: rec {
+ name = "serde_spanned";
+ version = "0.6.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"; };
+ features = builtins.concatLists [
+ [ "serde" ]
+ ];
+ dependencies = {
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
@@ -4634,7 +4644,7 @@ in
${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "form_urlencoded" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".form_urlencoded."1.0.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "itoa" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.1" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "ryu" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.9" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
};
});
@@ -4644,9 +4654,9 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0"; };
dependencies = {
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.8.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.9.3" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "ryu" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.9" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "yaml_rust" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".yaml-rust."0.4.5" { inherit profileName; }).out;
};
});
@@ -4728,15 +4738,19 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"; };
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".siphasher."0.2.3" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".siphasher."0.3.10" = overridableMkRustCrate (profileName: rec {
name = "siphasher";
- version = "0.2.3";
+ version = "0.3.10";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"; };
+ src = fetchCratesIo { inherit name version; sha256 = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "std" ]
+ ];
});
"registry+https://github.com/rust-lang/crates.io-index".slab."0.4.5" = overridableMkRustCrate (profileName: rec {
@@ -4765,7 +4779,7 @@ in
crossbeam_utils = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-utils."0.8.8" { inherit profileName; }).out;
${ if hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "darwin" || hostPlatform.parsed.kernel.name == "windows" then "fs2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fs2."0.4.3" { inherit profileName; }).out;
fxhash = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fxhash."0.2.1" { inherit profileName; }).out;
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
parking_lot = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.11.2" { inherit profileName; }).out;
};
@@ -4778,16 +4792,16 @@ in
src = fetchCratesIo { inherit name version; sha256 = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"; };
});
- "registry+https://github.com/rust-lang/crates.io-index".socket2."0.4.4" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".socket2."0.4.9" = overridableMkRustCrate (profileName: rec {
name = "socket2";
- version = "0.4.4";
+ version = "0.4.9";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"; };
+ src = fetchCratesIo { inherit name version; sha256 = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"; };
features = builtins.concatLists [
[ "all" ]
];
dependencies = {
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
});
@@ -4820,7 +4834,7 @@ in
];
dependencies = {
bitflags = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."1.3.2" { inherit profileName; }).out;
- ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if !(hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "android") then "parking_lot" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.11.2" { inherit profileName; }).out;
${ if !(hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "android") then "parking_lot_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot_core."0.8.5" { inherit profileName; }).out;
static_init_macro = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".static_init_macro."1.0.2" { profileName = "__noProfile"; }).out;
@@ -4838,8 +4852,8 @@ in
src = fetchCratesIo { inherit name version; sha256 = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf"; };
dependencies = {
memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.4.1" { inherit profileName; }).out;
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
buildDependencies = {
@@ -4874,8 +4888,8 @@ in
dependencies = {
heck = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heck."0.3.3" { inherit profileName; }).out;
proc_macro_error = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro-error."1.0.4" { inherit profileName; }).out;
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -4906,12 +4920,34 @@ in
[ "visit-mut" ]
];
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
unicode_xid = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-xid."0.2.2" { inherit profileName; }).out;
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".syn."2.0.15" = overridableMkRustCrate (profileName: rec {
+ name = "syn";
+ version = "2.0.15";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"; };
+ features = builtins.concatLists [
+ [ "clone-impls" ]
+ [ "default" ]
+ [ "derive" ]
+ [ "full" ]
+ [ "parsing" ]
+ [ "printing" ]
+ [ "proc-macro" ]
+ [ "quote" ]
+ ];
+ dependencies = {
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
+ unicode_ident = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.5" { inherit profileName; }).out;
+ };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".synchronoise."1.0.0" = overridableMkRustCrate (profileName: rec {
name = "synchronoise";
version = "1.0.0";
@@ -4932,13 +4968,28 @@ in
[ "proc-macro" ]
];
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
unicode_xid = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-xid."0.2.2" { inherit profileName; }).out;
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".systemstat."0.2.3" = overridableMkRustCrate (profileName: rec {
+ name = "systemstat";
+ version = "0.2.3";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "a24aec24a9312c83999a28e3ef9db7e2afd5c64bf47725b758cdc1cafd5b0bd2"; };
+ dependencies = {
+ bytesize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytesize."1.1.0" { inherit profileName; }).out;
+ lazy_static = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ ${ if hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.kernel.name == "android" then "nom" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".nom."7.1.1" { inherit profileName; }).out;
+ time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.3.9" { inherit profileName; }).out;
+ ${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
+ };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".tempfile."3.3.0" = overridableMkRustCrate (profileName: rec {
name = "tempfile";
version = "3.3.0";
@@ -4947,7 +4998,7 @@ in
dependencies = {
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "cfg_if" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "fastrand" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fastrand."1.7.0" { inherit profileName; }).out;
- ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && (hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "wasi") then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && (hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "wasi") then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && hostPlatform.parsed.kernel.name == "redox" then "syscall" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.11" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "remove_dir_all" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".remove_dir_all."0.5.3" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
@@ -4960,7 +5011,7 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"; };
dependencies = {
- ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.isWindows then "winapi_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi-util."0.1.5" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && hostPlatform.isWindows then "winapi_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi-util."0.1.5" { inherit profileName; }).out;
};
});
@@ -4974,13 +5025,6 @@ in
};
});
- "registry+https://github.com/rust-lang/crates.io-index".textwrap."0.15.0" = overridableMkRustCrate (profileName: rec {
- name = "textwrap";
- version = "0.15.0";
- registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"; };
- });
-
"registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.31" = overridableMkRustCrate (profileName: rec {
name = "thiserror";
version = "1.0.31";
@@ -4997,8 +5041,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"; };
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -5009,7 +5053,7 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"; };
dependencies = {
- once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
+ once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.17.1" { inherit profileName; }).out;
};
});
@@ -5019,7 +5063,7 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"; };
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.parsed.kernel.name == "wasi" then "wasi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasi."0.10.0+wasi-snapshot-preview1" { inherit profileName; }).out;
${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
};
@@ -5037,16 +5081,16 @@ in
[ "std" ]
];
dependencies = {
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
${ if hostPlatform.isUnix then "num_threads" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_threads."0.1.5" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".timeago."0.3.1" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".timeago."0.4.1" = overridableMkRustCrate (profileName: rec {
name = "timeago";
- version = "0.3.1";
+ version = "0.4.1";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "6ec32dde57efb15c035ac074118d7f32820451395f28cb0524a01d4e94983b26"; };
+ src = fetchCratesIo { inherit name version; sha256 = "5082dc942361cdfb74eab98bf995762d6015e5bb3a20bf7c5c71213778b4fcb4"; };
features = builtins.concatLists [
[ "chrono" ]
[ "default" ]
@@ -5055,7 +5099,7 @@ in
];
dependencies = {
chrono = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.19" { inherit profileName; }).out;
- isolang = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".isolang."1.0.0" { inherit profileName; }).out;
+ isolang = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".isolang."2.2.0" { inherit profileName; }).out;
};
});
@@ -5081,11 +5125,11 @@ in
src = fetchCratesIo { inherit name version; sha256 = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"; };
});
- "registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" = overridableMkRustCrate (profileName: rec {
name = "tokio";
- version = "1.17.0";
+ version = "1.27.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee"; };
+ src = fetchCratesIo { inherit name version; sha256 = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"; };
features = builtins.concatLists [
[ "bytes" ]
[ "default" ]
@@ -5095,11 +5139,9 @@ in
[ "io-util" ]
[ "libc" ]
[ "macros" ]
- [ "memchr" ]
[ "mio" ]
[ "net" ]
[ "num_cpus" ]
- [ "once_cell" ]
(lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "parking_lot")
[ "process" ]
[ "rt" ]
@@ -5110,21 +5152,22 @@ in
[ "sync" ]
[ "time" ]
[ "tokio-macros" ]
- [ "winapi" ]
+ [ "windows-sys" ]
];
dependencies = {
bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.2.0" { inherit profileName; }).out;
- ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
- memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.4.1" { inherit profileName; }).out;
- mio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mio."0.8.2" { inherit profileName; }).out;
+ ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ mio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mio."0.8.6" { inherit profileName; }).out;
num_cpus = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.13.1" { inherit profileName; }).out;
- once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.10.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "parking_lot" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.12.0" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
${ if hostPlatform.isUnix then "signal_hook_registry" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".signal-hook-registry."1.4.0" { inherit profileName; }).out;
- socket2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".socket2."0.4.4" { inherit profileName; }).out;
- tokio_macros = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-macros."1.7.0" { profileName = "__noProfile"; }).out;
- ${ if hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out;
+ ${ if !(hostPlatform.parsed.cpu.name == "wasm32" || hostPlatform.parsed.cpu.name == "wasm64") then "socket2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".socket2."0.4.9" { inherit profileName; }).out;
+ tokio_macros = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-macros."2.0.0" { profileName = "__noProfile"; }).out;
+ ${ if hostPlatform.isWindows then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.45.0" { inherit profileName; }).out;
+ };
+ buildDependencies = {
+ autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out;
};
});
@@ -5135,19 +5178,19 @@ in
src = fetchCratesIo { inherit name version; sha256 = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"; };
dependencies = {
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".tokio-macros."1.7.0" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".tokio-macros."2.0.0" = overridableMkRustCrate (profileName: rec {
name = "tokio-macros";
- version = "1.7.0";
+ version = "2.0.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"; };
+ src = fetchCratesIo { inherit name version; sha256 = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"; };
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
- syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
+ syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.15" { inherit profileName; }).out;
};
});
@@ -5158,7 +5201,7 @@ in
src = fetchCratesIo { inherit name version; sha256 = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"; };
dependencies = {
rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.19.1" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
webpki = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.21.4" { inherit profileName; }).out;
};
});
@@ -5175,7 +5218,7 @@ in
];
dependencies = {
rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.20.6" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
webpki = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.22.0" { inherit profileName; }).out;
};
});
@@ -5193,7 +5236,7 @@ in
dependencies = {
futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.21" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
};
});
@@ -5213,7 +5256,7 @@ in
futures_sink = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.21" { inherit profileName; }).out;
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
};
});
@@ -5239,20 +5282,56 @@ in
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "slab" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".slab."0.4.5" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".toml."0.5.8" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".toml."0.6.0" = overridableMkRustCrate (profileName: rec {
name = "toml";
- version = "0.5.8";
+ version = "0.6.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "4fb9d890e4dc9298b70f740f615f2e05b9db37dce531f6b24fb77ac993f9f217"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ [ "display" ]
+ [ "parse" ]
+ ];
+ dependencies = {
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
+ serde_spanned = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_spanned."0.6.1" { inherit profileName; }).out;
+ toml_datetime = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml_datetime."0.5.1" { inherit profileName; }).out;
+ toml_edit = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml_edit."0.18.1" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".toml_datetime."0.5.1" = overridableMkRustCrate (profileName: rec {
+ name = "toml_datetime";
+ version = "0.5.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5"; };
+ features = builtins.concatLists [
+ [ "serde" ]
+ ];
+ dependencies = {
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".toml_edit."0.18.1" = overridableMkRustCrate (profileName: rec {
+ name = "toml_edit";
+ version = "0.18.1";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"; };
+ src = fetchCratesIo { inherit name version; sha256 = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b"; };
features = builtins.concatLists [
[ "default" ]
+ [ "serde" ]
];
dependencies = {
- serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.137" { inherit profileName; }).out;
+ indexmap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.9.3" { inherit profileName; }).out;
+ nom8 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".nom8."0.2.0" { inherit profileName; }).out;
+ serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.160" { inherit profileName; }).out;
+ serde_spanned = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_spanned."0.6.1" { inherit profileName; }).out;
+ toml_datetime = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml_datetime."0.5.1" { inherit profileName; }).out;
};
});
@@ -5292,7 +5371,7 @@ in
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "pin_project" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost1" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost."0.9.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_derive" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-derive."0.9.0" { profileName = "__noProfile"; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio_stream" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.8" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.6.9" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tower" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.12" { inherit profileName; }).out;
@@ -5314,9 +5393,9 @@ in
(lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "transport")
];
dependencies = {
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "proc_macro2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "prost_build" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-build."0.9.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "quote" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "syn" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -5355,12 +5434,12 @@ in
dependencies = {
futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.21" { inherit profileName; }).out;
futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.21" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.8.0" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."1.9.3" { inherit profileName; }).out;
pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.0.12" { inherit profileName; }).out;
pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "rand" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "slab" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".slab."0.4.5" { inherit profileName; }).out;
- tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.17.0" { inherit profileName; }).out;
+ tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.27.0" { inherit profileName; }).out;
${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tokio_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.0" { inherit profileName; }).out;
tower_layer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-layer."0.3.1" { inherit profileName; }).out;
tower_service = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.1" { inherit profileName; }).out;
@@ -5438,8 +5517,8 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b"; };
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
};
});
@@ -5625,27 +5704,40 @@ in
src = fetchCratesIo { inherit name version; sha256 = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"; };
});
- "registry+https://github.com/rust-lang/crates.io-index".url."2.2.2" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".url."2.3.0" = overridableMkRustCrate (profileName: rec {
name = "url";
- version = "2.2.2";
+ version = "2.3.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"; };
+ src = fetchCratesIo { inherit name version; sha256 = "22fe195a4f217c25b25cb5058ced57059824a678474874038dc88d211bf508d3"; };
+ features = builtins.concatLists [
+ [ "default" ]
+ ];
dependencies = {
form_urlencoded = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".form_urlencoded."1.0.1" { inherit profileName; }).out;
idna = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".idna."0.2.3" { inherit profileName; }).out;
- matches = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".matches."0.1.9" { inherit profileName; }).out;
percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.1.0" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".uuid."0.8.2" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".utf8parse."0.2.1" = overridableMkRustCrate (profileName: rec {
+ name = "utf8parse";
+ version = "0.2.1";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
+ ];
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".uuid."1.2.2" = overridableMkRustCrate (profileName: rec {
name = "uuid";
- version = "0.8.2";
+ version = "1.2.2";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"; };
+ src = fetchCratesIo { inherit name version; sha256 = "422ee0de9031b5b948b97a8fc04e3aa35230001a722ddd27943e0be31564ce4c"; };
features = builtins.concatLists [
[ "default" ]
[ "getrandom" ]
+ [ "rng" ]
[ "std" ]
[ "v4" ]
];
@@ -5752,8 +5844,8 @@ in
bumpalo = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bumpalo."3.9.1" { inherit profileName; }).out;
lazy_static = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out;
log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.16" { inherit profileName; }).out;
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
wasm_bindgen_shared = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.79" { inherit profileName; }).out;
};
@@ -5781,7 +5873,7 @@ in
[ "spans" ]
];
dependencies = {
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
wasm_bindgen_macro_support = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro-support."0.2.79" { inherit profileName; }).out;
};
});
@@ -5795,8 +5887,8 @@ in
[ "spans" ]
];
dependencies = {
- proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.46" { inherit profileName; }).out;
- quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.21" { inherit profileName; }).out;
+ proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.56" { inherit profileName; }).out;
+ quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.26" { inherit profileName; }).out;
syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.94" { inherit profileName; }).out;
wasm_bindgen_backend = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-backend."0.2.79" { inherit profileName; }).out;
wasm_bindgen_shared = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.79" { inherit profileName; }).out;
@@ -5880,7 +5972,7 @@ in
dependencies = {
${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "either" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".either."1.6.1" { inherit profileName; }).out;
${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && hostPlatform.isWindows then "lazy_static" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out;
- ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
});
@@ -5890,28 +5982,22 @@ in
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo { inherit name version; sha256 = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"; };
features = builtins.concatLists [
- [ "cfg" ]
[ "consoleapi" ]
[ "errhandlingapi" ]
- [ "evntrace" ]
[ "fileapi" ]
[ "handleapi" ]
(lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "impl-debug")
(lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "impl-default")
- [ "in6addr" ]
- [ "inaddr" ]
- [ "ioapiset" ]
[ "knownfolders" ]
[ "lmcons" ]
[ "minschannel" ]
[ "minwinbase" ]
[ "minwindef" ]
- [ "mswsock" ]
- [ "namedpipeapi" ]
[ "ntdef" ]
[ "ntsecapi" ]
[ "ntstatus" ]
[ "objbase" ]
+ [ "pdh" ]
[ "processenv" ]
[ "processthreadsapi" ]
[ "profileapi" ]
@@ -5922,14 +6008,11 @@ in
[ "std" ]
[ "synchapi" ]
[ "sysinfoapi" ]
- [ "threadpoollegacyapiset" ]
[ "timezoneapi" ]
[ "winbase" ]
[ "wincon" ]
[ "wincrypt" ]
- [ "windef" ]
[ "winerror" ]
- [ "winioctl" ]
[ "winnt" ]
(lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "winreg")
[ "winsock2" ]
@@ -5991,6 +6074,108 @@ in
};
});
+ "registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.45.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows-sys";
+ version = "0.45.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"; };
+ features = builtins.concatLists [
+ [ "Win32" ]
+ [ "Win32_Foundation" ]
+ [ "Win32_Networking" ]
+ [ "Win32_Networking_WinSock" ]
+ [ "Win32_Security" ]
+ [ "Win32_Security_Authorization" ]
+ [ "Win32_Storage" ]
+ [ "Win32_Storage_FileSystem" ]
+ [ "Win32_System" ]
+ [ "Win32_System_Console" ]
+ [ "Win32_System_IO" ]
+ [ "Win32_System_Pipes" ]
+ [ "Win32_System_SystemServices" ]
+ [ "Win32_System_Threading" ]
+ [ "Win32_System_WindowsProgramming" ]
+ [ "default" ]
+ ];
+ dependencies = {
+ windows_targets = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.42.2" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows-sys";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"; };
+ features = builtins.concatLists [
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_Foundation")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_NetworkManagement")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_NetworkManagement_IpHelper")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_Networking")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_Networking_WinSock")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_Security")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_Storage")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_Storage_FileSystem")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System_Console")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System_Diagnostics")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System_Diagnostics_Debug")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System_IO")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System_Threading")
+ (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default")
+ ];
+ dependencies = {
+ ${ if rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli" then "windows_targets" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.0" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.42.2" = overridableMkRustCrate (profileName: rec {
+ name = "windows-targets";
+ version = "0.42.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"; };
+ dependencies = {
+ ${ if hostPlatform.config == "aarch64-pc-windows-gnullvm" then "windows_aarch64_gnullvm" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_gnullvm."0.42.2" { inherit profileName; }).out;
+ ${ if hostPlatform.config == "aarch64-pc-windows-msvc" || hostPlatform.config == "aarch64-uwp-windows-msvc" then "windows_aarch64_msvc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_msvc."0.42.2" { inherit profileName; }).out;
+ ${ if hostPlatform.config == "i686-pc-windows-gnu" || hostPlatform.config == "i686-uwp-windows-gnu" then "windows_i686_gnu" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_i686_gnu."0.42.2" { inherit profileName; }).out;
+ ${ if hostPlatform.config == "i686-pc-windows-msvc" || hostPlatform.config == "i686-uwp-windows-msvc" then "windows_i686_msvc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_i686_msvc."0.42.2" { inherit profileName; }).out;
+ ${ if hostPlatform.config == "x86_64-pc-windows-gnu" || hostPlatform.config == "x86_64-uwp-windows-gnu" then "windows_x86_64_gnu" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnu."0.42.2" { inherit profileName; }).out;
+ ${ if hostPlatform.config == "x86_64-pc-windows-gnullvm" then "windows_x86_64_gnullvm" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnullvm."0.42.2" { inherit profileName; }).out;
+ ${ if hostPlatform.config == "x86_64-pc-windows-msvc" || hostPlatform.config == "x86_64-uwp-windows-msvc" then "windows_x86_64_msvc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_msvc."0.42.2" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows-targets";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"; };
+ dependencies = {
+ ${ if false then "windows_aarch64_gnullvm" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_gnullvm."0.48.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.abi.name == "msvc" then "windows_aarch64_msvc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_msvc."0.48.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.cpu.name == "i686" && hostPlatform.parsed.abi.name == "gnu" then "windows_i686_gnu" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_i686_gnu."0.48.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.cpu.name == "i686" && hostPlatform.parsed.abi.name == "msvc" then "windows_i686_msvc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_i686_msvc."0.48.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.abi.name == "gnu" then "windows_x86_64_gnu" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnu."0.48.0" { inherit profileName; }).out;
+ ${ if false then "windows_x86_64_gnullvm" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnullvm."0.48.0" { inherit profileName; }).out;
+ ${ if (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.abi.name == "msvc" then "windows_x86_64_msvc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_msvc."0.48.0" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_gnullvm."0.42.2" = overridableMkRustCrate (profileName: rec {
+ name = "windows_aarch64_gnullvm";
+ version = "0.42.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_gnullvm."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows_aarch64_gnullvm";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"; };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_msvc."0.32.0" = overridableMkRustCrate (profileName: rec {
name = "windows_aarch64_msvc";
version = "0.32.0";
@@ -5998,6 +6183,20 @@ in
src = fetchCratesIo { inherit name version; sha256 = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"; };
});
+ "registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_msvc."0.42.2" = overridableMkRustCrate (profileName: rec {
+ name = "windows_aarch64_msvc";
+ version = "0.42.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_msvc."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows_aarch64_msvc";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"; };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".windows_i686_gnu."0.32.0" = overridableMkRustCrate (profileName: rec {
name = "windows_i686_gnu";
version = "0.32.0";
@@ -6005,6 +6204,20 @@ in
src = fetchCratesIo { inherit name version; sha256 = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"; };
});
+ "registry+https://github.com/rust-lang/crates.io-index".windows_i686_gnu."0.42.2" = overridableMkRustCrate (profileName: rec {
+ name = "windows_i686_gnu";
+ version = "0.42.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_i686_gnu."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows_i686_gnu";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"; };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".windows_i686_msvc."0.32.0" = overridableMkRustCrate (profileName: rec {
name = "windows_i686_msvc";
version = "0.32.0";
@@ -6012,6 +6225,20 @@ in
src = fetchCratesIo { inherit name version; sha256 = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"; };
});
+ "registry+https://github.com/rust-lang/crates.io-index".windows_i686_msvc."0.42.2" = overridableMkRustCrate (profileName: rec {
+ name = "windows_i686_msvc";
+ version = "0.42.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_i686_msvc."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows_i686_msvc";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"; };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnu."0.32.0" = overridableMkRustCrate (profileName: rec {
name = "windows_x86_64_gnu";
version = "0.32.0";
@@ -6019,6 +6246,34 @@ in
src = fetchCratesIo { inherit name version; sha256 = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"; };
});
+ "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnu."0.42.2" = overridableMkRustCrate (profileName: rec {
+ name = "windows_x86_64_gnu";
+ version = "0.42.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnu."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows_x86_64_gnu";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnullvm."0.42.2" = overridableMkRustCrate (profileName: rec {
+ name = "windows_x86_64_gnullvm";
+ version = "0.42.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnullvm."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows_x86_64_gnullvm";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"; };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_msvc."0.32.0" = overridableMkRustCrate (profileName: rec {
name = "windows_x86_64_msvc";
version = "0.32.0";
@@ -6026,6 +6281,20 @@ in
src = fetchCratesIo { inherit name version; sha256 = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"; };
});
+ "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_msvc."0.42.2" = overridableMkRustCrate (profileName: rec {
+ name = "windows_x86_64_msvc";
+ version = "0.42.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"; };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_msvc."0.48.0" = overridableMkRustCrate (profileName: rec {
+ name = "windows_x86_64_msvc";
+ version = "0.48.0";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"; };
+ });
+
"registry+https://github.com/rust-lang/crates.io-index".winreg."0.10.1" = overridableMkRustCrate (profileName: rec {
name = "winreg";
version = "0.10.1";
@@ -6085,49 +6354,73 @@ in
];
});
- "registry+https://github.com/rust-lang/crates.io-index".zstd."0.9.2+zstd.1.5.1" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".zstd."0.11.2+zstd.1.5.2" = overridableMkRustCrate (profileName: rec {
name = "zstd";
- version = "0.9.2+zstd.1.5.1";
+ version = "0.11.2+zstd.1.5.2";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "2390ea1bf6c038c39674f22d95f0564725fc06034a47129179810b2fc58caa54"; };
+ src = fetchCratesIo { inherit name version; sha256 = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"; };
+ dependencies = {
+ zstd_safe = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-safe."5.0.2+zstd.1.5.2" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.3+zstd.1.5.2" = overridableMkRustCrate (profileName: rec {
+ name = "zstd";
+ version = "0.12.3+zstd.1.5.2";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"; };
features = builtins.concatLists [
(lib.optional (rootFeatures' ? "garage/system-libs" || rootFeatures' ? "garage_block/system-libs") "pkg-config")
];
dependencies = {
- zstd_safe = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-safe."4.1.3+zstd.1.5.1" { inherit profileName; }).out;
+ zstd_safe = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-safe."6.0.5+zstd.1.5.4" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".zstd-safe."4.1.3+zstd.1.5.1" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".zstd-safe."5.0.2+zstd.1.5.2" = overridableMkRustCrate (profileName: rec {
name = "zstd-safe";
- version = "4.1.3+zstd.1.5.1";
+ version = "5.0.2+zstd.1.5.2";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "e99d81b99fb3c2c2c794e3fe56c305c63d5173a16a46b5850b07c935ffc7db79"; };
+ src = fetchCratesIo { inherit name version; sha256 = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"; };
+ features = builtins.concatLists [
+ [ "std" ]
+ ];
+ dependencies = {
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ zstd_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-sys."2.0.8+zstd.1.5.5" { inherit profileName; }).out;
+ };
+ });
+
+ "registry+https://github.com/rust-lang/crates.io-index".zstd-safe."6.0.5+zstd.1.5.4" = overridableMkRustCrate (profileName: rec {
+ name = "zstd-safe";
+ version = "6.0.5+zstd.1.5.4";
+ registry = "registry+https://github.com/rust-lang/crates.io-index";
+ src = fetchCratesIo { inherit name version; sha256 = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"; };
features = builtins.concatLists [
(lib.optional (rootFeatures' ? "garage/system-libs" || rootFeatures' ? "garage_block/system-libs") "pkg-config")
[ "std" ]
];
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
- zstd_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-sys."1.6.2+zstd.1.5.1" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
+ zstd_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-sys."2.0.8+zstd.1.5.5" { inherit profileName; }).out;
};
});
- "registry+https://github.com/rust-lang/crates.io-index".zstd-sys."1.6.2+zstd.1.5.1" = overridableMkRustCrate (profileName: rec {
+ "registry+https://github.com/rust-lang/crates.io-index".zstd-sys."2.0.8+zstd.1.5.5" = overridableMkRustCrate (profileName: rec {
name = "zstd-sys";
- version = "1.6.2+zstd.1.5.1";
+ version = "2.0.8+zstd.1.5.5";
registry = "registry+https://github.com/rust-lang/crates.io-index";
- src = fetchCratesIo { inherit name version; sha256 = "2daf2f248d9ea44454bfcb2516534e8b8ad2fc91bf818a1885495fc42bc8ac9f"; };
+ src = fetchCratesIo { inherit name version; sha256 = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"; };
features = builtins.concatLists [
(lib.optional (rootFeatures' ? "garage/system-libs" || rootFeatures' ? "garage_block/system-libs") "pkg-config")
[ "std" ]
];
dependencies = {
- libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.121" { inherit profileName; }).out;
+ libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.142" { inherit profileName; }).out;
};
buildDependencies = {
cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.73" { profileName = "__noProfile"; }).out;
- ${ if rootFeatures' ? "garage/system-libs" || rootFeatures' ? "garage_block/system-libs" then "pkg_config" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.24" { profileName = "__noProfile"; }).out;
+ pkg_config = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.24" { profileName = "__noProfile"; }).out;
};
});
diff --git a/Makefile b/Makefile
index 23e10f78..55fa16dd 100644
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ all:
clear; cargo build
release:
- nix-build --arg release true
+ nix-build --attr pkgs.amd64.release --no-build-output
shell:
nix-shell
diff --git a/default.nix b/default.nix
index 1791b3c6..ecdf6436 100644
--- a/default.nix
+++ b/default.nix
@@ -1,7 +1,4 @@
-{
- system ? builtins.currentSystem,
- git_version ? null,
-}:
+{ system ? builtins.currentSystem, git_version ? null, }:
with import ./nix/common.nix;
@@ -13,22 +10,21 @@ let
debug = (compile {
inherit system target git_version pkgsSrc cargo2nixOverlay;
release = false;
- }).workspace.garage {
- compileMode = "build";
- };
+ }).workspace.garage { compileMode = "build"; };
release = (compile {
inherit system target git_version pkgsSrc cargo2nixOverlay;
release = true;
- }).workspace.garage {
- compileMode = "build";
- };
+ }).workspace.garage { compileMode = "build"; };
});
- test = (rustPkgs: pkgs.symlinkJoin {
- name ="garage-tests";
- paths = builtins.map (key: rustPkgs.workspace.${key} { compileMode = "test"; }) (builtins.attrNames rustPkgs.workspace);
- });
+ test = (rustPkgs:
+ pkgs.symlinkJoin {
+ name = "garage-tests";
+ paths =
+ builtins.map (key: rustPkgs.workspace.${key} { compileMode = "test"; })
+ (builtins.attrNames rustPkgs.workspace);
+ });
in {
pkgs = {
@@ -55,8 +51,6 @@ in {
inherit system git_version pkgsSrc cargo2nixOverlay;
target = "x86_64-unknown-linux-musl";
compiler = "clippy";
- }).workspace.garage {
- compileMode = "build";
- };
+ }).workspace.garage { compileMode = "build"; };
};
}
diff --git a/doc/api/garage-admin-v0.yml b/doc/api/garage-admin-v0.yml
index a841f8d9..51968894 100644
--- a/doc/api/garage-admin-v0.yml
+++ b/doc/api/garage-admin-v0.yml
@@ -678,10 +678,12 @@ paths:
properties:
maxSize:
type: integer
+ format: int64
nullable: true
example: 19029801
maxObjects:
type: integer
+ format: int64
nullable: true
example: null
@@ -1158,9 +1160,11 @@ components:
$ref: '#/components/schemas/BucketKeyInfo'
objects:
type: integer
+ format: int64
example: 14827
bytes:
type: integer
+ format: int64
example: 13189855625
unfinishedUploads:
type: integer
@@ -1171,10 +1175,12 @@ components:
maxSize:
nullable: true
type: integer
+ format: int64
example: null
maxObjects:
nullable: true
type: integer
+ format: int64
example: null
diff --git a/doc/book/connect/_index.md b/doc/book/connect/_index.md
index ca44ac17..93a2b87e 100644
--- a/doc/book/connect/_index.md
+++ b/doc/book/connect/_index.md
@@ -10,11 +10,12 @@ Garage implements the Amazon S3 protocol, which makes it compatible with many ex
In particular, you will find here instructions to connect it with:
- - [Browsing tools](@/documentation/connect/cli.md)
- [Applications](@/documentation/connect/apps/index.md)
- - [Website hosting](@/documentation/connect/websites.md)
- - [Software repositories](@/documentation/connect/repositories.md)
+ - [Browsing tools](@/documentation/connect/cli.md)
- [FUSE](@/documentation/connect/fs.md)
+ - [Observability](@/documentation/connect/observability.md)
+ - [Software repositories](@/documentation/connect/repositories.md)
+ - [Website hosting](@/documentation/connect/websites.md)
### Generic instructions
diff --git a/doc/book/connect/apps/index.md b/doc/book/connect/apps/index.md
index 78d9310d..e2d007c3 100644
--- a/doc/book/connect/apps/index.md
+++ b/doc/book/connect/apps/index.md
@@ -13,7 +13,7 @@ In this section, we cover the following web applications:
| [Matrix](#matrix) | ✅ | Tested with `synapse-s3-storage-provider` |
| [Pixelfed](#pixelfed) | ❓ | Not yet tested |
| [Pleroma](#pleroma) | ❓ | Not yet tested |
-| [Lemmy](#lemmy) | ❓ | Not yet tested |
+| [Lemmy](#lemmy) | ✅ | Supported with pict-rs |
| [Funkwhale](#funkwhale) | ❓ | Not yet tested |
| [Misskey](#misskey) | ❓ | Not yet tested |
| [Prismo](#prismo) | ❓ | Not yet tested |
@@ -484,7 +484,68 @@ And add a new line. For example, to run it every 10 minutes:
## Lemmy
-Lemmy uses pict-rs that [supports S3 backends](https://git.asonix.dog/asonix/pict-rs/commit/f9f4fc63d670f357c93f24147c2ee3e1278e2d97)
+Lemmy uses pict-rs that [supports S3 backends](https://git.asonix.dog/asonix/pict-rs/commit/f9f4fc63d670f357c93f24147c2ee3e1278e2d97).
+This feature requires `pict-rs >= 4.0.0`.
+
+### Creating your bucket
+
+This is the usual Garage setup:
+
+```bash
+garage key new --name pictrs-key
+garage bucket create pictrs-data
+garage bucket allow pictrs-data --read --write --key pictrs-key
+```
+
+Note the Key ID and Secret Key.
+
+### Migrating your data
+
+If your pict-rs instance holds existing data, you first need to migrate to the S3 bucket.
+
+Stop pict-rs, then run the migration utility from local filesystem to the bucket:
+
+```
+pict-rs \
+ filesystem -p /path/to/existing/files \
+ object-store \
+ -e my-garage-instance.mydomain.tld:3900 \
+ -b pictrs-data \
+ -r garage \
+ -a GK... \
+ -s abcdef0123456789...
+```
+
+This is pretty slow, so hold on while migrating.
+
+### Running pict-rs with an S3 backend
+
+Pict-rs supports both a configuration file and environment variables.
+
+Either set the following section in your `pict-rs.toml`:
+
+```
+[store]
+type = 'object_storage'
+endpoint = 'http://my-garage-instance.mydomain.tld:3900'
+bucket_name = 'pictrs-data'
+region = 'garage'
+access_key = 'GK...'
+secret_key = 'abcdef0123456789...'
+```
+
+... or set these environment variables:
+
+
+```
+PICTRS__STORE__TYPE=object_storage
+PICTRS__STORE__ENDPOINT=http:/my-garage-instance.mydomain.tld:3900
+PICTRS__STORE__BUCKET_NAME=pictrs-data
+PICTRS__STORE__REGION=garage
+PICTRS__STORE__ACCESS_KEY=GK...
+PICTRS__STORE__SECRET_KEY=abcdef0123456789...
+```
+
## Funkwhale
diff --git a/doc/book/connect/backup.md b/doc/book/connect/backup.md
index 919e78c3..97a89e36 100644
--- a/doc/book/connect/backup.md
+++ b/doc/book/connect/backup.md
@@ -13,7 +13,41 @@ Borg Backup is very popular among the backup tools but it is not yet compatible
We recommend using any other tool listed in this guide because they are all compatible with the S3 API.
If you still want to use Borg, you can use it with `rclone mount`.
+## git-annex
+[git-annex](https://git-annex.branchable.com/) supports synchronizing files
+with its [S3 special remote](https://git-annex.branchable.com/special_remotes/S3/).
+
+Note that `git-annex` requires to be compiled with Haskell package version
+`aws-0.24` to work with Garage.
+
+```bash
+garage key new --name my-key
+garage bucket create my-git-annex
+garage bucket allow my-git-annex --read --write --key my-key
+```
+
+Register your Key ID and Secret key in your environment:
+
+```bash
+export AWS_ACCESS_KEY_ID=GKxxx
+export AWS_SECRET_ACCESS_KEY=xxxx
+```
+
+Within a git-annex enabled repository, configure your Garage S3 endpoint with
+the following command:
+
+```bash
+git annex initremote garage type=S3 encryption=none host=my-garage-instance.mydomain.tld protocol=https bucket=my-git-annex requeststyle=path region=garage signature=v4
+```
+
+Files can now be synchronized using the usual `git-annex` `copy` or `get`
+commands.
+
+Note that for simplicity - this example does not enable encryption for the files
+sent to Garage - please refer to the
+[git-annex encryption page](https://git-annex.branchable.com/encryption/) for
+how to configure this.
## Restic
diff --git a/doc/book/connect/cli.md b/doc/book/connect/cli.md
index 74e2d7ed..591ac151 100644
--- a/doc/book/connect/cli.md
+++ b/doc/book/connect/cli.md
@@ -12,6 +12,7 @@ These tools are particularly suitable for debug, backups, website deployments or
| [AWS CLI](#aws-cli) | ✅ | Recommended |
| [rclone](#rclone) | ✅ | |
| [s3cmd](#s3cmd) | ✅ | |
+| [s5cmd](#s5cmd) | ✅ | |
| [(Cyber)duck](#cyberduck) | ✅ | |
| [WinSCP (libs3)](#winscp) | ✅ | CLI instructions only |
| [sftpgo](#sftpgo) | ✅ | |
@@ -178,59 +179,34 @@ s3cmd put /tmp/hello.txt s3://my-bucket/
s3cmd get s3://my-bucket/hello.txt hello.txt
```
-## Cyberduck & duck {#cyberduck}
+## `s5cmd`
-Both Cyberduck (the GUI) and duck (the CLI) have a concept of "Connection Profiles" that contain some presets for a specific provider.
-We wrote the following connection profile for Garage:
-
-```xml
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
- <dict>
- <key>Protocol</key>
- <string>s3</string>
- <key>Vendor</key>
- <string>garage</string>
- <key>Scheme</key>
- <string>https</string>
- <key>Description</key>
- <string>GarageS3</string>
- <key>Default Hostname</key>
- <string>127.0.0.1</string>
- <key>Default Port</key>
- <string>4443</string>
- <key>Hostname Configurable</key>
- <false/>
- <key>Port Configurable</key>
- <false/>
- <key>Username Configurable</key>
- <true/>
- <key>Username Placeholder</key>
- <string>Access Key ID (GK...)</string>
- <key>Password Placeholder</key>
- <string>Secret Key</string>
- <key>Properties</key>
- <array>
- <string>s3service.disable-dns-buckets=true</string>
- </array>
- <key>Region</key>
- <string>garage</string>
- <key>Regions</key>
- <array>
- <string>garage</string>
- </array>
- </dict>
-</plist>
+Configure a credentials file as follows:
+
+```bash
+export AWS_ACCESS_KEY_ID=GK...
+export AWS_SECRET_ACCESS_KEY=
+export AWS_DEFAULT_REGION='garage'
+export AWS_ENDPOINT='http://localhost:3900'
```
-*Note: If your garage instance is configured with vhost access style, you can remove `s3service.disable-dns-buckets=true`.*
+After adding these environment variables in your shell, `s5cmd` can be used
+with:
-### Instructions for the GUI
+```bash
+s5cmd --endpoint-url=$AWS_ENDPOINT ls
+```
+
+See its usage output for other commands available.
+
+## Cyberduck & duck {#cyberduck}
+
+Both Cyberduck (the GUI) and duck (the CLI) have a concept of "Connection Profiles" that contain some presets for a specific provider.
-Copy the connection profile, and save it anywhere as `garage.cyberduckprofile`.
-Then find this file with your file explorer and double click on it: Cyberduck will open a connection wizard for this profile.
-Simply follow the wizard and you should be done!
+Within Cyberduck, a
+[Garage connection profile](https://docs.cyberduck.io/protocols/s3/garage/) is
+available within the `Preferences -> Profiles` section. This can enabled and
+then connections to Garage may be configured.
### Instuctions for the CLI
diff --git a/doc/book/connect/observability.md b/doc/book/connect/observability.md
new file mode 100644
index 00000000..c5037fa4
--- /dev/null
+++ b/doc/book/connect/observability.md
@@ -0,0 +1,57 @@
++++
+title = "Observability"
+weight = 25
++++
+
+An object store can be used as data storage location for metrics, and logs which
+can then be leveraged for systems observability.
+
+## Metrics
+
+### Prometheus
+
+Prometheus itself has no object store capabilities, however two projects exist
+which support storing metrics in an object store:
+
+ - [Cortex](https://cortexmetrics.io/)
+ - [Thanos](https://thanos.io/)
+
+## System logs
+
+### Vector
+
+[Vector](https://vector.dev/) natively supports S3 as a
+[data sink](https://vector.dev/docs/reference/configuration/sinks/aws_s3/)
+(and [source](https://vector.dev/docs/reference/configuration/sources/aws_s3/)).
+
+This can be configured with Garage with the following:
+
+```bash
+garage key new --name vector-system-logs
+garage bucket create system-logs
+garage bucket allow system-logs --read --write --key vector-system-logs
+```
+
+The `vector.toml` can then be configured as follows:
+
+```toml
+[sources.journald]
+type = "journald"
+current_boot_only = true
+
+[sinks.out]
+encoding.codec = "json"
+type = "aws_s3"
+inputs = [ "journald" ]
+bucket = "system-logs"
+key_prefix = "%F/"
+compression = "none"
+region = "garage"
+endpoint = "https://my-garage-instance.mydomain.tld"
+auth.access_key_id = ""
+auth.secret_access_key = ""
+```
+
+This is an example configuration - please refer to the Vector documentation for
+all configuration and transformation possibilities. Also note that Garage
+performs its own compression, so this should be disabled in Vector.
diff --git a/doc/book/cookbook/_index.md b/doc/book/cookbook/_index.md
index 6e279363..07bf6ebf 100644
--- a/doc/book/cookbook/_index.md
+++ b/doc/book/cookbook/_index.md
@@ -6,7 +6,7 @@ sort_by = "weight"
+++
A cookbook, when you cook, is a collection of recipes.
-Similarly, Garage's cookbook contains a collection of recipes that are known to works well!
+Similarly, Garage's cookbook contains a collection of recipes that are known to work well!
This chapter could also be referred as "Tutorials" or "Best practices".
- **[Multi-node deployment](@/documentation/cookbook/real-world.md):** This page will walk you through all of the necessary
@@ -16,6 +16,10 @@ This chapter could also be referred as "Tutorials" or "Best practices".
source in case a binary is not provided for your architecture, or if you want to
hack with us!
+- **[Binary packages](@/documentation/cookbook/binary-packages.md):** This page
+ lists the different platforms that provide ready-built software packages for
+ Garage.
+
- **[Integration with Systemd](@/documentation/cookbook/systemd.md):** This page explains how to run Garage
as a Systemd service (instead of as a Docker container).
@@ -26,6 +30,14 @@ This chapter could also be referred as "Tutorials" or "Best practices".
- **[Configuring a reverse-proxy](@/documentation/cookbook/reverse-proxy.md):** This page explains how to configure a reverse-proxy to add TLS support to your S3 api endpoint.
+- **[Deploying on Kubernetes](@/documentation/cookbook/kubernetes.md):** This page explains how to deploy Garage on Kubernetes using our Helm chart.
+
+- **[Deploying with Ansible](@/documentation/cookbook/ansible.md):** This page lists available Ansible roles developed by the community to deploy Garage.
+
+- **[Monitoring Garage](@/documentation/cookbook/monitoring.md)** This page
+ explains the Prometheus metrics available for monitoring the Garage
+ cluster/nodes.
+
- **[Recovering from failures](@/documentation/cookbook/recovering.md):** Garage's first selling point is resilience
to hardware failures. This section explains how to recover from such a failure in the
best possible way.
diff --git a/doc/book/cookbook/ansible.md b/doc/book/cookbook/ansible.md
new file mode 100644
index 00000000..6d624c9c
--- /dev/null
+++ b/doc/book/cookbook/ansible.md
@@ -0,0 +1,51 @@
++++
+title = "Deploying with Ansible"
+weight = 35
++++
+
+While Ansible is not officially supported to deploy Garage, several community members
+have published Ansible roles. We list them and compare them below.
+
+## Comparison of Ansible roles
+
+| Feature | [ansible-role-garage](#zorun-ansible-role-garage) | [garage-docker-ansible-deploy](#moan0s-garage-docker-ansible-deploy) |
+|------------------------------------|---------------------------------------------|---------------------------------------------------------------|
+| **Runtime** | Systemd | Docker |
+| **Target OS** | Any Linux | Any Linux |
+| **Architecture** | amd64, arm64, i686 | amd64, arm64 |
+| **Additional software** | None | Traefik |
+| **Automatic node connection** | ❌ | ✅ |
+| **Layout management** | ❌ | ✅ |
+| **Manage buckets & keys** | ❌ | ✅ (basic) |
+| **Allow custom Garage config** | ✅ | ❌ |
+| **Facilitate Garage upgrades** | ✅ | ❌ |
+| **Multiple instances on one host** | ✅ | ✅ |
+
+
+## zorun/ansible-role-garage
+
+[Source code](https://github.com/zorun/ansible-role-garage), [Ansible galaxy](https://galaxy.ansible.com/zorun/garage)
+
+This role is voluntarily simple: it relies on the official Garage static
+binaries and only requires Systemd. As such, it should work on any
+Linux-based OS.
+
+To make things more flexible, the user has to provide a Garage
+configuration template. This allows to customize Garage configuration in
+any way.
+
+Some more features might be added, such as a way to automatically connect
+nodes to each other or to define a layout.
+
+## moan0s/garage-docker-ansible-deploy
+
+[Source code](https://github.com/moan0s/garage-docker-ansible-deploy), [Blog post](https://hyteck.de/post/garage/)
+
+This role is based on the Docker image for Garage, and comes with
+"batteries included": it will additionally install Docker and Traefik. In
+addition, it is "opinionated" in the sense that it expects a particular
+deployment structure (one instance per disk, one gateway per host,
+structured DNS names, etc).
+
+As a result, this role makes it easier to start with Garage on Ansible,
+but is less flexible.
diff --git a/doc/book/cookbook/binary-packages.md b/doc/book/cookbook/binary-packages.md
new file mode 100644
index 00000000..606de2b6
--- /dev/null
+++ b/doc/book/cookbook/binary-packages.md
@@ -0,0 +1,28 @@
++++
+title = "Binary packages"
+weight = 11
++++
+
+Garage is also available in binary packages on:
+
+## Alpine Linux
+
+```bash
+apk install garage
+```
+
+## Arch Linux
+
+Garage is available in the [AUR](https://aur.archlinux.org/packages/garage).
+
+## FreeBSD
+
+```bash
+pkg install garage
+```
+
+## NixOS
+
+```bash
+nix-shell -p garage
+```
diff --git a/doc/book/cookbook/gateways.md b/doc/book/cookbook/gateways.md
index 62ed0fe2..ce4c7fa8 100644
--- a/doc/book/cookbook/gateways.md
+++ b/doc/book/cookbook/gateways.md
@@ -21,7 +21,7 @@ You can configure Garage as a gateway on all nodes that will consume your S3 API
The instructions are similar to a regular node, the only option that is different is while configuring the node, you must set the `--gateway` parameter:
```bash
-garage layout assign --gateway --tag gw1 <node_id>
+garage layout assign --gateway --tag gw1 -z dc1 <node_id>
garage layout show # review the changes you are making
garage layout apply # once satisfied, apply the changes
```
diff --git a/doc/book/cookbook/kubernetes.md b/doc/book/cookbook/kubernetes.md
index 9eafe3e1..dfeb3281 100644
--- a/doc/book/cookbook/kubernetes.md
+++ b/doc/book/cookbook/kubernetes.md
@@ -48,7 +48,8 @@ garage:
replicationMode: "2"
# Start 4 instances (StatefulSets) of garage
-replicaCount: 4
+deployment:
+ replicaCount: 4
# Override default storage class and size
persistence:
diff --git a/doc/book/cookbook/monitoring.md b/doc/book/cookbook/monitoring.md
index 8206f645..8313daa9 100644
--- a/doc/book/cookbook/monitoring.md
+++ b/doc/book/cookbook/monitoring.md
@@ -52,255 +52,6 @@ or make your own.
We detail below the list of exposed metrics and their meaning.
-
## List of exported metrics
-
-### Metrics of the API endpoints
-
-#### `api_admin_request_counter` (counter)
-
-Counts the number of requests to a given endpoint of the administration API. Example:
-
-```
-api_admin_request_counter{api_endpoint="Metrics"} 127041
-```
-
-#### `api_admin_request_duration` (histogram)
-
-Evaluates the duration of API calls to the various administration API endpoint. Example:
-
-```
-api_admin_request_duration_bucket{api_endpoint="Metrics",le="0.5"} 127041
-api_admin_request_duration_sum{api_endpoint="Metrics"} 605.250344830999
-api_admin_request_duration_count{api_endpoint="Metrics"} 127041
-```
-
-#### `api_s3_request_counter` (counter)
-
-Counts the number of requests to a given endpoint of the S3 API. Example:
-
-```
-api_s3_request_counter{api_endpoint="CreateMultipartUpload"} 1
-```
-
-#### `api_s3_error_counter` (counter)
-
-Counts the number of requests to a given endpoint of the S3 API that returned an error. Example:
-
-```
-api_s3_error_counter{api_endpoint="GetObject",status_code="404"} 39
-```
-
-#### `api_s3_request_duration` (histogram)
-
-Evaluates the duration of API calls to the various S3 API endpoints. Example:
-
-```
-api_s3_request_duration_bucket{api_endpoint="CreateMultipartUpload",le="0.5"} 1
-api_s3_request_duration_sum{api_endpoint="CreateMultipartUpload"} 0.046340762
-api_s3_request_duration_count{api_endpoint="CreateMultipartUpload"} 1
-```
-
-#### `api_k2v_request_counter` (counter), `api_k2v_error_counter` (counter), `api_k2v_error_duration` (histogram)
-
-Same as for S3, for the K2V API.
-
-
-### Metrics of the Web endpoint
-
-
-#### `web_request_counter` (counter)
-
-Number of requests to the web endpoint
-
-```
-web_request_counter{method="GET"} 80
-```
-
-#### `web_request_duration` (histogram)
-
-Duration of requests to the web endpoint
-
-```
-web_request_duration_bucket{method="GET",le="0.5"} 80
-web_request_duration_sum{method="GET"} 1.0528433229999998
-web_request_duration_count{method="GET"} 80
-```
-
-#### `web_error_counter` (counter)
-
-Number of requests to the web endpoint resulting in errors
-
-```
-web_error_counter{method="GET",status_code="404 Not Found"} 64
-```
-
-
-### Metrics of the data block manager
-
-#### `block_bytes_read`, `block_bytes_written` (counter)
-
-Number of bytes read/written to/from disk in the data storage directory.
-
-```
-block_bytes_read 120586322022
-block_bytes_written 3386618077
-```
-
-#### `block_read_duration`, `block_write_duration` (histograms)
-
-Evaluates the duration of the reading/writing of individual data blocks in the data storage directory.
-
-```
-block_read_duration_bucket{le="0.5"} 169229
-block_read_duration_sum 2761.6902550310056
-block_read_duration_count 169240
-block_write_duration_bucket{le="0.5"} 3559
-block_write_duration_sum 195.59170078500006
-block_write_duration_count 3571
-```
-
-#### `block_delete_counter` (counter)
-
-Counts the number of data blocks that have been deleted from storage.
-
-```
-block_delete_counter 122
-```
-
-#### `block_resync_counter` (counter), `block_resync_duration` (histogram)
-
-Counts the number of resync operations the node has executed, and evaluates their duration.
-
-```
-block_resync_counter 308897
-block_resync_duration_bucket{le="0.5"} 308892
-block_resync_duration_sum 139.64204196100016
-block_resync_duration_count 308897
-```
-
-#### `block_resync_queue_length` (gauge)
-
-The number of block hashes currently queued for a resync.
-This is normal to be nonzero for long periods of time.
-
-```
-block_resync_queue_length 0
-```
-
-#### `block_resync_errored_blocks` (gauge)
-
-The number of block hashes that we were unable to resync last time we tried.
-**THIS SHOULD BE ZERO, OR FALL BACK TO ZERO RAPIDLY, IN A HEALTHY CLUSTER.**
-Persistent nonzero values indicate that some data is likely to be lost.
-
-```
-block_resync_errored_blocks 0
-```
-
-
-### Metrics related to RPCs (remote procedure calls) between nodes
-
-#### `rpc_netapp_request_counter` (counter)
-
-Number of RPC requests emitted
-
-```
-rpc_request_counter{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>"} 176
-```
-
-#### `rpc_netapp_error_counter` (counter)
-
-Number of communication errors (errors in the Netapp library, generally due to disconnected nodes)
-
-```
-rpc_netapp_error_counter{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>"} 354
-```
-
-#### `rpc_timeout_counter` (counter)
-
-Number of RPC timeouts, should be close to zero in a healthy cluster.
-
-```
-rpc_timeout_counter{from="<this node>",rpc_endpoint="garage_rpc/membership.rs/SystemRpc",to="<remote node>"} 1
-```
-
-#### `rpc_duration` (histogram)
-
-The duration of internal RPC calls between Garage nodes.
-
-```
-rpc_duration_bucket{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>",le="0.5"} 166
-rpc_duration_sum{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>"} 35.172253716
-rpc_duration_count{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>"} 174
-```
-
-
-### Metrics of the metadata table manager
-
-#### `table_gc_todo_queue_length` (gauge)
-
-Table garbage collector TODO queue length
-
-```
-table_gc_todo_queue_length{table_name="block_ref"} 0
-```
-
-#### `table_get_request_counter` (counter), `table_get_request_duration` (histogram)
-
-Number of get/get_range requests internally made on each table, and their duration.
-
-```
-table_get_request_counter{table_name="bucket_alias"} 315
-table_get_request_duration_bucket{table_name="bucket_alias",le="0.5"} 315
-table_get_request_duration_sum{table_name="bucket_alias"} 0.048509778000000024
-table_get_request_duration_count{table_name="bucket_alias"} 315
-```
-
-
-#### `table_put_request_counter` (counter), `table_put_request_duration` (histogram)
-
-Number of insert/insert_many requests internally made on this table, and their duration
-
-```
-table_put_request_counter{table_name="block_ref"} 677
-table_put_request_duration_bucket{table_name="block_ref",le="0.5"} 677
-table_put_request_duration_sum{table_name="block_ref"} 61.617528636
-table_put_request_duration_count{table_name="block_ref"} 677
-```
-
-#### `table_internal_delete_counter` (counter)
-
-Number of value deletions in the tree (due to GC or repartitioning)
-
-```
-table_internal_delete_counter{table_name="block_ref"} 2296
-```
-
-#### `table_internal_update_counter` (counter)
-
-Number of value updates where the value actually changes (includes creation of new key and update of existing key)
-
-```
-table_internal_update_counter{table_name="block_ref"} 5996
-```
-
-#### `table_merkle_updater_todo_queue_length` (gauge)
-
-Merkle tree updater TODO queue length (should fall to zero rapidly)
-
-```
-table_merkle_updater_todo_queue_length{table_name="block_ref"} 0
-```
-
-#### `table_sync_items_received`, `table_sync_items_sent` (counters)
-
-Number of data items sent to/recieved from other nodes during resync procedures
-
-```
-table_sync_items_received{from="<remote node>",table_name="bucket_v2"} 3
-table_sync_items_sent{table_name="block_ref",to="<remote node>"} 2
-```
-
-
+See our [dedicated page](@/documentation/reference-manual/monitoring.md) in the Reference manual section.
diff --git a/doc/book/cookbook/real-world.md b/doc/book/cookbook/real-world.md
index 5423bbab..08266b23 100644
--- a/doc/book/cookbook/real-world.md
+++ b/doc/book/cookbook/real-world.md
@@ -19,8 +19,12 @@ To run a real-world deployment, make sure the following conditions are met:
- You have at least three machines with sufficient storage space available.
-- Each machine has a public IP address which is reachable by other machines.
- Running behind a NAT is likely to be possible but hasn't been tested for the latest version (TODO).
+- Each machine has a public IP address which is reachable by other machines. It
+ is highly recommended that you use IPv6 for this end-to-end connectivity. If
+ IPv6 is not available, then using a mesh VPN such as
+ [Nebula](https://github.com/slackhq/nebula) or
+ [Yggdrasil](https://yggdrasil-network.github.io/) are approaches to consider
+ in addition to building out your own VPN tunneling.
- This guide will assume you are using Docker containers to deploy Garage on each node.
Garage can also be run independently, for instance as a [Systemd service](@/documentation/cookbook/systemd.md).
@@ -345,5 +349,5 @@ and is covered in the [quick start guide](@/documentation/quick-start/_index.md)
Remember also that the CLI is self-documented thanks to the `--help` flag and
the `help` subcommand (e.g. `garage help`, `garage key --help`).
-Configuring S3-compatible applicatiosn to interact with Garage
+Configuring S3-compatible applications to interact with Garage
is covered in the [Integrations](@/documentation/connect/_index.md) section.
diff --git a/doc/book/cookbook/reverse-proxy.md b/doc/book/cookbook/reverse-proxy.md
index c8fde28d..9c833ad0 100644
--- a/doc/book/cookbook/reverse-proxy.md
+++ b/doc/book/cookbook/reverse-proxy.md
@@ -168,40 +168,65 @@ Here is [a basic configuration file](https://doc.traefik.io/traefik/https/acme/#
### Add Garage service
-To add Garage on Traefik you should declare a new service using its IP address (or hostname) and port:
+To add Garage on Traefik you should declare two new services using its IP
+address (or hostname) and port, these are used for the S3, and web components
+of Garage:
```toml
[http.services]
- [http.services.my_garage_service.loadBalancer]
- [[http.services.my_garage_service.loadBalancer.servers]]
+ [http.services.garage-s3-service.loadBalancer]
+ [[http.services.garage-s3-service.loadBalancer.servers]]
url = "http://xxx.xxx.xxx.xxx"
port = 3900
+
+ [http.services.garage-web-service.loadBalancer]
+ [[http.services.garage-web-service.loadBalancer.servers]]
+ url = "http://xxx.xxx.xxx.xxx"
+ port = 3902
```
It's possible to declare multiple Garage servers as back-ends:
```toml
[http.services]
- [[http.services.my_garage_service.loadBalancer.servers]]
+ [[http.services.garage-s3-service.loadBalancer.servers]]
url = "http://xxx.xxx.xxx.xxx"
port = 3900
- [[http.services.my_garage_service.loadBalancer.servers]]
+ [[http.services.garage-s3-service.loadBalancer.servers]]
url = "http://yyy.yyy.yyy.yyy"
port = 3900
- [[http.services.my_garage_service.loadBalancer.servers]]
+ [[http.services.garage-s3-service.loadBalancer.servers]]
url = "http://zzz.zzz.zzz.zzz"
port = 3900
+
+ [[http.services.garage-web-service.loadBalancer.servers]]
+ url = "http://xxx.xxx.xxx.xxx"
+ port = 3902
+ [[http.services.garage-web-service.loadBalancer.servers]]
+ url = "http://yyy.yyy.yyy.yyy"
+ port = 3902
+ [[http.services.garage-web-service.loadBalancer.servers]]
+ url = "http://zzz.zzz.zzz.zzz"
+ port = 3902
```
Traefik can remove unhealthy servers automatically with [a health check configuration](https://doc.traefik.io/traefik/routing/services/#health-check):
```
[http.services]
- [http.services.my_garage_service.loadBalancer]
- [http.services.my_garage_service.loadBalancer.healthCheck]
- path = "/"
- interval = "60s"
- timeout = "5s"
+ [http.services.garage-s3-service.loadBalancer]
+ [http.services.garage-s3-service.loadBalancer.healthCheck]
+ path = "/health"
+ port = "3903"
+ #interval = "15s"
+ #timeout = "2s"
+
+ [http.services.garage-web-service.loadBalancer]
+ [http.services.garage-web-service.loadBalancer.healthCheck]
+ path = "/health"
+ port = "3903"
+ #interval = "15s"
+ #timeout = "2s"
```
### Adding a website
@@ -210,10 +235,15 @@ To add a new website, add the following declaration to your Traefik configuratio
```toml
[http.routers]
+ [http.routers.garage-s3]
+ rule = "Host(`s3.example.org`)"
+ service = "garage-s3-service"
+ entryPoints = ["websecure"]
+
[http.routers.my_website]
rule = "Host(`yoururl.example.org`)"
- service = "my_garage_service"
- entryPoints = ["web"]
+ service = "garage-web-service"
+ entryPoints = ["websecure"]
```
Enable HTTPS access to your website with the following configuration section ([documentation](https://doc.traefik.io/traefik/https/overview/)):
@@ -226,7 +256,7 @@ Enable HTTPS access to your website with the following configuration section ([d
...
```
-### Adding gzip compression
+### Adding compression
Add the following configuration section [to compress response](https://doc.traefik.io/traefik/middlewares/http/compress/) using [gzip](https://developer.mozilla.org/en-US/docs/Glossary/GZip_compression) before sending them to the client:
@@ -234,10 +264,10 @@ Add the following configuration section [to compress response](https://doc.traef
[http.routers]
[http.routers.my_website]
...
- middlewares = ["gzip_compress"]
+ middlewares = ["compression"]
...
[http.middlewares]
- [http.middlewares.gzip_compress.compress]
+ [http.middlewares.compression.compress]
```
### Add caching response
@@ -262,27 +292,54 @@ Traefik's caching middleware is only available on [entreprise version](https://d
entryPoint = "web"
[http.routers]
+ [http.routers.garage-s3]
+ rule = "Host(`s3.example.org`)"
+ service = "garage-s3-service"
+ entryPoints = ["websecure"]
+
[http.routers.my_website]
rule = "Host(`yoururl.example.org`)"
- service = "my_garage_service"
- middlewares = ["gzip_compress"]
+ service = "garage-web-service"
+ middlewares = ["compression"]
entryPoints = ["websecure"]
[http.services]
- [http.services.my_garage_service.loadBalancer]
- [http.services.my_garage_service.loadBalancer.healthCheck]
- path = "/"
- interval = "60s"
- timeout = "5s"
- [[http.services.my_garage_service.loadBalancer.servers]]
+ [http.services.garage-s3-service.loadBalancer]
+ [http.services.garage-s3-service.loadBalancer.healthCheck]
+ path = "/health"
+ port = "3903"
+ #interval = "15s"
+ #timeout = "2s"
+
+ [http.services.garage-web-service.loadBalancer]
+ [http.services.garage-web-service.loadBalancer.healthCheck]
+ path = "/health"
+ port = "3903"
+ #interval = "15s"
+ #timeout = "2s"
+
+ [[http.services.garage-s3-service.loadBalancer.servers]]
+ url = "http://xxx.xxx.xxx.xxx"
+ port = 3900
+ [[http.services.garage-s3-service.loadBalancer.servers]]
+ url = "http://yyy.yyy.yyy.yyy"
+ port = 3900
+ [[http.services.garage-s3-service.loadBalancer.servers]]
+ url = "http://zzz.zzz.zzz.zzz"
+ port = 3900
+
+ [[http.services.garage-web-service.loadBalancer.servers]]
url = "http://xxx.xxx.xxx.xxx"
- [[http.services.my_garage_service.loadBalancer.servers]]
+ port = 3902
+ [[http.services.garage-web-service.loadBalancer.servers]]
url = "http://yyy.yyy.yyy.yyy"
- [[http.services.my_garage_service.loadBalancer.servers]]
+ port = 3902
+ [[http.services.garage-web-service.loadBalancer.servers]]
url = "http://zzz.zzz.zzz.zzz"
+ port = 3902
[http.middlewares]
- [http.middlewares.gzip_compress.compress]
+ [http.middlewares.compression.compress]
```
## Caddy
@@ -291,18 +348,83 @@ Your Caddy configuration can be as simple as:
```caddy
s3.garage.tld, *.s3.garage.tld {
- reverse_proxy localhost:3900 192.168.1.2:3900 example.tld:3900
+ reverse_proxy localhost:3900 192.168.1.2:3900 example.tld:3900 {
+ health_uri /health
+ health_port 3903
+ #health_interval 15s
+ #health_timeout 5s
+ }
}
*.web.garage.tld {
- reverse_proxy localhost:3902 192.168.1.2:3900 example.tld:3900
+ reverse_proxy localhost:3902 192.168.1.2:3902 example.tld:3902 {
+ health_uri /health
+ health_port 3903
+ #health_interval 15s
+ #health_timeout 5s
+ }
}
admin.garage.tld {
- reverse_proxy localhost:3903
+ reverse_proxy localhost:3903 {
+ health_uri /health
+ health_port 3903
+ #health_interval 15s
+ #health_timeout 5s
+ }
}
```
But at the same time, the `reverse_proxy` is very flexible.
For a production deployment, you should [read its documentation](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy) as it supports features like DNS discovery of upstreams, load balancing with checks, streaming parameters, etc.
+### On-demand TLS
+
+Caddy supports a technique called
+[on-demand TLS](https://caddyserver.com/docs/automatic-https#on-demand-tls), by
+which one can configure the webserver to provision TLS certificates when a
+client first connects to it.
+
+In order to prevent an attack vector whereby domains are simply pointed at your
+webserver and certificates are requested for them - Caddy can be configured to
+ask Garage if a domain is authorized for web hosting, before it then requests
+a TLS certificate.
+
+This 'check' endpoint, which is on the admin port (3903 by default), can be
+configured in Caddy's global section as follows:
+
+```caddy
+{
+ ...
+ on_demand_tls {
+ ask http://localhost:3903/check
+ interval 2m
+ burst 5
+ }
+ ...
+}
+```
+
+The host section can then be configured with (note that this uses the web
+endpoint instead):
+
+```caddy
+# For a specific set of subdomains
+*.web.garage.tld {
+ tls {
+ on_demand
+ }
+
+ reverse_proxy localhost:3902 192.168.1.2:3902 example.tld:3902
+}
+
+# Accept all domains on HTTPS
+# Never configure this without global section above
+https:// {
+ tls {
+ on_demand
+ }
+
+ reverse_proxy localhost:3902 192.168.1.2:3902 example.tld:3902
+}
+```
diff --git a/doc/book/cookbook/upgrading.md b/doc/book/cookbook/upgrading.md
index 9f2ba73b..9d60a988 100644
--- a/doc/book/cookbook/upgrading.md
+++ b/doc/book/cookbook/upgrading.md
@@ -6,45 +6,80 @@ weight = 60
Garage is a stateful clustered application, where all nodes are communicating together and share data structures.
It makes upgrade more difficult than stateless applications so you must be more careful when upgrading.
On a new version release, there is 2 possibilities:
- - protocols and data structures remained the same ➡️ this is a **straightforward upgrade**
- - protocols or data structures changed ➡️ this is an **advanced upgrade**
+ - protocols and data structures remained the same ➡️ this is a **minor upgrade**
+ - protocols or data structures changed ➡️ this is a **major upgrade**
-You can quickly now what type of update you will have to operate by looking at the version identifier.
-Following the [SemVer ](https://semver.org/) terminology, if only the *patch* number changed, it will only need a straightforward upgrade.
-Example: an upgrade from v0.6.0 from v0.6.1 is a straightforward upgrade.
-If the *minor* or *major* number changed however, you will have to do an advanced upgrade. Example: from v0.6.1 to v0.7.0.
+You can quickly now what type of update you will have to operate by looking at the version identifier:
+when we require our users to do a major upgrade, we will always bump the first nonzero component of the version identifier
+(e.g. from v0.7.2 to v0.8.0).
+Conversely, for versions that only require a minor upgrade, the first nonzero component will always stay the same (e.g. from v0.8.0 to v0.8.1).
-Migrations are designed to be run only between contiguous versions (from a *major*.*minor* perspective, *patches* can be skipped).
-Example: migrations from v0.6.1 to v0.7.0 and from v0.6.0 to v0.7.0 are supported but migrations from v0.5.0 to v0.7.0 are not supported.
+Major upgrades are designed to be run only between contiguous versions.
+Example: migrations from v0.7.1 to v0.8.0 and from v0.7.0 to v0.8.2 are supported but migrations from v0.6.0 to v0.8.0 are not supported.
-## Straightforward upgrades
+The `garage_build_info`
+[Prometheus metric](@/documentation/reference-manual/monitoring.md) provides
+an overview for which Garage versions are currently in use within a cluster.
-Straightforward upgrades do not imply cluster downtime.
+## Minor upgrades
+
+Minor upgrades do not imply cluster downtime.
Before upgrading, you should still read [the changelog](https://git.deuxfleurs.fr/Deuxfleurs/garage/releases) and ideally test your deployment on a staging cluster before.
When you are ready, start by checking the health of your cluster.
-You can force some checks with `garage repair`, we recommend at least running `garage repair --all-nodes --yes` that is very quick to run (less than a minute).
-You will see that the command correctly terminated in the logs of your daemon.
+You can force some checks with `garage repair`, we recommend at least running `garage repair --all-nodes --yes tables` which is very quick to run (less than a minute).
+You will see that the command correctly terminated in the logs of your daemon, or using `garage worker list` (the repair workers should be in the `Done` state).
-Finally, you can simply upgrades nodes one by one.
-For each node: stop it, install the new binary, edit the configuration if needed, restart it.
+Finally, you can simply upgrade nodes one by one.
+For each node: stop it, install the new binary, edit the configuration if needed, restart it.
-## Advanced upgrades
+## Major upgrades
-Advanced upgrades will imply cluster downtime.
+Major upgrades can be done with minimal downtime with a bit of preparation, but the simplest way is usually to put the cluster offline for the duration of the migration.
Before upgrading, you must read [the changelog](https://git.deuxfleurs.fr/Deuxfleurs/garage/releases) and you must test your deployment on a staging cluster before.
-From a high level perspective, an advanced upgrade looks like this:
- 1. Make sure the health of your cluster is good (see `garage repair`)
- 2. Disable API access (comment the configuration in your reverse proxy)
- 3. Check that your cluster is idle
+We write guides for each major upgrade, they are stored under the "Working Documents" section of this documentation.
+
+### Major upgrades with full downtime
+
+From a high level perspective, a major upgrade looks like this:
+
+ 1. Disable API access (for instance in your reverse proxy, or by commenting the corresponding section in your Garage configuration file and restarting Garage)
+ 2. Check that your cluster is idle
+ 3. Make sure the health of your cluster is good (see `garage repair`)
4. Stop the whole cluster
- 5. Backup the metadata folder of all your nodes, so that you will be able to restore it quickly if the upgrade fails (blocks being immutable, they should not be impacted)
+ 5. Back up the metadata folder of all your nodes, so that you will be able to restore it if the upgrade fails (data blocks being immutable, they should not be impacted)
6. Install the new binary, update the configuration
7. Start the whole cluster
8. If needed, run the corresponding migration from `garage migrate`
9. Make sure the health of your cluster is good
- 10. Enable API access (uncomment the configuration in your reverse proxy)
+ 10. Enable API access (reverse step 1)
11. Monitor your cluster while load comes back, check that all your applications are happy with this new version
-We write guides for each advanced upgrade, they are stored under the "Working Documents" section of this documentation.
+### Major upgarades with minimal downtime
+
+There is only one operation that has to be coordinated cluster-wide: the passage of one version of the internal RPC protocol to the next.
+This means that an upgrade with very limited downtime can simply be performed from one major version to the next by restarting all nodes
+simultaneously in the new version.
+The downtime will simply be the time required for all nodes to stop and start again, which should be less than a minute.
+If all nodes fail to stop and restart simultaneously, some nodes might be temporarily shut out from the cluster as nodes using different RPC protocol
+versions are prevented to talk to one another.
+
+The entire procedure would look something like this:
+
+1. Make sure the health of your cluster is good (see `garage repair`)
+
+2. Take each node offline individually to back up its metadata folder, bring them back online once the backup is done.
+ You can do all of the nodes in a single zone at once as that won't impact global cluster availability.
+ Do not try to make a backup of the metadata folder of a running node.
+
+3. Prepare your binaries and configuration files for the new Garage version
+
+4. Restart all nodes simultaneously in the new version
+
+5. If any specific migration procedure is required, it is usually in one of the two cases:
+
+ - It can be run on online nodes after the new version has started, during regular cluster operation.
+ - it has to be run offline
+
+ For this last step, please refer to the specific documentation pertaining to the version upgrade you are doing.
diff --git a/doc/book/design/_index.md b/doc/book/design/_index.md
index a3a6ac11..50933139 100644
--- a/doc/book/design/_index.md
+++ b/doc/book/design/_index.md
@@ -20,12 +20,16 @@ and could not do, etc.
We love to talk and hear about Garage, that's why we keep a log here:
- - [(fr, 2021-11-13, video) Garage : Mille et une façons de stocker vos données](https://video.tedomum.net/w/moYKcv198dyMrT8hCS5jz9) and [slides (html)](https://rfid.deuxfleurs.fr/presentations/2021-11-13/garage/) - during [RFID#1](https://rfid.deuxfleurs.fr/programme/2021-11-13/) event
+ - [(en, 2023-01-18) Presentation of Garage with some details on CRDTs and data partitioning among nodes](https://git.deuxfleurs.fr/Deuxfleurs/garage/src/commit/4cff37397f626ef063dad29e5b5e97ab1206015d/doc/talks/2023-01-18-tocatta/talk.pdf)
+
+ - [(fr, 2022-11-19) De l'auto-hébergement à l'entre-hébergement : Garage, pour conserver ses données ensemble](https://git.deuxfleurs.fr/Deuxfleurs/garage/src/commit/4cff37397f626ef063dad29e5b5e97ab1206015d/doc/talks/2022-11-19-Capitole-du-Libre/pr%C3%A9sentation.pdf)
- - [(en, 2021-04-28) Distributed object storage is centralised](https://git.deuxfleurs.fr/Deuxfleurs/garage/raw/commit/b1f60579a13d3c5eba7f74b1775c84639ea9b51a/doc/talks/2021-04-28_spirals-team/talk.pdf)
+ - [(en, 2022-06-23) General presentation of Garage](https://git.deuxfleurs.fr/Deuxfleurs/garage/src/commit/4cff37397f626ef063dad29e5b5e97ab1206015d/doc/talks/2022-06-23-stack/talk.pdf)
+
+ - [(fr, 2021-11-13, video) Garage : Mille et une façons de stocker vos données](https://video.tedomum.net/w/moYKcv198dyMrT8hCS5jz9) and [slides (html)](https://rfid.deuxfleurs.fr/presentations/2021-11-13/garage/) - during [RFID#1](https://rfid.deuxfleurs.fr/programme/2021-11-13/) event
- - [(fr, 2020-12-02) Garage : jouer dans la cour des grands quand on est un hébergeur associatif](https://git.deuxfleurs.fr/Deuxfleurs/garage/raw/commit/b1f60579a13d3c5eba7f74b1775c84639ea9b51a/doc/talks/2020-12-02_wide-team/talk.pdf)
+ - [(en, 2021-04-28) Distributed object storage is centralised](https://git.deuxfleurs.fr/Deuxfleurs/garage/src/commit/b1f60579a13d3c5eba7f74b1775c84639ea9b51a/doc/talks/2021-04-28_spirals-team/talk.pdf)
-*Did you write or talk about Garage? [Open a pull request](https://git.deuxfleurs.fr/Deuxfleurs/garage/) to add a link here!*
+ - [(fr, 2020-12-02) Garage : jouer dans la cour des grands quand on est un hébergeur associatif](https://git.deuxfleurs.fr/Deuxfleurs/garage/src/commit/b1f60579a13d3c5eba7f74b1775c84639ea9b51a/doc/talks/2020-12-02_wide-team/talk.pdf)
diff --git a/doc/book/design/related-work.md b/doc/book/design/related-work.md
index f96c6618..6c1a6b12 100644
--- a/doc/book/design/related-work.md
+++ b/doc/book/design/related-work.md
@@ -72,8 +72,7 @@ We considered there v2's design but concluded that it does not fit both our *Sel
**[Riak CS](https://docs.riak.com/riak/cs/2.1.1/index.html):**
*Not written yet*
-**[IPFS](https://ipfs.io/):**
-*Not written yet*
+**[IPFS](https://ipfs.io/):** IPFS has design goals radically different from Garage, we have [a blog post](@/blog/2022-ipfs/index.md) talking about it.
## Specific research papers
diff --git a/doc/book/development/devenv.md b/doc/book/development/devenv.md
index c2ef4e7d..8d7d2e95 100644
--- a/doc/book/development/devenv.md
+++ b/doc/book/development/devenv.md
@@ -39,7 +39,7 @@ Now you can enter our nix-shell, all the required packages will be downloaded bu
nix-shell
```
-You can use the traditionnal Rust development workflow:
+You can use the traditional Rust development workflow:
```bash
cargo build # compile the project
diff --git a/doc/book/development/release-process.md b/doc/book/development/release-process.md
index f6db971a..3fed4add 100644
--- a/doc/book/development/release-process.md
+++ b/doc/book/development/release-process.md
@@ -11,7 +11,7 @@ We define them as our release process.
While we run some tests on every commits, we do not make a release for all of them.
A release can be triggered manually by "promoting" a successful build.
-Otherwise, every weeks, a release build is triggered on the `main` branch.
+Otherwise, every night, a release build is triggered on the `main` branch.
If the build is from a tag following the regex: `v[0-9]+\.[0-9]+\.[0-9]+`, it will be listed as stable.
If it is a tag but with a different format, it will be listed as Extra.
diff --git a/doc/book/quick-start/_index.md b/doc/book/quick-start/_index.md
index ab83b75a..feab45f0 100644
--- a/doc/book/quick-start/_index.md
+++ b/doc/book/quick-start/_index.md
@@ -290,13 +290,13 @@ sourcing the right file.*
aws s3 ls
# list objects of a bucket
-aws s3 ls s3://my_files
+aws s3 ls s3://nextcloud-bucket
# copy from your filesystem to garage
-aws s3 cp /proc/cpuinfo s3://my_files/cpuinfo.txt
+aws s3 cp /proc/cpuinfo s3://nextcloud-bucket/cpuinfo.txt
# copy from garage to your filesystem
-aws s3 cp s3/my_files/cpuinfo.txt /tmp/cpuinfo.txt
+aws s3 cp s3://nextcloud-bucket/cpuinfo.txt /tmp/cpuinfo.txt
```
Note that you can use `awscli` for more advanced operations like
diff --git a/doc/book/reference-manual/admin-api.md b/doc/book/reference-manual/admin-api.md
index 0b7e2e16..363bc886 100644
--- a/doc/book/reference-manual/admin-api.md
+++ b/doc/book/reference-manual/admin-api.md
@@ -1,6 +1,6 @@
+++
title = "Administration API"
-weight = 60
+weight = 40
+++
The Garage administration API is accessible through a dedicated server whose
diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md
index 2d9c3f0c..38062bab 100644
--- a/doc/book/reference-manual/configuration.md
+++ b/doc/book/reference-manual/configuration.md
@@ -3,6 +3,8 @@ title = "Configuration file format"
weight = 20
+++
+## Full example
+
Here is an example `garage.toml` configuration file that illustrates all of the possible options:
```toml
@@ -96,7 +98,7 @@ Performance characteristics of the different DB engines are as follows:
- Sled: the default database engine, which tends to produce
large data files and also has performance issues, especially when the metadata folder
- is on a traditionnal HDD and not on SSD.
+ is on a traditional HDD and not on SSD.
- LMDB: the recommended alternative on 64-bit systems,
much more space-efficiant and slightly faster. Note that the data format of LMDB is not portable
between architectures, so for instance the Garage database of an x86-64
@@ -259,13 +261,17 @@ Compression is done synchronously, setting a value too high will add latency to
This value can be different between nodes, compression is done by the node which receive the
API call.
-### `rpc_secret`
+### `rpc_secret`, `rpc_secret_file` or `GARAGE_RPC_SECRET` (env)
+
+Garage uses a secret key, called an RPC secret, that is shared between all
+nodes of the cluster in order to identify these nodes and allow them to
+communicate together. The RPC secret is a 32-byte hex-encoded random string,
+which can be generated with a command such as `openssl rand -hex 32`.
-Garage uses a secret key that is shared between all nodes of the cluster
-in order to identify these nodes and allow them to communicate together.
-This key should be specified here in the form of a 32-byte hex-encoded
-random string. Such a string can be generated with a command
-such as `openssl rand -hex 32`.
+The RPC secret should be specified in the `rpc_secret` configuration variable.
+Since Garage `v0.8.2`, the RPC secret can also be stored in a file whose path is
+given in the configuration variable `rpc_secret_file`, or specified as an
+environment variable `GARAGE_RPC_SECRET`.
### `rpc_bind_addr`
@@ -407,24 +413,30 @@ If specified, Garage will bind an HTTP server to this port and address, on
which it will listen to requests for administration features.
See [administration API reference](@/documentation/reference-manual/admin-api.md) to learn more about these features.
-### `metrics_token` (since version 0.7.2)
+### `metrics_token`, `metrics_token_file` or `GARAGE_METRICS_TOKEN` (env)
-The token for accessing the Metrics endpoint. If this token is not set in
-the config file, the Metrics endpoint can be accessed without access
-control.
+The token for accessing the Metrics endpoint. If this token is not set, the
+Metrics endpoint can be accessed without access control.
You can use any random string for this value. We recommend generating a random token with `openssl rand -hex 32`.
-### `admin_token` (since version 0.7.2)
+`metrics_token` was introduced in Garage `v0.7.2`.
+`metrics_token_file` and the `GARAGE_METRICS_TOKEN` environment variable are supported since Garage `v0.8.2`.
+
+
+### `admin_token`, `admin_token_file` or `GARAGE_ADMIN_TOKEN` (env)
The token for accessing all of the other administration endpoints. If this
-token is not set in the config file, access to these endpoints is disabled
-entirely.
+token is not set, access to these endpoints is disabled entirely.
You can use any random string for this value. We recommend generating a random token with `openssl rand -hex 32`.
+`admin_token` was introduced in Garage `v0.7.2`.
+`admin_token_file` and the `GARAGE_ADMIN_TOKEN` environment variable are supported since Garage `v0.8.2`.
+
+
### `trace_sink`
-Optionnally, the address of an Opentelemetry collector. If specified,
-Garage will send traces in the Opentelemetry format to this endpoint. These
+Optionally, the address of an OpenTelemetry collector. If specified,
+Garage will send traces in the OpenTelemetry format to this endpoint. These
trace allow to inspect Garage's operation when it handles S3 API requests.
diff --git a/doc/book/reference-manual/k2v.md b/doc/book/reference-manual/k2v.md
index 207d056a..ed069b27 100644
--- a/doc/book/reference-manual/k2v.md
+++ b/doc/book/reference-manual/k2v.md
@@ -1,6 +1,6 @@
+++
title = "K2V"
-weight = 70
+weight = 100
+++
Starting with version 0.7.2, Garage introduces an optionnal feature, K2V,
@@ -16,7 +16,7 @@ the `k2v` feature flag enabled can be obtained from our download page under
with `-k2v` (example: `v0.7.2-k2v`).
The specification of the K2V API can be found
-[here](https://git.deuxfleurs.fr/Deuxfleurs/garage/src/branch/k2v/doc/drafts/k2v-spec.md).
+[here](https://git.deuxfleurs.fr/Deuxfleurs/garage/src/branch/main/doc/drafts/k2v-spec.md).
This document also includes a high-level overview of K2V's design.
The K2V API uses AWSv4 signatures for authentification, same as the S3 API.
diff --git a/doc/book/reference-manual/monitoring.md b/doc/book/reference-manual/monitoring.md
new file mode 100644
index 00000000..97c533d3
--- /dev/null
+++ b/doc/book/reference-manual/monitoring.md
@@ -0,0 +1,285 @@
+
++++
+title = "Monitoring"
+weight = 60
++++
+
+
+For information on setting up monitoring, see our [dedicated page](@/documentation/cookbook/monitoring.md) in the Cookbook section.
+
+## List of exported metrics
+
+### Garage system metrics
+
+#### `garage_build_info` (counter)
+
+Exposes the Garage version number running on a node.
+
+```
+garage_build_info{version="1.0"} 1
+```
+
+#### `garage_replication_factor` (counter)
+
+Exposes the Garage replication factor configured on the node
+
+```
+garage_replication_factor 3
+```
+
+### Metrics of the API endpoints
+
+#### `api_admin_request_counter` (counter)
+
+Counts the number of requests to a given endpoint of the administration API. Example:
+
+```
+api_admin_request_counter{api_endpoint="Metrics"} 127041
+```
+
+#### `api_admin_request_duration` (histogram)
+
+Evaluates the duration of API calls to the various administration API endpoint. Example:
+
+```
+api_admin_request_duration_bucket{api_endpoint="Metrics",le="0.5"} 127041
+api_admin_request_duration_sum{api_endpoint="Metrics"} 605.250344830999
+api_admin_request_duration_count{api_endpoint="Metrics"} 127041
+```
+
+#### `api_s3_request_counter` (counter)
+
+Counts the number of requests to a given endpoint of the S3 API. Example:
+
+```
+api_s3_request_counter{api_endpoint="CreateMultipartUpload"} 1
+```
+
+#### `api_s3_error_counter` (counter)
+
+Counts the number of requests to a given endpoint of the S3 API that returned an error. Example:
+
+```
+api_s3_error_counter{api_endpoint="GetObject",status_code="404"} 39
+```
+
+#### `api_s3_request_duration` (histogram)
+
+Evaluates the duration of API calls to the various S3 API endpoints. Example:
+
+```
+api_s3_request_duration_bucket{api_endpoint="CreateMultipartUpload",le="0.5"} 1
+api_s3_request_duration_sum{api_endpoint="CreateMultipartUpload"} 0.046340762
+api_s3_request_duration_count{api_endpoint="CreateMultipartUpload"} 1
+```
+
+#### `api_k2v_request_counter` (counter), `api_k2v_error_counter` (counter), `api_k2v_error_duration` (histogram)
+
+Same as for S3, for the K2V API.
+
+
+### Metrics of the Web endpoint
+
+
+#### `web_request_counter` (counter)
+
+Number of requests to the web endpoint
+
+```
+web_request_counter{method="GET"} 80
+```
+
+#### `web_request_duration` (histogram)
+
+Duration of requests to the web endpoint
+
+```
+web_request_duration_bucket{method="GET",le="0.5"} 80
+web_request_duration_sum{method="GET"} 1.0528433229999998
+web_request_duration_count{method="GET"} 80
+```
+
+#### `web_error_counter` (counter)
+
+Number of requests to the web endpoint resulting in errors
+
+```
+web_error_counter{method="GET",status_code="404 Not Found"} 64
+```
+
+
+### Metrics of the data block manager
+
+#### `block_bytes_read`, `block_bytes_written` (counter)
+
+Number of bytes read/written to/from disk in the data storage directory.
+
+```
+block_bytes_read 120586322022
+block_bytes_written 3386618077
+```
+
+#### `block_compression_level` (counter)
+
+Exposes the block compression level configured for the Garage node.
+
+```
+block_compression_level 3
+```
+
+#### `block_read_duration`, `block_write_duration` (histograms)
+
+Evaluates the duration of the reading/writing of individual data blocks in the data storage directory.
+
+```
+block_read_duration_bucket{le="0.5"} 169229
+block_read_duration_sum 2761.6902550310056
+block_read_duration_count 169240
+block_write_duration_bucket{le="0.5"} 3559
+block_write_duration_sum 195.59170078500006
+block_write_duration_count 3571
+```
+
+#### `block_delete_counter` (counter)
+
+Counts the number of data blocks that have been deleted from storage.
+
+```
+block_delete_counter 122
+```
+
+#### `block_resync_counter` (counter), `block_resync_duration` (histogram)
+
+Counts the number of resync operations the node has executed, and evaluates their duration.
+
+```
+block_resync_counter 308897
+block_resync_duration_bucket{le="0.5"} 308892
+block_resync_duration_sum 139.64204196100016
+block_resync_duration_count 308897
+```
+
+#### `block_resync_queue_length` (gauge)
+
+The number of block hashes currently queued for a resync.
+This is normal to be nonzero for long periods of time.
+
+```
+block_resync_queue_length 0
+```
+
+#### `block_resync_errored_blocks` (gauge)
+
+The number of block hashes that we were unable to resync last time we tried.
+**THIS SHOULD BE ZERO, OR FALL BACK TO ZERO RAPIDLY, IN A HEALTHY CLUSTER.**
+Persistent nonzero values indicate that some data is likely to be lost.
+
+```
+block_resync_errored_blocks 0
+```
+
+
+### Metrics related to RPCs (remote procedure calls) between nodes
+
+#### `rpc_netapp_request_counter` (counter)
+
+Number of RPC requests emitted
+
+```
+rpc_request_counter{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>"} 176
+```
+
+#### `rpc_netapp_error_counter` (counter)
+
+Number of communication errors (errors in the Netapp library, generally due to disconnected nodes)
+
+```
+rpc_netapp_error_counter{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>"} 354
+```
+
+#### `rpc_timeout_counter` (counter)
+
+Number of RPC timeouts, should be close to zero in a healthy cluster.
+
+```
+rpc_timeout_counter{from="<this node>",rpc_endpoint="garage_rpc/membership.rs/SystemRpc",to="<remote node>"} 1
+```
+
+#### `rpc_duration` (histogram)
+
+The duration of internal RPC calls between Garage nodes.
+
+```
+rpc_duration_bucket{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>",le="0.5"} 166
+rpc_duration_sum{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>"} 35.172253716
+rpc_duration_count{from="<this node>",rpc_endpoint="garage_block/manager.rs/Rpc",to="<remote node>"} 174
+```
+
+
+### Metrics of the metadata table manager
+
+#### `table_gc_todo_queue_length` (gauge)
+
+Table garbage collector TODO queue length
+
+```
+table_gc_todo_queue_length{table_name="block_ref"} 0
+```
+
+#### `table_get_request_counter` (counter), `table_get_request_duration` (histogram)
+
+Number of get/get_range requests internally made on each table, and their duration.
+
+```
+table_get_request_counter{table_name="bucket_alias"} 315
+table_get_request_duration_bucket{table_name="bucket_alias",le="0.5"} 315
+table_get_request_duration_sum{table_name="bucket_alias"} 0.048509778000000024
+table_get_request_duration_count{table_name="bucket_alias"} 315
+```
+
+
+#### `table_put_request_counter` (counter), `table_put_request_duration` (histogram)
+
+Number of insert/insert_many requests internally made on this table, and their duration
+
+```
+table_put_request_counter{table_name="block_ref"} 677
+table_put_request_duration_bucket{table_name="block_ref",le="0.5"} 677
+table_put_request_duration_sum{table_name="block_ref"} 61.617528636
+table_put_request_duration_count{table_name="block_ref"} 677
+```
+
+#### `table_internal_delete_counter` (counter)
+
+Number of value deletions in the tree (due to GC or repartitioning)
+
+```
+table_internal_delete_counter{table_name="block_ref"} 2296
+```
+
+#### `table_internal_update_counter` (counter)
+
+Number of value updates where the value actually changes (includes creation of new key and update of existing key)
+
+```
+table_internal_update_counter{table_name="block_ref"} 5996
+```
+
+#### `table_merkle_updater_todo_queue_length` (gauge)
+
+Merkle tree updater TODO queue length (should fall to zero rapidly)
+
+```
+table_merkle_updater_todo_queue_length{table_name="block_ref"} 0
+```
+
+#### `table_sync_items_received`, `table_sync_items_sent` (counters)
+
+Number of data items sent to/recieved from other nodes during resync procedures
+
+```
+table_sync_items_received{from="<remote node>",table_name="bucket_v2"} 3
+table_sync_items_sent{table_name="block_ref",to="<remote node>"} 2
+```
+
+
diff --git a/doc/book/reference-manual/s3-compatibility.md b/doc/book/reference-manual/s3-compatibility.md
index dd3492a0..15b29bd1 100644
--- a/doc/book/reference-manual/s3-compatibility.md
+++ b/doc/book/reference-manual/s3-compatibility.md
@@ -1,6 +1,6 @@
+++
title = "S3 Compatibility status"
-weight = 40
+weight = 70
+++
## DISCLAIMER
diff --git a/doc/book/working-documents/migration-08.md b/doc/book/working-documents/migration-08.md
index 5f97c45b..b7c4c783 100644
--- a/doc/book/working-documents/migration-08.md
+++ b/doc/book/working-documents/migration-08.md
@@ -12,13 +12,15 @@ back up all your data before attempting it!**
Garage v0.8 introduces new data tables that allow the counting of objects in buckets in order to implement bucket quotas.
A manual migration step is required to first count objects in Garage buckets and populate these tables with accurate data.
+## Simple migration procedure (takes cluster offline for a while)
+
The migration steps are as follows:
1. Disable API and web access. Garage v0.7 does not support disabling
these endpoints but you can change the port number or stop your reverse proxy for instance.
2. Do `garage repair --all-nodes --yes tables` and `garage repair --all-nodes --yes blocks`,
check the logs and check that all data seems to be synced correctly between
- nodes. If you have time, do additional checks (`scrub`, `block_refs`, etc.)
+ nodes. If you have time, do additional checks (`versions`, `block_refs`, etc.)
3. Check that queues are empty: run `garage stats` to query them or inspect metrics in the Grafana dashboard.
4. Turn off Garage v0.7
5. **Backup the metadata folder of all your nodes!** For instance, use the following command
@@ -32,3 +34,24 @@ The migration steps are as follows:
10. Your upgraded cluster should be in a working state. Re-enable API and Web
access and check that everything went well.
11. Monitor your cluster in the next hours to see if it works well under your production load, report any issue.
+
+## Minimal downtime migration procedure
+
+The migration to Garage v0.8 can be done with almost no downtime,
+by restarting all nodes at once in the new version. The only limitation with this
+method is that bucket sizes and item counts will not be estimated correctly
+until all nodes have had a chance to run their offline migration procedure.
+
+The migration steps are as follows:
+
+1. Do `garage repair --all-nodes --yes tables` and `garage repair --all-nodes --yes blocks`,
+ check the logs and check that all data seems to be synced correctly between
+ nodes. If you have time, do additional checks (`versions`, `block_refs`, etc.)
+
+2. Turn off each node individually; back up its metadata folder (see above); turn it back on again. This will allow you to take a backup of all nodes without impacting global cluster availability. You can do all nodes of a single zone at once as this does not impact the availability of Garage.
+
+3. Prepare your binaries and configuration files for Garage v0.8
+
+4. Shut down all v0.7 nodes simultaneously, and restart them all simultaneously in v0.8. Use your favorite deployment tool (Ansible, Kubernetes, Nomad) to achieve this as fast as possible.
+
+5. At this point, Garage will indicate invalid values for the size and number of objects in each bucket (most likely, it will indicate zero). To fix this, take each node offline individually to do the offline migration step: `garage offline-repair --yes object_counters`. Again you can do all nodes of a single zone at once.
diff --git a/doc/drafts/k2v-spec.md b/doc/drafts/k2v-spec.md
index 9d41b2c0..faa1a247 100644
--- a/doc/drafts/k2v-spec.md
+++ b/doc/drafts/k2v-spec.md
@@ -706,6 +706,73 @@ HTTP/1.1 200 OK
]
```
+**PollRange: `POST /<bucket>/<partition key>?poll_range`**, or alternatively<br/>
+**PollRange: `SEARCH /<bucket>/<partition key>?poll_range`**
+
+Polls a range of items for changes.
+
+The query body is a JSON object consisting of the following fields:
+
+| name | default value | meaning |
+|-----------------|---------------|----------------------------------------------------------------------------------------|
+| `prefix` | `null` | Restrict items to poll to those whose sort keys start with this prefix |
+| `start` | `null` | The sort key of the first item to poll |
+| `end` | `null` | The sort key of the last item to poll (excluded) |
+| `timeout` | 300 | The timeout before 304 NOT MODIFIED is returned if no value in the range is updated |
+| `seenMarker` | `null` | An opaque string returned by a previous PollRange call, that represents items already seen |
+
+The timeout can be set to any number of seconds, with a maximum of 600 seconds (10 minutes).
+
+The response is either:
+
+- A HTTP 304 NOT MODIFIED response with an empty body, if the timeout expired and no changes occurred
+
+- A HTTP 200 response, indicating that some changes have occurred since the last PollRange call, in which case a JSON object is returned in the body with the following fields:
+
+| name | meaning |
+|-----------------|----------------------------------------------------------------------------------------|
+| `seenMarker` | An opaque string that represents items already seen for future PollRange calls |
+| `items` | The list of items that have changed since last PollRange call, in the same format as ReadBatch |
+
+If no seen marker is known by the caller, it can do a PollRange call
+without specifying `seenMarker`. In this case, the PollRange call will
+complete immediately, and return the current content of the range (which
+can be empty) and a seen marker to be used in further PollRange calls. This
+is the only case in which PollRange might return an HTTP 200 with an empty
+set of items.
+
+A seen marker returned as a response to a PollRange query can be used for further PollRange
+queries on the same range, or for PollRange queries in a subrange of the initial range.
+It may not be used for PollRange queries on ranges larger or outside of the initial range.
+
+Example query:
+
+```json
+SEARCH /my_bucket?poll_range HTTP/1.1
+
+{
+ "prefix": "0391.",
+ "start": "0391.000001973107",
+ "seenMarker": "opaquestring123",
+}
+```
+
+
+Example response:
+
+```json
+HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+ "seenMarker": "opaquestring456",
+ "items": [
+ { sk: "0391.000001973221", ct: "opaquetoken123", v: ["b64cryptoblob123", "b64cryptoblob'123"] },
+ { sk: "0391.000001974191", ct: "opaquetoken456", v: ["b64cryptoblob456", "b64cryptoblob'456"] },
+ ]
+}
+```
+
## Internals: causality tokens
diff --git a/doc/logo/garage_hires_crop.png b/doc/logo/garage_hires_crop.png
new file mode 100644
index 00000000..2fd0babc
--- /dev/null
+++ b/doc/logo/garage_hires_crop.png
Binary files differ
diff --git a/doc/sticker/Garage.svg b/doc/sticker/Garage.svg
index da04692b..9464986f 100644
--- a/doc/sticker/Garage.svg
+++ b/doc/sticker/Garage.svg
@@ -1 +1,181 @@
-<svg id="Hexagone" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 141.62 163.87"><defs><style>.cls-1{fill:#4f4f4f;}.cls-2{fill:#f7f6f2;}.cls-3{fill:#010101;}.cls-4{fill:#ffd953;}.cls-5{fill:#55c4f1;}.cls-6{fill:#57c4f2;}.cls-7{fill:#f39133;}</style></defs><polygon class="cls-1" points="141.62 122.91 141.62 40.97 70.81 0 0 40.97 0 122.91 70.81 163.88 141.62 122.91"/><path class="cls-2" d="M134.92,114.73V49.15a7.46,7.46,0,0,0-3.72-6.46L74.53,16.35a7.44,7.44,0,0,0-7.44,0L10.42,42.69A7.46,7.46,0,0,0,6.7,49.15v65.58a7.45,7.45,0,0,0,3.72,6.45l56.67,26.34a7.44,7.44,0,0,0,7.44,0l56.67-26.34A7.45,7.45,0,0,0,134.92,114.73Z" transform="translate(0 0)"/><image width="1603" height="416" transform="translate(46.49 117.44) scale(0.03 0.03)" xlink:href="data:image/png;base64,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"/><path id="path6" class="cls-3" d="M81.41,50.94a5.33,5.33,0,0,1-2.23-.24L51.51,43.21a9.66,9.66,0,0,1-2.06-1Z" transform="translate(0 0)"/><path id="path8" class="cls-1" d="M39.35,98h4.21c1.51,0,2.31.72,2.31,2.15v6.93A18.33,18.33,0,0,1,39,108.23a6.61,6.61,0,0,1-5.64-2.55,11.44,11.44,0,0,1-1.91-7c0-3,.79-5.26,2.38-6.86a7.94,7.94,0,0,1,5.81-2.47,10.75,10.75,0,0,1,6.2,1.92,3.61,3.61,0,0,1-.56,1.43,3.2,3.2,0,0,1-1,1,8.17,8.17,0,0,0-4.53-1.6,4.42,4.42,0,0,0-3.58,1.6c-.88,1.11-1.27,2.78-1.27,5.1,0,4.38,1.59,6.53,4.85,6.53a18.48,18.48,0,0,0,2.94-.32v-2.47a10.14,10.14,0,0,1,.08-1.75H40.62a2.05,2.05,0,0,1-1.19-.32,1.32,1.32,0,0,1-.4-1A9.18,9.18,0,0,1,39.35,98Z" transform="translate(0 0)"/><path id="path10" class="cls-1" d="M59.78,106.32a2.9,2.9,0,0,1-.47,1,1.89,1.89,0,0,1-.64.72,3.06,3.06,0,0,1-2.46-1.6,5.3,5.3,0,0,1-3.82,1.68,3.94,3.94,0,0,1-3.1-1.2,4.43,4.43,0,0,1-1-2.79,3.89,3.89,0,0,1,1.44-3.34,5.72,5.72,0,0,1,3.73-1.12,21.53,21.53,0,0,1,2.31.08v-.8c0-1.43-.64-2.07-2-2.07a12.84,12.84,0,0,0-4.05,1,3.67,3.67,0,0,1-.88-2.39,14.16,14.16,0,0,1,5.73-1.2,4.54,4.54,0,0,1,3.26,1.12,4.34,4.34,0,0,1,1.27,3.35v5.41C59,105.28,59.23,105.92,59.78,106.32Zm-6.68-.64a3.62,3.62,0,0,0,2.63-1.28v-2.31a16.56,16.56,0,0,0-2-.08,2.14,2.14,0,0,0-1.67.56,1.92,1.92,0,0,0-.56,1.43,2.17,2.17,0,0,0,.48,1.36,2.6,2.6,0,0,0,1.11.32Z" transform="translate(0 0)"/><path id="path12" class="cls-1" d="M61.93,96.2a2.7,2.7,0,0,1,.48-1,1.87,1.87,0,0,1,.63-.72,3.35,3.35,0,0,1,2.79,2.39,3.54,3.54,0,0,1,3.42-2.39,9.8,9.8,0,0,1,1.51.16,6,6,0,0,1-.8,3.11,6.08,6.08,0,0,0-1.19-.16,3,3,0,0,0-2.63,1.75v8.45a11.72,11.72,0,0,1-1.59.16,11.94,11.94,0,0,1-1.67-.16V98.9a3.35,3.35,0,0,0-1-2.7Z" transform="translate(0 0)"/><path id="path14" class="cls-1" d="M83.08,106.32a2.75,2.75,0,0,1-.48,1A1.87,1.87,0,0,1,82,108a3.07,3.07,0,0,1-2.47-1.6,5.26,5.26,0,0,1-3.81,1.68,4,4,0,0,1-3.11-1.2,4.48,4.48,0,0,1-1-2.79A3.91,3.91,0,0,1,73,100.74a5.54,5.54,0,0,1,3.66-1.12A21.62,21.62,0,0,1,79,99.7v-.8c0-1.43-.64-2.07-2-2.07a12.89,12.89,0,0,0-4.06,1A3.71,3.71,0,0,1,72,95.4a14.14,14.14,0,0,1,5.72-1.2A4.51,4.51,0,0,1,81,95.32a4.31,4.31,0,0,1,1.28,3.35v5.41a2.67,2.67,0,0,0,.79,2.24Zm-6.68-.64A3.64,3.64,0,0,0,79,104.4v-2.31a16.64,16.64,0,0,0-2-.08,2.13,2.13,0,0,0-1.67.56,1.92,1.92,0,0,0-.56,1.43,2.17,2.17,0,0,0,.48,1.36,2.56,2.56,0,0,0,1.11.32Z" transform="translate(0 0)"/><path id="path16" class="cls-1" d="M86.34,106.24a9.07,9.07,0,0,1-1.19-5,7.37,7.37,0,0,1,1.51-5,4.69,4.69,0,0,1,3.66-1.84,5.22,5.22,0,0,1,3.57,1.36A3,3,0,0,1,96,94.6a2.06,2.06,0,0,1,.72.72c.16.32.31.56.47,1a3,3,0,0,0-.71,2.31v7.49c0,2.79-.48,4.78-1.35,6s-2.47,1.76-4.54,1.76a14,14,0,0,1-4.77-.88,3.6,3.6,0,0,1,.8-2.39,7.79,7.79,0,0,0,3.58.8,2.77,2.77,0,0,0,2.38-.88,3.84,3.84,0,0,0,.64-2.47v-1a5.13,5.13,0,0,1-3.34,1.28,4.35,4.35,0,0,1-3.5-2Zm6.76-2.16V98a3.53,3.53,0,0,0-2.31-1.12A2.06,2.06,0,0,0,89,98a6.74,6.74,0,0,0-.63,3.27,6.23,6.23,0,0,0,.55,3.1,1.93,1.93,0,0,0,1.51,1,3.13,3.13,0,0,0,2.63-1.28Z" transform="translate(0 0)"/><path id="path18" class="cls-1" d="M110,102.33h-7.4a4.2,4.2,0,0,0,.72,2.39,2.46,2.46,0,0,0,2.14.88,9.11,9.11,0,0,0,3.5-1,3.36,3.36,0,0,1,1,2,8.31,8.31,0,0,1-5.09,1.52,4.86,4.86,0,0,1-4.3-1.91,8.76,8.76,0,0,1-1.27-5,8.17,8.17,0,0,1,1.43-5,4.77,4.77,0,0,1,4.06-1.92,5.23,5.23,0,0,1,4.05,1.6,5.75,5.75,0,0,1,1.43,4.06,12.9,12.9,0,0,1-.23,2.39Zm-5.09-5.66c-1.43,0-2.23,1.12-2.31,3.27h4.61v-.32a4.2,4.2,0,0,0-.55-2.15,2.15,2.15,0,0,0-1.75-.8Z" transform="translate(0 0)"/><path id="path24-3-6" class="cls-4" d="M70.68,27a8.16,8.16,0,0,0-3.42.72L32.11,43.37A1.33,1.33,0,0,0,31.4,45h0c0,.08,0,.08.08.16l5.64,11.15h4.93l-.71-3.9c-.08-.32-.56-2.55-1-4.14l16.46,5.18a15,15,0,0,0,.88,2.86H84.27A15,15,0,0,0,85,53.49l16.38-5.1c-.48,1.59-1,3.82-1,4.14l-.71,3.9h4.93l5.56-11.07.08-.08.08-.16h0a.72.72,0,0,0,.08-.4,1.42,1.42,0,0,0-.79-1.27L74.41,27.83A7.86,7.86,0,0,0,70.68,27Z" transform="translate(0 0)"/><path id="path24-3" class="cls-5" d="M70.68,34.36a8.16,8.16,0,0,0-3.42.72L32.11,50.7a1.33,1.33,0,0,0-.71,1.67h0c0,.08,0,.08.08.16l3,6.06H41c-.24-.88-.48-1.92-.8-3l9.31,3H92l9.3-3c-.32,1-.56,2.07-.8,3H107l3-6,.08-.08.08-.16h0a.72.72,0,0,0,.08-.4,1.4,1.4,0,0,0-.79-1.27L74.33,35.08A9.58,9.58,0,0,0,70.68,34.36Z" transform="translate(0 0)"/><path id="path24" class="cls-4" d="M110.27,59.46a.72.72,0,0,1-.08.4h0l-.08.16h0l-.08.08L101.53,77c-1.2,2.31-3.34,2.23-3-.08l1.74-9.56c.08-.32.56-2.55,1-4.14l-16.38,5.1c-2.55,16.81-24.65,17-28.23,0L40.22,63.13c.48,1.59,1,3.82,1,4.14L43,76.83c.39,2.39-1.83,2.47-3,.08l-8.58-17c0-.08-.08-.08-.08-.16A1.22,1.22,0,0,1,32,58.11h0L67.1,42.49a9,9,0,0,1,7.07,0l35.15,15.62A1.49,1.49,0,0,1,110.27,59.46Z" transform="translate(0 0)"/><path id="path26" class="cls-6" d="M82,62.41l15.18-6.14a.74.74,0,0,0,.4-.87.66.66,0,0,0-.4-.4c-1.75-.72-4-1.59-6.12-2.47-.4-.16-4.13,2.55-4.45,2.79l-6.52,5.26C78.55,62,79.9,63.29,82,62.41Z" transform="translate(0 0)"/><ellipse id="circle28" class="cls-6" cx="70.99" cy="68.39" rx="7.95" ry="7.97"/><path id="path6-0" class="cls-3" d="M81.41,50.94a5.33,5.33,0,0,1-2.23-.24L51.51,43.21a9.66,9.66,0,0,1-2.06-1Z" transform="translate(0 0)"/><path id="path8-6" class="cls-1" d="M39.35,98h4.21c1.51,0,2.31.72,2.31,2.15v6.93A18.33,18.33,0,0,1,39,108.23a6.61,6.61,0,0,1-5.64-2.55,11.44,11.44,0,0,1-1.91-7c0-3,.79-5.26,2.38-6.86a7.94,7.94,0,0,1,5.81-2.47,10.75,10.75,0,0,1,6.2,1.92,3.61,3.61,0,0,1-.56,1.43,3.2,3.2,0,0,1-1,1,8.17,8.17,0,0,0-4.53-1.6,4.42,4.42,0,0,0-3.58,1.6c-.88,1.11-1.27,2.78-1.27,5.1,0,4.38,1.59,6.53,4.85,6.53a18.48,18.48,0,0,0,2.94-.32v-2.47a10.14,10.14,0,0,1,.08-1.75H40.62a2.05,2.05,0,0,1-1.19-.32,1.32,1.32,0,0,1-.4-1A9.18,9.18,0,0,1,39.35,98Z" transform="translate(0 0)"/><path id="path10-2" class="cls-1" d="M59.78,106.32a2.9,2.9,0,0,1-.47,1,1.89,1.89,0,0,1-.64.72,3.06,3.06,0,0,1-2.46-1.6,5.3,5.3,0,0,1-3.82,1.68,3.94,3.94,0,0,1-3.1-1.2,4.43,4.43,0,0,1-1-2.79,3.89,3.89,0,0,1,1.44-3.34,5.72,5.72,0,0,1,3.73-1.12,21.53,21.53,0,0,1,2.31.08v-.8c0-1.43-.64-2.07-2-2.07a12.84,12.84,0,0,0-4.05,1,3.67,3.67,0,0,1-.88-2.39,14.16,14.16,0,0,1,5.73-1.2,4.54,4.54,0,0,1,3.26,1.12,4.34,4.34,0,0,1,1.27,3.35v5.41C59,105.28,59.23,105.92,59.78,106.32Zm-6.68-.64a3.62,3.62,0,0,0,2.63-1.28v-2.31a16.56,16.56,0,0,0-2-.08,2.14,2.14,0,0,0-1.67.56,1.92,1.92,0,0,0-.56,1.43,2.17,2.17,0,0,0,.48,1.36,2.6,2.6,0,0,0,1.11.32Z" transform="translate(0 0)"/><path id="path12-6" class="cls-1" d="M61.93,96.2a2.7,2.7,0,0,1,.48-1,1.87,1.87,0,0,1,.63-.72,3.35,3.35,0,0,1,2.79,2.39,3.54,3.54,0,0,1,3.42-2.39,9.8,9.8,0,0,1,1.51.16,6,6,0,0,1-.8,3.11,6.08,6.08,0,0,0-1.19-.16,3,3,0,0,0-2.63,1.75v8.45a11.72,11.72,0,0,1-1.59.16,11.94,11.94,0,0,1-1.67-.16V98.9a3.35,3.35,0,0,0-1-2.7Z" transform="translate(0 0)"/><path id="path14-1" class="cls-1" d="M83.08,106.32a2.75,2.75,0,0,1-.48,1A1.87,1.87,0,0,1,82,108a3.07,3.07,0,0,1-2.47-1.6,5.26,5.26,0,0,1-3.81,1.68,4,4,0,0,1-3.11-1.2,4.48,4.48,0,0,1-1-2.79A3.91,3.91,0,0,1,73,100.74a5.54,5.54,0,0,1,3.66-1.12A21.62,21.62,0,0,1,79,99.7v-.8c0-1.43-.64-2.07-2-2.07a12.89,12.89,0,0,0-4.06,1A3.71,3.71,0,0,1,72,95.4a14.14,14.14,0,0,1,5.72-1.2A4.51,4.51,0,0,1,81,95.32a4.31,4.31,0,0,1,1.28,3.35v5.41a2.67,2.67,0,0,0,.79,2.24Zm-6.68-.64A3.64,3.64,0,0,0,79,104.4v-2.31a16.64,16.64,0,0,0-2-.08,2.13,2.13,0,0,0-1.67.56,1.92,1.92,0,0,0-.56,1.43,2.17,2.17,0,0,0,.48,1.36,2.56,2.56,0,0,0,1.11.32Z" transform="translate(0 0)"/><path id="path16-8" class="cls-1" d="M86.34,106.24a9.07,9.07,0,0,1-1.19-5,7.37,7.37,0,0,1,1.51-5,4.69,4.69,0,0,1,3.66-1.84,5.22,5.22,0,0,1,3.57,1.36A3,3,0,0,1,96,94.6a2.06,2.06,0,0,1,.72.72c.16.32.31.56.47,1a3,3,0,0,0-.71,2.31v7.49c0,2.79-.48,4.78-1.35,6s-2.47,1.76-4.54,1.76a14,14,0,0,1-4.77-.88,3.6,3.6,0,0,1,.8-2.39,7.79,7.79,0,0,0,3.58.8,2.77,2.77,0,0,0,2.38-.88,3.84,3.84,0,0,0,.64-2.47v-1a5.13,5.13,0,0,1-3.34,1.28,4.35,4.35,0,0,1-3.5-2Zm6.76-2.16V98a3.53,3.53,0,0,0-2.31-1.12A2.06,2.06,0,0,0,89,98a6.74,6.74,0,0,0-.63,3.27,6.23,6.23,0,0,0,.55,3.1,1.93,1.93,0,0,0,1.51,1,3.13,3.13,0,0,0,2.63-1.28Z" transform="translate(0 0)"/><path id="path18-7" class="cls-1" d="M110,102.33h-7.4a4.2,4.2,0,0,0,.72,2.39,2.46,2.46,0,0,0,2.14.88,9.11,9.11,0,0,0,3.5-1,3.36,3.36,0,0,1,1,2,8.31,8.31,0,0,1-5.09,1.52,4.86,4.86,0,0,1-4.3-1.91,8.76,8.76,0,0,1-1.27-5,8.17,8.17,0,0,1,1.43-5,4.77,4.77,0,0,1,4.06-1.92,5.23,5.23,0,0,1,4.05,1.6,5.75,5.75,0,0,1,1.43,4.06,12.9,12.9,0,0,1-.23,2.39Zm-5.09-5.66c-1.43,0-2.23,1.12-2.31,3.27h4.61v-.32a4.2,4.2,0,0,0-.55-2.15,2.15,2.15,0,0,0-1.75-.8Z" transform="translate(0 0)"/><path id="path24-3-6-9" class="cls-7" d="M70.68,27a8.16,8.16,0,0,0-3.42.72L32.11,43.37A1.33,1.33,0,0,0,31.4,45h0c0,.08,0,.08.08.16l5.64,11.15h4.93l-.71-3.9c-.08-.32-.56-2.55-1-4.14l16.46,5.18a15,15,0,0,0,.88,2.86H84.27A15,15,0,0,0,85,53.49l16.38-5.1c-.48,1.59-1,3.82-1,4.14l-.71,3.9h4.93l5.56-11.07.08-.08.08-.16h0a.72.72,0,0,0,.08-.4,1.42,1.42,0,0,0-.79-1.27L74.41,27.83A7.86,7.86,0,0,0,70.68,27Z" transform="translate(0 0)"/><path id="path24-3-2" class="cls-1" d="M70.68,34.36a8.16,8.16,0,0,0-3.42.72L32.11,50.7a1.33,1.33,0,0,0-.71,1.67h0c0,.08,0,.08.08.16l3,6.06H41c-.24-.88-.48-1.92-.8-3l9.31,3H92l9.3-3c-.32,1-.56,2.07-.8,3H107l3-6,.08-.08.08-.16h0a.72.72,0,0,0,.08-.4,1.4,1.4,0,0,0-.79-1.27L74.33,35.08A9.58,9.58,0,0,0,70.68,34.36Z" transform="translate(0 0)"/><path id="path24-0" class="cls-7" d="M110.27,59.46a.72.72,0,0,1-.08.4h0l-.08.16h0l-.08.08L101.53,77c-1.2,2.31-3.34,2.23-3-.08l1.74-9.56c.08-.32.56-2.55,1-4.14l-16.38,5.1c-2.55,16.81-24.65,17-28.23,0L40.22,63.13c.48,1.59,1,3.82,1,4.14L43,76.83c.39,2.39-1.83,2.47-3,.08l-8.58-17c0-.08-.08-.08-.08-.16A1.22,1.22,0,0,1,32,58.11h0L67.1,42.49a9,9,0,0,1,7.07,0l35.15,15.62A1.49,1.49,0,0,1,110.27,59.46Z" transform="translate(0 0)"/><path id="path26-2" class="cls-1" d="M82,62.41l15.18-6.14a.74.74,0,0,0,.4-.87.66.66,0,0,0-.4-.4c-1.75-.72-4-1.59-6.12-2.47-.4-.16-4.13,2.55-4.45,2.79l-6.52,5.26C78.55,62,79.9,63.29,82,62.41Z" transform="translate(0 0)"/><ellipse id="circle28-3" class="cls-1" cx="70.99" cy="68.39" rx="7.95" ry="7.97"/></svg> \ No newline at end of file
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ id="Hexagone"
+ viewBox="0 0 141.62 163.87"
+ version="1.1"
+ sodipodi:docname="Garage.svg"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview38"
+ pagecolor="#ffffff"
+ bordercolor="#000000"
+ borderopacity="0.25"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ showgrid="false"
+ inkscape:zoom="3.7584062"
+ inkscape:cx="79.821069"
+ inkscape:cy="72.238067"
+ inkscape:window-width="1920"
+ inkscape:window-height="1056"
+ inkscape:window-x="0"
+ inkscape:window-y="1080"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Hexagone" />
+ <defs
+ id="defs4">
+ <style
+ id="style2">.cls-1{fill:#4f4f4f;}.cls-2{fill:#f7f6f2;}.cls-3{fill:#010101;}.cls-4{fill:#ffd953;}.cls-5{fill:#55c4f1;}.cls-6{fill:#57c4f2;}.cls-7{fill:#f39133;}</style>
+ </defs>
+ <polygon
+ class="cls-1"
+ points="141.62 122.91 141.62 40.97 70.81 0 0 40.97 0 122.91 70.81 163.88 141.62 122.91"
+ id="polygon6" />
+ <path
+ class="cls-2"
+ d="M134.92,114.73V49.15a7.46,7.46,0,0,0-3.72-6.46L74.53,16.35a7.44,7.44,0,0,0-7.44,0L10.42,42.69A7.46,7.46,0,0,0,6.7,49.15v65.58a7.45,7.45,0,0,0,3.72,6.45l56.67,26.34a7.44,7.44,0,0,0,7.44,0l56.67-26.34A7.45,7.45,0,0,0,134.92,114.73Z"
+ transform="translate(0 0)"
+ id="path8" />
+ <g
+ id="g888"
+ transform="translate(-0.00649891,-0.19994428)">
+ <title
+ id="title904">texte garage</title>
+ <path
+ id="path13"
+ class="cls-1"
+ d="m 33.056701,108.51228 h 5.052 c 1.812,0 2.772,0.864 2.772,2.58 v 8.316 a 21.996,21.996 0 0 1 -8.244,1.38 7.932,7.932 0 0 1 -6.768,-3.06 13.728,13.728 0 0 1 -2.292,-8.4 c 0,-3.6 0.948,-6.312 2.856,-8.232 a 9.528,9.528 0 0 1 6.972,-2.964002 12.9,12.9 0 0 1 7.44,2.304002 4.332,4.332 0 0 1 -0.672,1.716 3.84,3.84 0 0 1 -1.2,1.2 9.804,9.804 0 0 0 -5.436,-1.92 5.304,5.304 0 0 0 -4.296,1.92 c -1.056,1.332 -1.524,3.336 -1.524,6.12 0,5.256 1.908,7.836 5.82,7.836 a 22.176,22.176 0 0 0 3.528,-0.384 v -2.964 a 12.168,12.168 0 0 1 0.096,-2.1 h -2.58 a 2.46,2.46 0 0 1 -1.428,-0.384 1.584,1.584 0 0 1 -0.48,-1.2 11.016,11.016 0 0 1 0.384,-1.764 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path10"
+ class="cls-1"
+ d="m 57.572701,118.49628 a 3.48,3.48 0 0 1 -0.564,1.2 2.268,2.268 0 0 1 -0.768,0.864 3.672,3.672 0 0 1 -2.952,-1.92 6.36,6.36 0 0 1 -4.584,2.016 4.728,4.728 0 0 1 -3.72,-1.44 5.316,5.316 0 0 1 -1.2,-3.348 4.668,4.668 0 0 1 1.728,-4.008 6.864,6.864 0 0 1 4.476,-1.344 25.836,25.836 0 0 1 2.772,0.096 v -0.96 c 0,-1.716 -0.768,-2.484 -2.4,-2.484 a 15.408,15.408 0 0 0 -4.86,1.2 4.404,4.404 0 0 1 -1.056,-2.868 16.992,16.992 0 0 1 6.876,-1.44 5.448,5.448 0 0 1 3.912,1.344 5.208,5.208 0 0 1 1.524,4.02 v 6.492 c -0.12,1.332 0.156,2.1 0.816,2.58 z m -8.016,-0.768 a 4.344,4.344 0 0 0 3.156,-1.536 v -2.772 a 19.872,19.872 0 0 0 -2.4,-0.096 2.568,2.568 0 0 0 -2.004,0.672 2.304,2.304 0 0 0 -0.672,1.716 2.604,2.604 0 0 0 0.576,1.632 3.12,3.12 0 0 0 1.332,0.384 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path12"
+ class="cls-1"
+ d="m 60.152701,106.35228 a 3.24,3.24 0 0 1 0.576,-1.2 2.244,2.244 0 0 1 0.756,-0.864 4.02,4.02 0 0 1 3.348,2.868 4.248,4.248 0 0 1 4.104,-2.868 11.76,11.76 0 0 1 1.812,0.192 7.2,7.2 0 0 1 -0.96,3.732 7.296,7.296 0 0 0 -1.428,-0.192 3.6,3.6 0 0 0 -3.156,2.1 v 10.14 a 14.064,14.064 0 0 1 -1.908,0.192 14.328,14.328 0 0 1 -2.004,-0.192 v -10.668 a 4.02,4.02 0 0 0 -1.2,-3.24 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path14"
+ class="cls-1"
+ d="m 85.532701,118.49628 a 3.3,3.3 0 0 1 -0.576,1.2 2.244,2.244 0 0 1 -0.72,0.816 3.684,3.684 0 0 1 -2.964,-1.92 6.312,6.312 0 0 1 -4.572,2.016 4.8,4.8 0 0 1 -3.732,-1.44 5.376,5.376 0 0 1 -1.2,-3.348 4.692,4.692 0 0 1 1.668,-4.02 6.648,6.648 0 0 1 4.392,-1.344 25.944,25.944 0 0 1 2.808,0.096 v -0.96 c 0,-1.716 -0.768,-2.484 -2.4,-2.484 a 15.468,15.468 0 0 0 -4.872,1.2 4.452,4.452 0 0 1 -1.128,-2.916 16.968,16.968 0 0 1 6.864,-1.44 5.412,5.412 0 0 1 3.936,1.344 5.172,5.172 0 0 1 1.536,4.02 v 6.492 a 3.204,3.204 0 0 0 0.948,2.688 z m -8.016,-0.768 a 4.368,4.368 0 0 0 3.12,-1.536 v -2.772 a 19.968,19.968 0 0 0 -2.4,-0.096 2.556,2.556 0 0 0 -2.004,0.672 2.304,2.304 0 0 0 -0.672,1.716 2.604,2.604 0 0 0 0.576,1.632 3.072,3.072 0 0 0 1.332,0.384 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path16"
+ class="cls-1"
+ d="m 89.444701,118.40028 a 10.884,10.884 0 0 1 -1.428,-6 8.844,8.844 0 0 1 1.812,-6 5.628,5.628 0 0 1 4.392,-2.208 6.264,6.264 0 0 1 4.284,1.632 3.6,3.6 0 0 1 2.531999,-1.392 2.472,2.472 0 0 1 0.864,0.864 c 0.192,0.384 0.372,0.672 0.564,1.2 a 3.6,3.6 0 0 0 -0.852,2.772 v 8.988 c 0,3.348 -0.576,5.736 -1.619999,7.2 -1.044,1.464 -2.964,2.112 -5.448,2.112 a 16.8,16.8 0 0 1 -5.724,-1.056 4.32,4.32 0 0 1 0.96,-2.868 9.348,9.348 0 0 0 4.296,0.96 3.324,3.324 0 0 0 2.856,-1.056 4.608,4.608 0 0 0 0.768,-2.964 v -1.2 a 6.156,6.156 0 0 1 -4.008,1.536 5.22,5.22 0 0 1 -4.2,-2.4 z m 8.112,-2.592 v -7.296 a 4.236,4.236 0 0 0 -2.772,-1.344 2.472,2.472 0 0 0 -2.148,1.344 8.088,8.088 0 0 0 -0.756,3.924 7.476,7.476 0 0 0 0.66,3.72 2.316,2.316 0 0 0 1.812,1.2 3.756,3.756 0 0 0 3.156,-1.536 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path18"
+ class="cls-1"
+ d="m 117.8367,113.70828 h -8.88 a 5.04,5.04 0 0 0 0.864,2.868 2.952,2.952 0 0 0 2.568,1.056 10.932,10.932 0 0 0 4.2,-1.2 4.032,4.032 0 0 1 1.2,2.4 9.972,9.972 0 0 1 -6.108,1.824 5.832,5.832 0 0 1 -5.16,-2.292 10.512,10.512 0 0 1 -1.524,-6 9.804,9.804 0 0 1 1.716,-6 5.724,5.724 0 0 1 4.872,-2.304 6.276,6.276 0 0 1 4.86,1.92 6.9,6.9 0 0 1 1.716,4.872 15.48,15.48 0 0 1 -0.276,2.868 z m -6.108,-6.792 c -1.716,0 -2.676,1.344 -2.772,3.924 h 5.532 v -0.384 a 5.04,5.04 0 0 0 -0.66,-2.58 2.58,2.58 0 0 0 -2.1,-0.96 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path8-6"
+ class="cls-1"
+ d="m 33.056701,108.51228 h 5.052 c 1.812,0 2.772,0.864 2.772,2.58 v 8.316 a 21.996,21.996 0 0 1 -8.244,1.38 7.932,7.932 0 0 1 -6.768,-3.06 13.728,13.728 0 0 1 -2.292,-8.4 c 0,-3.6 0.948,-6.312 2.856,-8.232 a 9.528,9.528 0 0 1 6.972,-2.964002 12.9,12.9 0 0 1 7.44,2.304002 4.332,4.332 0 0 1 -0.672,1.716 3.84,3.84 0 0 1 -1.2,1.2 9.804,9.804 0 0 0 -5.436,-1.92 5.304,5.304 0 0 0 -4.296,1.92 c -1.056,1.332 -1.524,3.336 -1.524,6.12 0,5.256 1.908,7.836 5.82,7.836 a 22.176,22.176 0 0 0 3.528,-0.384 v -2.964 a 12.168,12.168 0 0 1 0.096,-2.1 h -2.58 a 2.46,2.46 0 0 1 -1.428,-0.384 1.584,1.584 0 0 1 -0.48,-1.2 11.016,11.016 0 0 1 0.384,-1.764 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path10-2"
+ class="cls-1"
+ d="m 57.572701,118.49628 a 3.48,3.48 0 0 1 -0.564,1.2 2.268,2.268 0 0 1 -0.768,0.864 3.672,3.672 0 0 1 -2.952,-1.92 6.36,6.36 0 0 1 -4.584,2.016 4.728,4.728 0 0 1 -3.72,-1.44 5.316,5.316 0 0 1 -1.2,-3.348 4.668,4.668 0 0 1 1.728,-4.008 6.864,6.864 0 0 1 4.476,-1.344 25.836,25.836 0 0 1 2.772,0.096 v -0.96 c 0,-1.716 -0.768,-2.484 -2.4,-2.484 a 15.408,15.408 0 0 0 -4.86,1.2 4.404,4.404 0 0 1 -1.056,-2.868 16.992,16.992 0 0 1 6.876,-1.44 5.448,5.448 0 0 1 3.912,1.344 5.208,5.208 0 0 1 1.524,4.02 v 6.492 c -0.12,1.332 0.156,2.1 0.816,2.58 z m -8.016,-0.768 a 4.344,4.344 0 0 0 3.156,-1.536 v -2.772 a 19.872,19.872 0 0 0 -2.4,-0.096 2.568,2.568 0 0 0 -2.004,0.672 2.304,2.304 0 0 0 -0.672,1.716 2.604,2.604 0 0 0 0.576,1.632 3.12,3.12 0 0 0 1.332,0.384 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path12-6"
+ class="cls-1"
+ d="m 60.152701,106.35228 a 3.24,3.24 0 0 1 0.576,-1.2 2.244,2.244 0 0 1 0.756,-0.864 4.02,4.02 0 0 1 3.348,2.868 4.248,4.248 0 0 1 4.104,-2.868 11.76,11.76 0 0 1 1.812,0.192 7.2,7.2 0 0 1 -0.96,3.732 7.296,7.296 0 0 0 -1.428,-0.192 3.6,3.6 0 0 0 -3.156,2.1 v 10.14 a 14.064,14.064 0 0 1 -1.908,0.192 14.328,14.328 0 0 1 -2.004,-0.192 v -10.668 a 4.02,4.02 0 0 0 -1.2,-3.24 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path14-1"
+ class="cls-1"
+ d="m 85.532701,118.49628 a 3.3,3.3 0 0 1 -0.576,1.2 2.244,2.244 0 0 1 -0.72,0.816 3.684,3.684 0 0 1 -2.964,-1.92 6.312,6.312 0 0 1 -4.572,2.016 4.8,4.8 0 0 1 -3.732,-1.44 5.376,5.376 0 0 1 -1.2,-3.348 4.692,4.692 0 0 1 1.668,-4.02 6.648,6.648 0 0 1 4.392,-1.344 25.944,25.944 0 0 1 2.808,0.096 v -0.96 c 0,-1.716 -0.768,-2.484 -2.4,-2.484 a 15.468,15.468 0 0 0 -4.872,1.2 4.452,4.452 0 0 1 -1.128,-2.916 16.968,16.968 0 0 1 6.864,-1.44 5.412,5.412 0 0 1 3.936,1.344 5.172,5.172 0 0 1 1.536,4.02 v 6.492 a 3.204,3.204 0 0 0 0.948,2.688 z m -8.016,-0.768 a 4.368,4.368 0 0 0 3.12,-1.536 v -2.772 a 19.968,19.968 0 0 0 -2.4,-0.096 2.556,2.556 0 0 0 -2.004,0.672 2.304,2.304 0 0 0 -0.672,1.716 2.604,2.604 0 0 0 0.576,1.632 3.072,3.072 0 0 0 1.332,0.384 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path16-8"
+ class="cls-1"
+ d="m 89.444701,118.40028 a 10.884,10.884 0 0 1 -1.428,-6 8.844,8.844 0 0 1 1.812,-6 5.628,5.628 0 0 1 4.392,-2.208 6.264,6.264 0 0 1 4.284,1.632 3.6,3.6 0 0 1 2.531999,-1.392 2.472,2.472 0 0 1 0.864,0.864 c 0.192,0.384 0.372,0.672 0.564,1.2 a 3.6,3.6 0 0 0 -0.852,2.772 v 8.988 c 0,3.348 -0.576,5.736 -1.619999,7.2 -1.044,1.464 -2.964,2.112 -5.448,2.112 a 16.8,16.8 0 0 1 -5.724,-1.056 4.32,4.32 0 0 1 0.96,-2.868 9.348,9.348 0 0 0 4.296,0.96 3.324,3.324 0 0 0 2.856,-1.056 4.608,4.608 0 0 0 0.768,-2.964 v -1.2 a 6.156,6.156 0 0 1 -4.008,1.536 5.22,5.22 0 0 1 -4.2,-2.4 z m 8.112,-2.592 v -7.296 a 4.236,4.236 0 0 0 -2.772,-1.344 2.472,2.472 0 0 0 -2.148,1.344 8.088,8.088 0 0 0 -0.756,3.924 7.476,7.476 0 0 0 0.66,3.72 2.316,2.316 0 0 0 1.812,1.2 3.756,3.756 0 0 0 3.156,-1.536 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path18-7"
+ class="cls-1"
+ d="m 117.8367,113.70828 h -8.88 a 5.04,5.04 0 0 0 0.864,2.868 2.952,2.952 0 0 0 2.568,1.056 10.932,10.932 0 0 0 4.2,-1.2 4.032,4.032 0 0 1 1.2,2.4 9.972,9.972 0 0 1 -6.108,1.824 5.832,5.832 0 0 1 -5.16,-2.292 10.512,10.512 0 0 1 -1.524,-6 9.804,9.804 0 0 1 1.716,-6 5.724,5.724 0 0 1 4.872,-2.304 6.276,6.276 0 0 1 4.86,1.92 6.9,6.9 0 0 1 1.716,4.872 15.48,15.48 0 0 1 -0.276,2.868 z m -6.108,-6.792 c -1.716,0 -2.676,1.344 -2.772,3.924 h 5.532 v -0.384 a 5.04,5.04 0 0 0 -0.66,-2.58 2.58,2.58 0 0 0 -2.1,-0.96 z"
+ style="stroke-width:1.2" />
+ </g>
+ <g
+ id="g902"
+ transform="translate(-0.00649891,3.8000556)">
+ <path
+ id="path6"
+ class="cls-3"
+ d="m 83.528701,52.040278 a 6.396,6.396 0 0 1 -2.676,-0.288 l -33.204,-8.988 a 11.592,11.592 0 0 1 -2.472,-1.2 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path24-3-6"
+ class="cls-4"
+ d="m 70.652701,23.312278 a 9.792,9.792 0 0 0 -4.104,0.864 l -42.18,18.78 a 1.596,1.596 0 0 0 -0.852,1.956 v 0 c 0,0.096 0,0.096 0.096,0.192 l 6.768,13.38 h 5.916 l -0.852,-4.68 c -0.096,-0.384 -0.672,-3.06 -1.2,-4.968 l 19.752,6.216 a 18,18 0 0 0 1.056,3.432 h 31.908 a 18,18 0 0 0 0.876,-3.384 l 19.655999,-6.12 c -0.576,1.908 -1.2,4.584 -1.2,4.968 l -0.852,4.68 h 5.916 l 6.672,-13.284 0.096,-0.096 0.096,-0.192 v 0 a 0.864,0.864 0 0 0 0.096,-0.48 1.704,1.704 0 0 0 -0.948,-1.524 l -42.239999,-18.744 a 9.432,9.432 0 0 0 -4.476,-0.996 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path24-3"
+ class="cls-5"
+ d="m 70.652701,32.144278 a 9.792,9.792 0 0 0 -4.104,0.864 l -42.18,18.744 a 1.596,1.596 0 0 0 -0.852,2.004 v 0 c 0,0.096 0,0.096 0.096,0.192 l 3.6,7.272 h 7.824 c -0.288,-1.056 -0.576,-2.304 -0.96,-3.6 l 11.172,3.6 h 50.988 l 11.159999,-3.6 c -0.384,1.2 -0.672,2.484 -0.96,3.6 h 7.8 l 3.6,-7.2 0.096,-0.096 0.096,-0.192 v 0 a 0.864,0.864 0 0 0 0.096,-0.48 1.68,1.68 0 0 0 -0.948,-1.524 l -42.143999,-18.72 a 11.496,11.496 0 0 0 -4.38,-0.864 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path24"
+ class="cls-4"
+ d="m 118.1607,62.264278 a 0.864,0.864 0 0 1 -0.096,0.48 v 0 l -0.096,0.192 v 0 l -0.096,0.096 -10.2,20.28 c -1.44,2.772 -4.008,2.676 -3.6,-0.096 l 2.088,-11.472 c 0.096,-0.384 0.672,-3.06 1.2,-4.968 l -19.655999,6.12 c -3.06,20.172 -29.58,20.4 -33.876,0 l -19.728,-6.228 c 0.576,1.908 1.2,4.584 1.2,4.968 l 2.136,11.472 c 0.468,2.868 -2.196,2.964 -3.6,0.096 l -10.296,-20.4 c 0,-0.096 -0.096,-0.096 -0.096,-0.192 a 1.464,1.464 0 0 1 0.792,-1.968 v 0 l 42.12,-18.744 a 10.8,10.8 0 0 1 8.484,0 l 42.179999,18.744 a 1.788,1.788 0 0 1 1.14,1.62 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path26"
+ class="cls-6"
+ d="m 84.236701,65.804278 18.215999,-7.368 a 0.888,0.888 0 0 0 0.48,-1.044 0.792,0.792 0 0 0 -0.48,-0.48 c -2.1,-0.864 -4.799999,-1.908 -7.343999,-2.964 -0.48,-0.192 -4.956,3.06 -5.34,3.348 l -7.824,6.312 c -1.848,1.704 -0.228,3.252 2.292,2.196 z"
+ style="stroke-width:1.2" />
+ <ellipse
+ id="circle28"
+ class="cls-6"
+ cx="71.024696"
+ cy="72.980278"
+ rx="9.54"
+ ry="9.5640001"
+ style="stroke-width:1.2" />
+ <path
+ id="path6-0"
+ class="cls-3"
+ d="m 83.528701,52.040278 a 6.396,6.396 0 0 1 -2.676,-0.288 l -33.204,-8.988 a 11.592,11.592 0 0 1 -2.472,-1.2 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path24-3-6-9"
+ class="cls-7"
+ d="m 70.652701,23.312278 a 9.792,9.792 0 0 0 -4.104,0.864 l -42.18,18.78 a 1.596,1.596 0 0 0 -0.852,1.956 v 0 c 0,0.096 0,0.096 0.096,0.192 l 6.768,13.38 h 5.916 l -0.852,-4.68 c -0.096,-0.384 -0.672,-3.06 -1.2,-4.968 l 19.752,6.216 a 18,18 0 0 0 1.056,3.432 h 31.908 a 18,18 0 0 0 0.876,-3.384 l 19.655999,-6.12 c -0.576,1.908 -1.2,4.584 -1.2,4.968 l -0.852,4.68 h 5.916 l 6.672,-13.284 0.096,-0.096 0.096,-0.192 v 0 a 0.864,0.864 0 0 0 0.096,-0.48 1.704,1.704 0 0 0 -0.948,-1.524 l -42.239999,-18.744 a 9.432,9.432 0 0 0 -4.476,-0.996 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path24-3-2"
+ class="cls-1"
+ d="m 70.652701,32.144278 a 9.792,9.792 0 0 0 -4.104,0.864 l -42.18,18.744 a 1.596,1.596 0 0 0 -0.852,2.004 v 0 c 0,0.096 0,0.096 0.096,0.192 l 3.6,7.272 h 7.824 c -0.288,-1.056 -0.576,-2.304 -0.96,-3.6 l 11.172,3.6 h 50.988 l 11.159999,-3.6 c -0.384,1.2 -0.672,2.484 -0.96,3.6 h 7.8 l 3.6,-7.2 0.096,-0.096 0.096,-0.192 v 0 a 0.864,0.864 0 0 0 0.096,-0.48 1.68,1.68 0 0 0 -0.948,-1.524 l -42.143999,-18.72 a 11.496,11.496 0 0 0 -4.38,-0.864 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path24-0"
+ class="cls-7"
+ d="m 118.1607,62.264278 a 0.864,0.864 0 0 1 -0.096,0.48 v 0 l -0.096,0.192 v 0 l -0.096,0.096 -10.2,20.28 c -1.44,2.772 -4.008,2.676 -3.6,-0.096 l 2.088,-11.472 c 0.096,-0.384 0.672,-3.06 1.2,-4.968 l -19.655999,6.12 c -3.06,20.172 -29.58,20.4 -33.876,0 l -19.728,-6.228 c 0.576,1.908 1.2,4.584 1.2,4.968 l 2.136,11.472 c 0.468,2.868 -2.196,2.964 -3.6,0.096 l -10.296,-20.4 c 0,-0.096 -0.096,-0.096 -0.096,-0.192 a 1.464,1.464 0 0 1 0.792,-1.968 v 0 l 42.12,-18.744 a 10.8,10.8 0 0 1 8.484,0 l 42.179999,18.744 a 1.788,1.788 0 0 1 1.14,1.62 z"
+ style="stroke-width:1.2" />
+ <path
+ id="path26-2"
+ class="cls-1"
+ d="m 84.236701,65.804278 18.215999,-7.368 a 0.888,0.888 0 0 0 0.48,-1.044 0.792,0.792 0 0 0 -0.48,-0.48 c -2.1,-0.864 -4.799999,-1.908 -7.343999,-2.964 -0.48,-0.192 -4.956,3.06 -5.34,3.348 l -7.824,6.312 c -1.848,1.704 -0.228,3.252 2.292,2.196 z"
+ style="stroke-width:1.2" />
+ <ellipse
+ id="circle28-3"
+ class="cls-1"
+ cx="71.024696"
+ cy="72.980278"
+ rx="9.54"
+ ry="9.5640001"
+ style="stroke-width:1.2" />
+ </g>
+</svg>
diff --git a/doc/sticker/Garage.pdf b/doc/sticker/Garage_NGI.pdf
index 1359a30d..1359a30d 100644
--- a/doc/sticker/Garage.pdf
+++ b/doc/sticker/Garage_NGI.pdf
diff --git a/doc/sticker/Garage.png b/doc/sticker/Garage_NGI.png
index ab95b731..ab95b731 100644
--- a/doc/sticker/Garage.png
+++ b/doc/sticker/Garage_NGI.png
Binary files differ
diff --git a/doc/sticker/Garage_NGI.svg b/doc/sticker/Garage_NGI.svg
new file mode 100644
index 00000000..da04692b
--- /dev/null
+++ b/doc/sticker/Garage_NGI.svg
@@ -0,0 +1 @@
+<svg id="Hexagone" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 141.62 163.87"><defs><style>.cls-1{fill:#4f4f4f;}.cls-2{fill:#f7f6f2;}.cls-3{fill:#010101;}.cls-4{fill:#ffd953;}.cls-5{fill:#55c4f1;}.cls-6{fill:#57c4f2;}.cls-7{fill:#f39133;}</style></defs><polygon class="cls-1" points="141.62 122.91 141.62 40.97 70.81 0 0 40.97 0 122.91 70.81 163.88 141.62 122.91"/><path class="cls-2" d="M134.92,114.73V49.15a7.46,7.46,0,0,0-3.72-6.46L74.53,16.35a7.44,7.44,0,0,0-7.44,0L10.42,42.69A7.46,7.46,0,0,0,6.7,49.15v65.58a7.45,7.45,0,0,0,3.72,6.45l56.67,26.34a7.44,7.44,0,0,0,7.44,0l56.67-26.34A7.45,7.45,0,0,0,134.92,114.73Z" transform="translate(0 0)"/><image width="1603" height="416" transform="translate(46.49 117.44) scale(0.03 0.03)" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABkMAAAGgCAYAAAAZ2BCoAAAACXBIWXMAAC4jAAAuIwF4pT92AAAgAElEQVR4nOzde3gk133e+bcxmCHmwkEP78OLgBmS4kWkAHIokzIpTssU5cuKHkgWpd1NRGCSmPEF3oHjJHY2iQa0vfY6sR+CWmzsx7GNHkn2Wopjg5ZlJXYigY4eJ7FpESPJskhKJEYXUhIlDUDOkBzesH90zwDoruo6ffqcqlNV38/z8OGguvr3K6C7T3Wft6uqsrq6qtBVfu/nqqqsjm5cGrHdlZZlldYVDO4TuQGt61jUibrdqG7rAos6bTWi1vH5t7HobfI7+HpcjP42CfeJvJ+jxyWxj8/eDurY/k5O/jYGj2WqvS3qWD0uKY4/WfZOa9xwVSfV/YLJ7aGPfQ4eX2fjT5a90xo3THs7GAOy7J3xfmG179WF5DsCAAAAAFyohBSGVH7v54YljTb/q0mqShpZW8Fi8olAJKZG1Dqe/jaFmPgK7HFJ7OOzN4GI294EIk57hxSI+HrtSsl/m8KOfSHtF7LsTSDitHcY+4WjkpYkLaqyuihpYbXy2nJyQQAAAACAqczDkMrv/osxNYKPMVVWh5LvQCBi3ptAJL5uUg3DOr6Oesn9xJdBHQKR3uoQiJjXIRDprnfwY19CHW+vXYPekfcLaOwjEOlQJ8j9wlFJC5LmVyuvLSQXBgAAAAB0kkkYUvnd/7MmaUJaHZM02LJFBgUIRMx7E4jE102qYViHQCSmjsnrkkCkpzoEIuZ1CES66x382BdwIJJq7yLuFzLsHfZ+YUVSXVJ9tfLaYnIDAAAAAECr1MKQyof/ZVWNoz+mJQ2t3ZLi5BOBSEyNqHUIRLqqQyASU4dApLveLh5fT+OGbR0CkR5qGNSVCETi6hCIxK/j7XHxNW6k2Dsf+4WjkmZWK6/Vk5sAAAAAAE7zHoY0Q5Cp5n+Dza4taxUwEAlu4otAJL5uUg3DOgQiMXUIRLrrnfNAxNm4m+JrjECkwzqhj30hhRJZ9g5pv1DWQMTTuNG5zjFJ04QiAAAAAGDGaxhS+fC/nJA0o9ZTYTU6tywgEDGuK4UdiJRm4iuwx6VtWwKakCQQ6bI3gYjT3mkFIj7HH28hs0Hv4Me+kPYLWfYOab9AIBK/ToTe6xxTZXVqVavzyc0AAAAAoLy8hCGVD/2rmiqrM5JGErq3LCAQMa4rEYjE1cly8inLC5JHIRDpog6BiNM6BCIdehcwEMl07MvytRtVJ8veIe0XCETi14ngZvx5SNLEqlaXkhsCAAAAQPk4DUMqH/pXVUnTkg41q5tsQcsCAhHjuhKBSFwdApH4dYKf+Apo3JAIRHqpQyDSoTeBSPw6NnVCe+1m2buI+4UMe+cvEJGk+1a1Op3cEAAAAADKxVkYUvngvx5VZbWu1qNB0v3w17mOr0Aky4kviUAkrg6BSPw6wU985S0QyXziy6Ju6wICke56B7xfIBCJr0MgEr+O1eOS4viTZe987hc4SgQAAAAAWvS5KFL54L+ekLSg1Ur7abFWI2c0EtaJuE9SncjbK8nrtH2eTLG3SR2Tv41V79Z1LOs4+dtY9k6q4/NxSarj63cyrqPO63jr7eg1lta4YVwny94WrzFfj4ur8SfL3ibP8yz3SSZ1krbP17hhUifTsc/mtWtSN0LwvdPaL6Q4/mTZ22T8SXO/YFZjv6TFiipj3RcAAAAAgGLqOQypfPD9M5LmdPoi6TYT5pHrEIjELwtp8slAqpP+Nr2LOCkYgUCkxzpZ9g44ELEOUjPs7SoQSeJ1/Emqa7JOEce+0EKJLHsTiDjtnVaQatTbuMagpD+qqDKVfAcAAAAAKD7r02RVPvj+qqQZSeONJSanRsnwtDFlOGVW5GfjlE5P4uyUKxa9Qz89ibfHJctTo0St4+vUKBmeNiafp0axqNu6IMXxJ8veLk6Z5et0UyZ1sjzVXvBjX2j7hSx7p/XcSnH8ybJ3WqfaM+rdVY0jq1qdSL4DAAAAABSXVRhSOfL+qipaUOv1QQhEeuttUodAJKZO4JNPhQxE0pz4IhAxrkMg0l1vAhH73sGPfaHtF7LsXcT9Qoa9CUQAAAAAIJe6Pk1W5cj7q5IWtNoahEhtnwZ9njKr6xoRdWxP3eKrt0mdkE+Z5eyUKxa9Qz89ibfHpSynRsnwtDEmY0B454rvvq6Lx9f2eZ5lbxenvvF1uimTOlmeai/4sS+0/UKWvV09t1rv07rA4/iTZe9inDJLksYrqtST7wAAAAAAxWRzzZAFnT4ixHriK/UPf93VSfpgnOXEV6Q0A5EWBCIdeoc0KRiBQMS+Tn4mvszrSnYTkmkGIr56E4jY9w5+7Attv5BlbxfPLU9hgkkdX0GqaZ02Ke4XEnsTiAAAAACAia7CkMqRw3WpsvGIEAIR972T6nid+HIw+eQ1EEmqE/jkE4FIb3UIRHqoYVBXshz7UgpEMh37bOvKYJ3Q9wsJvYMf+0LbL2TZm0DEae+09gvunyPjFVVmku8AAAAAAMViHIZUjhye1pmLpbua+CIQsa5T2kAkjxNfviYkE2oY10mrN4GI294EIs57J9XxNm44qlPYQKS1bkKNyDqh7Rey7E0g4rR3fgORQxVVJpLvAAAAAADFYXQB9Up9ekyV1T9qv8XgApImF3pM/wKS3dVp+71S7J1Ux+vFc5PqGDyW3i6qbvI8Mngsc3dRdYvnZ2SdCImPnavejl5jWV6Q3OQ1FubFc83rSpZjn6v9Qoa9k+p4Gzcc1SnkRdVTHH/Seu1m3ruI+4UMe6e1X3A/btywqtXF5DsAAAAAQP4lhiGV+vSwpEVJg34nvlL/8Gdex9ukkaM6BCId6hCIxNeJkLuJrxIEIj7HPgIR+zoEIh3WCX3sCy2UyLK3xfiT1uPia9ww6W1Spzj7hWOSRle1upx8BwAAAADIN5PTZM1LGpRkf3oAF6fMyvL0JLa/k4veJnVSPTVKQo2oOpwyK34dq8fF1SlCIuTu1CgpnTamWKdG6bDMoE6qp63KsndCHU6Z1WGd0Mc+m/2Cz/Eny94W409aj4v1+0kHvSM5eo1Z9U6qEdXb+DkyJKne/UYAAAAAQP50DEMq9fum1XbBdAKR1Hub1PH2uDiaaLD+2zjobR2IuFgn9EnBCAQihjUi6hQxEPEVJpjUybJ3lFQDEQfrEIj0VodAJP72MgQiPsefxN6pv588UFFlLHllAAAAAMi32NNkVer3DUt6cm1JmqdGyfC0MZwyK6aOo1NR+DqtSC5PjZL0uKR5ehKD2zllVofbc3lqlIRlrsY+B3Wy7B36qfZM6ng7DaFB7+DHvtD2C1n2Dni/YP1+MsPeLvYL6b6fXJE0zOmyAAAAABRZpyND6ht/TPEbpxwhYl+nkEeIFPWbwEmPS5rfxjW4Pc3HpY2DccO6t0kfB98Ejq3dbW/L8YcjRGLq2IwbJnUj+Bp/rP42ZRn7MnxcQusd8n7B+v1khr3zd4TIoKSZ5BUBAAAAIL8ijwypzN1Xk/SpbL8JnOq34TrXiFrH+m+T1NtRHY4Q6a0OR4jE3x78N4EdPC7OXrtZ9g5p3HBUJ8veHCHSW+/gxz4Hr93IdSzqZNrbcvzxdcQfR4h0qJtUw7rODataXUxeEQAAAADyJ+7IkLqkjL8JnOq34TrXiFrH+m+T1NvROtaPS1JvR9+85AiR+HV8/U6l+Sawg8fF2fiTZe80x42Uxp8se3OESG+9gx/7HLx2I9exqJNpb8vxx8Xj4nP8MXlO+OptM/5ku1/g6BAAAAAAhdUWhlTmfn5C0tCZBQQi8et4C0RCn/gqaCBi1buIk4IGtxOIdFiHQMS+js9xN6XXWC4Dkdb7tC4oy9gXUiiRZe+SBiJZjn3exg2rOvsrq3215GYAAAAAkD9RR4ZMp/ttOAIR694mdQhEzOtkOfkUeZ/WBR4fl8RtCWxCkkCki94EIk57FzIQcfXaNegd/NgX0H6BQKTDOlEbRCDisM5UciMAAAAAyJ8N1wypzP18TdKn1m5O8XzJieeKT/V8yZ1rRK1j/bdx0NukjrdzxTs6N3dI1xCJnEfw9Likda5zkzqFPVd8wu/lbdyIqmNyv4DGvkyvIeJz3E1p7MvdNURcjT8GvYMf+1LaL2TZ26ROYfcLGfZOqpPqPqljnT2rldeWkhsBAAAAQH60HhnS8k2wtL6NG4EjRMx7m9ThCBHzOpHzBxl+Gzetx6Ww3wRO+L1S/TZucpkMvwnsaNww7e1g/MmyN0eI9NY7+LEvpf1Clr0jpbhfsOrtar+QYe/8HCHC0SEAAAAACufMkSGV3/mFYUlPhv9N4Ay/JV3II0Qy/DZuVB2OEImvkdbjUthvArv4hrar8SfL3i7Gjai6UYVSGn+y7M0RIr31Dn7sS2m/EHxvT/sFb+8nDepk2TvTccO4zspq5bVqcgMAAAAAyI/1R4aMScrBN4Ez/JZ0IY8QyfDbuFHSPEKkTYrfxs3dt6ST+vjs7eqbwC6+oe1q/Mmyt4txI6puVKGUxp8se1sfIeJiHcvxx6pu64KyjH0p7ReC7+1pv+Dt/aRBnSx7Z3pkmfE6g5XVvrHkOwMAAABAfqwPQybO/ItApMM6BCJO69hMWvvsHfrpSVw9Lja9E/sY9iYQaa6TZW8CEae9rSY2fY59Fs/zNAORNqGPfSGFEln2JhBx2jvTQMT4OTKRXBwAAAAA8qOyurqqym+fPkVW260Rd0nrNAMmp0bJ8LQxnDLLbR2b0xr57B366UlcPC7enp8+e7s4NUqW40ZUnSx7uxg3oupGFUpp/Mmyt9Wpb3yOfRbjT1qnzMrl2Odgv+Br3Ei1dxH3Cxn2zvSUWYmPE6fKAgAAAFAop48MqUmy/EZaVFmbb60l1Iiq4/f0AAnr+PqmsqPeJnU4QqRDn8C/jevicfH2/PTZ28U3gW3HBF/jT5a9XYwbUmrfkuYIEbd1sjxCJJdjn4P9gq8jy1Lt7WhsSXW/0IIjRDr03rCMU2UBAAAAKJTTYcjaB53UAhFXE18ZhgnWE3Mp9TZBINKhD4FIbO/EPj575z0QCXriy6yOrwlJr4FISr0JRHrrHfzYF1IokWXvNMcNF3Vsx42Axr7s9gu15KIAAAAAkA+nw5DRDUsJRNzWcTFpZNvb5PY0JwXbpBiI2PQmEInvndjHZ28CEbe905rYTHH8ybK3yfiT5j6p6xqGdQlE4usQiESvU9pAxNFrLJv9wmj7jQAAAACQTxX9VvN6Ic7OWRzVxsH5ko3OFe/lfMnu6tj8Tq56m9ye1nn0rZ4jMcvS6h36+dqTHhev1/9p3ZYUnxNOzhXv8XFJrONq3M1w7PN1TShn+4UMe7sYNyLXsajj67UrWY4/Br2DH/tC2i9k2TutccO0t4MxIMveAe4XViuvWaSsAAAAABCePp35xperb6RFtUn61pqrbwIH9m1cjhCJXsfqORKzLK3eoX8bN+lx8fpt3NZtMZkzSfFxacURIh16p/VN7xTHnyx7p3VkmVFvy+e5i79NYcc+i/EnzSNEUuud1rhh2tvBGJBl7wD3C5XVPo4OAQAAAFAI68IQyW8gklSHQMR7b5PbCUQ69CEQia/Tui15m/giEOmpDoGIeR0Cke56Bz/2JdTx9toNrXdo+4XW3gk1ouoQiKxfhzAEAAAAQCH0abUyvHGRr0AkzYmvwAKRtvu0Lkixt0kfApEOfQhE4uu0bktAE5IEIl32dvX4tt6ndYHH8SfL3gQibnsHP/aFFEpk2Tuk/YKr95M2vSOkGoi4WKftPsPJRQAAAAAgfH2Shv1NzCXcHlmngIGIzcSNz94mfXxNSKYZiPjqTSDSoU7rtgQ0IUkg0mVvF4+vpzDBpI6zcTfFsc/V45LYm0Akfp2oDSIQ8VqnkIFIiuNPOu9lh5MLAAAAAED4+iRVJXmcmEu43bY3gUhvvU36eJv4SikQyXTi3bauDNaxqEMgEn17VB0Ckd7qEIjE904rEPE5+W2yfb56Bz/2hRRKZNk7pP2Cq/eTGfYOIxAZTr4zAAAAAISvT9LImZ+cTcwl3IdAZN2y1gUp9jbpQyBiXyfLySevIU/IE19RvRNqRNUhEOmtDoFIfO8yBCK+xg2TOsGNfa0/+9wvZNk75P0CgUj8OhGsAk8AAAAAyIe+tiXePoC1LvAYiCTWNVnH8kNkGwKR+N4EIvHrOKgT3KRg3ia+fI0tJuvYBiK+ehOIOO1NINJb76DHPtvXrou/TZa9Ha1j/bgk9SYQiV8nQnud4eQ7AQAAAED4+tL9ANa6IM2Jr5QmBW0nGlwFIja9TfpYfVOQQMT8PkWcFIxQikDE5/iTZW+L8SfN/UIbAhHz3gQi8evY1ClrIOJo/LF6XDy9dqPqZBnGWH0ByMnjMpR8BwAAAAAIX/PIEAKR7noHHIjkcuLL0wRaq1Qn/W16F3FSMAKBSI91suxtMf6ktV+wDlId9I6UYiCSJJf7BYPeQY99oYUSWfYuQyAS2Njnbb8AAAAAAPm27jRZBCLd9SYQia4bVSilySdnE2oWvTOdfDJYh0CkQx0CEad1yhqI+HyNJfb2FCYY10mqa7JOEce+0EKJLHsTiDjtTSACAAAAAFZarhli+UHO5j4EIvHrEIjY1yltIGIzcWPa26ROQm+Tdbz1JhBx35tAxGnvvAciWQapwY99oe0XsuxNIOK0N4EIAAAAAHStL9sPYA56R0oxEOm6RkQdAhG3dQhE4tfx9riUZeIrsEAky94EIm57E4jY9w5+7Attv5Blb1fPrdb7tC4gEOmuN2EHAAAAgHJoHBmS90DEeuLLwYd7n5NPJn8bX72N6iTVNVmHQMS8boTcTQpGIBCxr5PqN4EdjT+uHpc2BCLxdZNqOKpDINKhTmj7hSx7u3hueXrtmtYJqTeBCAAAAAAYWztNFoFIvJADkcJOfJnUaZFqIJJUJ/DJJwKR3uoQiPRQw6CuZDn2pRiI+OptM/6UZr+Q0Dv4sS+0/UKWvXMeiPgKUm17E4gAAAAAgJGN1wwhEIlHIBK9TqaBiK9Ja0e9Q598cjYhmVDDuE5AE5IEIl30LmkgkuXY523ccFSHQKRDndD2C1n2JhBx2ptABAAAAAAS9bUtyfQQfYPeBCLp906qQyDSoU7gk0++TgPmNRBx0dvyd0isa7IOgYhxXYlAJK4OgUiHdXwGIq11E2pE1rHdL7hYJ/B9kkkdApH43gQiAAAAANBRX3gfwBLqRkoxELGpa9SHQMS+DoFId73zHogENvmU5qRgmywnvghEvPcmELHvHfzYZ7Nf8Dn+uKhr29ti/Al+v5BhbwIRAAAAAIjVPDIktA9gnnq7mNgMbfKpNBNfBCLx69j0DmlSMAKBiGGNiDq+Jr58jn0m22fV29PEO4GIeR0Ckd7qBBWIBDb2pfm4tDHZL2TYm0AEAAAAACKtO01WiqEEgYh9HW+TRo7qpDrxlVAjqo6zb7ta9CYQ6VAnAoGIYY2IOkUMRLwFqQZ1suwdhUDEvHfwY19ooUSWvQMORHwdWeazt6v9AgAAAAAUSMs1QwhEOtfutjeBSHzdqEIpTT75mjTyGoi4WMd2UtCmbusCApHuehOIRNeNKlSGQMR23HC1X3CwjvXfxkFvApEc9SYQcdrbxX7B5LEFAAAAgJzos/tWGIGIeW8Ckfi6UYUIRMzvk9akYJqTTwbSfFzaEIiY9yYQcdo700DE0fPc6m+T5dhnW7d1gaPxh0Ak/nYCkfjeBCIAAAAAcEbjyJCQP4BFSmvyyQCBSPw6BCK91SEQib89+IkvR49L1zUi6vg6NQqBSPq9CUR66x382Ofotetr/Mmyt0mf4PcLGfZOa78AAAAAAIFbO01WyB/AMp34yjBMMFnHayDiYB0Ckd7qEIjE3x78xJeDx8XZ+JNlb0djS6r7hRYEIh16E4jEr+OgTpaBSKa9LccNV49LmxQDEV+9CUQAAAAAoOWaIQQi0XUynRS0mbhJsbdJHV8TkgQiHdaJkLtJQYPbCUQ6rJPzQMRbmGBSx+e4m9LYRyDSYZ3Qx76QQokse2cYiPgcf7LsbTP+EIgAAAAAKJC+tiUEItF1CER6q+Nt4quggYhVb0d12u7TuoBAJH6dwCYFCUR6qJNlIOLoeZ7LQKT1Pq0LyjL2hRRKZNmbQMR576Q6JvcBAAAAgJzqy90h+gQi8esQiPRWJ6RAJLTJpzQflyQ+A5E2BCJuexOIOO1dyEDE1fhj0Dv4sS/F/UKWvQlE0u9tFYgAAAAAQP41jwwJ6ANYpAx7E4iY9zapQyBiXie0yae0HpfCTny5mJD0GIik1ptAxGlvApHeegc/9qW0X8iyd6QU9wtWvQlEAAAAACCP1p0mK/QPYAFNPhGI9FaHQMS8DoFIvCIGIt7Gjag6WfZOa9yw7Z1QI6oOgUhvdQhE4nuXIRDxOf7Y7GdTfU+cZW+b/QIAAAAA5FfLNUNC/wAW0OQTgUhvdXxNSNpOoCXWNVmHQMS4rkkdApHu6lrVybJ3SIGIo+d5lmGMdSDiYh0CEeO6JnWCDyWy7F3AQCS0MIZABAAAAECB9eXvEH0CkcgaUevkLhAJbPIpzUCkTYqBSGLvwB6XxD4+exOIuO1NIOK0t1Ug4nPssxh/0gxE2oQ+9oUUSmTZm0DEaW9XQSoAAAAA5EBf9GICkcjbo+oQiPRWh0CkQ5/AJ59cPS42vRP7+OxNIOK2N4GI0955C0R8hZm2vYMf+xztF5LkcZ9kUodAJKaOyfMcAAAAAPKvEYbk8hD9lHoTiPTW26QOgUiHPoFPPvk6DVgZJr5MeA0lWtdJszeBiNfeBCK99Q5+7HOwX/AVpJr0NpHm2BfSfoFABAAAAAC8WjsyJPQPYMFPfLmakEwzEEmpt0kdApEOfQhEYnsn9vHZ28XEV4ZhgrNxN8Oxz/pxSepNIBK/TgQCkS56E4i47Z3muJHS+JNlbwIRAAAAAAXXv+GnVUV8Dqpowyeh1YpUaf1k1LqOTZ2W26PqZNk7cp2WOpHb18Kot6c6Nr+Tq94mfD0uUeu0MXieO/vbqPPvYPs8d/G4GPWO+tu0bo/F42I9/hj8Dt56O6hj+zs5+du4GnczHPusHhfLccNqv7B2n9GBK1XdtEPVvh0a3XqlJKnad7ZGB648s061b4dGBq6UK8deflpLLz995ufl157T4qnHGv9+tfnvyqqWXn5aSy8/ZfY7RfE1/njbLxj0Dn7sc7BfcDb+ZNk7rXHDtLeD8SfL3nGvMQAAAAAogIp+/VdW2z5MtX0Ak9o+CUV+8HRRJ6Jua50se0euY/K3SbiPSV1XdWx+J1e9TW739bg4eY7ELEurt0mdxN42229YJ8vHJbGPz94O6vh8XBLruBp3Mxz7rB4Xt+PP8JbdGt58kWo7bpAk1bY3/r+/+f88WHnthBZPPablV59t/P+157R46lEtvviYllefTS7ga/xxsV8o7NgX0n4hy95pjRumvR2MP1n2bllndcuLkVsDAAAAAHnSCEOkoD+ARdYhEOmtDoFITI2odQhEuqpjNSGZUiCS6cSXQR0Ckd7qpLRPGt5ykYa37FZtxw0aHbhSw1su0sjAFcnbWwAPvfA3Wnr5KS298pQWnv8bLZ56VMuvPbdxJQKRLnqnNP54e+0a9I68X0BjH4FIhzprPxOGAAAAACiCtTBECvYDWGydAL4J3LEOgYh5HQKR7nqHPvlEIBJTx9e4EdWbQCS2dhePS3XTDtW236DRrVecCT8GN21P3q4SOfbK042jR049uhaQtB1FQiBiXjdqg3IeiKTau4j7hQx7N9chDAEAAABQBBvDECnID2Ad6xQsEKlduFfVLWdpdNfFyb3WWX75RS0e/7qWTh7X0snj0fexmbiJu1/iOgFNfJnUIRCJ52BSsNq/TaNnv07DW8/X8MD5kfdZeuEZLb34jBafW9LyK8+31eiqd9u25G3ii0Ckpzo9jBvDWxqnuaptH1Vtx6iGtlyU3B9tjp56TIsvPaqFFx7WwgsPN69HEtB+gUCky7o2ddrvU9v8ZlUrgxrtf0PkfZZXV7T46t9q+bXG/+17h7RfcPV+MsPeWiUMAQAAAFAI7WGIRCDSTe8eJjarWwY0dtm1ql24R7UL92poezVyvW6tvPyiFo8/pfmv/a0WvvVlLR5/qvO2lCEQ8Tn5RCDStk61f5vGLrhJtXOuUW3XNRoaOC+5xzorrzyvheNf0PwzD2th+QtaevEZ496xCES6qFOeQKS6aYfGBm9rhh83aGjLhcm90LVjrzythRce1vyJT2rhhYfXTq0V3H7BoDeBiHGdsbN+QLXNb1Zt85s10n9tcs0WD73y37Xw8l9q/qVPbAxHCERS77265QXCEAAAAAC5V9Gv/5vVvByi37FOjgKRscuu1cTeG3Xgsmva7+fBsZPHNfPop1V/8mEtv/QCgUjHdaI2yEEgUpKJr4lL3qKxC/bpwPn7kut14eiJY5r56ic0/8xfrx01EvTEl0kdApHuersLREa3XqGxwds0NvgWjWy9PLkunDt66jHNn/yk5k9+SosvfTH5Djb7BV9HlpnWKWkgUtt8iyYG3qOxs35Ag5Wzk2sYOvba11Q/9RHVT31ES699lUAk5d6EIQAAAACKoBmGSCF/ADOuE3ggMnHFDZp+4x3OjgCxceTJv9H05/5MS89/t/1GApGYGoZ1ShyITFz8Fk1f/i4Nbe3uCJBurbzyvGa++gnNfPVPm6FIyBNfJnUIRLrrbf/4jg3eptqOUY0N3sbRH4E59srTzWCkcdRIrLwFIj6P+HPx3svxa3di4G5Nb/snGtp0afJ9enTk1Ec1/cKvamn1KxG3hrxfyG8gQhgCAAAAoAjWhSFSqB/AuqqTZe+Yv0Ptwj2q3/ojmYYgre77/J9r5rH/1jhSZD0CkZgahnVKFog0QpB3eg9BWq288rymn/wDzXz1EyrHxFeGYUKOA5HajlFNnPv9Ghu8jYue58TKayc0f/KTmln5sBZPPdq+AoFIF3XSee3WtrxZMzsOW50Gq1rUyn8AACAASURBVFdHTn1UUy/8ay2vrqxb6jZI3Sik/UK6vQlDAAAAABRBSxgihfgBrOs6gQQi1S0Dqt/6rtROh9WtYyePa+qRP9b81z6/8QYXgYjPIxEIROzrOHpchredq/p192r/rqsT1/Xp6IljmvjCr2vxxNLGGwo58ZW3QMRn7/g6w1su0tSF7+IIkAI4fcTIzPKHtfRK0rWvCESi6/gLRKqVnZo5e1rjA++O2rDUrKw+q+kXflUzp35z3dIsAxFP71ui6qTYe/Ws5wlDAAAAAOReRf/u365aTT4RiHSsU7toj+Zr/7sGtwy0rx+YBx77b5r6zB9vXJj3QCTLySdnE2oWvU3q9Pi4jF2wT/Xrf1SD/Vtj10nbTz/+Qc189U83LiQQMa9rXSfL3mvLqpt2aKx6q6Yu+BGuAVJQR196VDPLv6v5k59sXHydQKSLOu4DkdH+N2h+8Lc0tOmSqA3KxIMv/ydNnDy07igRAhGXvQlDAAAAABRBIwyR7CaxCEQi60xcfoPmbn1n+zoBO7r8lGqf/I2Np80iELGvk2kg4n7i67SZq/+eDg29PWqjMnfk6b/QxN/9u40LCUTM61rXya736LbLNXXBj2iseiunwSqJDafRar3wuteQWQbrlCMQmRi4W3M7fy1qIzJ37LWvaezEhBZfPX3EK4GIq96EIQAAAACKYC0MkRwFIil++AswEKnf+i6NXz7aflsOHDt5XGOfrmvx+PrTkbSuRSBiXKdggUj9+h/V+MW3RW1MMI6eOKbaZ35ey6+cXFtYyImvcgciE+d+vybO/X7tP/uNyTVQWA+98LDqJx5U/bkH1xZmGojYvGcy7Z3S+JPQu77z1zS+NdvTYiVZWX1WtefeRSDiuDdhCAAAAIAi2BiGSPkPRKI+qqXUu35bfoOQ01ZeflG1T/46gYirOgUJRPIQhJxGINJtbwd1rMdd897VTTs0ce7bNXXhu7gWCDY49spTmln5sOrPPRh/Ci0CkQ7rJN2ncb88BCGnEYi4700YAgAAAKAI2sMQiUDEovfM9/ygDl3z5ojG+XPs5HGN/uf7uztllq/TipjWIRCJqdN7IFK//h9p/JJ8BCGnHT1xTKN/9bMbFxZy4qv4gUh10w5NXfROTV3wLk6FhY5WXjuhmZUPaWblw1pefTZiDQKR+HU636cRhPxIxPaEK71AxNN7WZM6ke+H/PRePeskYQgAAACA3OuLXLra9qk4eZ22z1EG94lcx0GdyPkDf70nrrihMEGIJA1t36WF7/sxVbesu0B20t+m7e8SIXIdV3WS6pqsY7J9Bq3bXhuu/jZRd0zqZfA879B7+oqx3AUhkjSyY0j1a35840Kbx8HqcUlx7LN6bplsn0Ud63E3uvfwWReqvuefaemNH9Lh3e8jCEGiwb4dOrzrx7X0uv+s6epPqNp3dssarvYLSljH5j2Tae+Uxp9195nY+u7cBSGSNFjZqYWz/1DDfZc1lzga+9J6L2tSJ2r7vfUGAAAAgPyLPjLkzK0cIZLUe/Sci/TIXT/efnsBHHnyYU38z49sXBjyESJeT43i4Hnu7QgRP98EHrvwRv3RDT8VsT358dOPf1AzX/3TjQs5QsS8rk2dHo8QGT7rQk1ffI/Gz70zeVuADlZeO6GZZz+kmZUPNU6fdQZHiMSvs/HH0c3X6JFz/7R9vRw5+urfqvbcu7S8utJcwhEiNr05MgQAAABAEUQfGXKayTfH2u7TuqC4R4hUtwxo/q3/W0STYhjfc5Omr3v7xoUhHyHi7egKkzq+vsXvqHeX3wSubt6m+vX/KHobc+T+K+/R6I7hjQudPbda79O6gCNEuuld7Ttb0xe/T4vX/gZBCJwY7Nuhw9Uf19Jlf6bpXeuPFCnCESKtdRNqRNbpPP5U+3Zqvvrvk3sHbmTTGzS99Z+uW8IRIr31BgAAAID86hyGSAYTXxl++IuUXiAyPfpWDe2oGmxTfh2+7k6NXXrdxoUEIjF1ihOI1K//Rxrs39q+fg7Vr404civvE19R0gxE2vQ27k5f8j4tjXxQhy/mdFhwb30oMrHjQHNp3gMR/+PPzNnv19CmS6I2LncOnfWjqvV/77olBCK99QYAAACAfOpz803gwD78pRCIjJ5zkQ5dc0tE4eKp3/xeje66OGEtApHI26PqBB6I1HZdowMX3NB5+3JkZMeQpi77ofYbCjnxlVIg4mjcnTjv7Voa+ZAOX/z3CUHg3WDfDs2d/4tavOQPVBt4kwhE4tepbb4ll9cJ6aS+/QMtSxyFwWnuF9qk+H4cAAAAAAqgcWQIgUjXvWe+5wciChbT4OYBzd82kXBBdak8gUhr74QaUXUCDkTqb/yHyduWM9N73q1qf8RkO4FIh97+ApHa2W/UwtX/VnN7fkZDWy7o3AdwbGTLVfrU7t/R/IUf0HB/y5EPBCKSpJmd74/amFwb6rtU0wP/rGWpo7Evrf2C7fOTQAQAAAAAJK0/TRaBiHHv2kV7tP+i4YhixTW0fZfmb5vYuLC0gYij57n138ZB75jfYeKSWzW09dzknjkz2L+teXSIo/CAQKTD7fGvseqm7arv/Rl96up/o/1nX5+8jYBHB7a9VYuX/EdN7bxn4w0mpwQqcCAysfXdGtl8TdSG5N7UwI+qqsGWpQQixr0BAAAAIOc2XjPEybniA5sU9BCITI/WIooU3/4L9qp+8/+6cSGBSIc6vgIRf6+x6SvHkrcnp6Yu+8HmvyzDg8T7BDb2BRaITJx3p5ZGj2j8vLclbxeQksG+Hbr/3H+uxUv+o0a3XL12g9VrN4KzQMSmbusCs/Fnavs/MNiAfBqs7NTEWe/1N/YRiAAAAABA0NovoO5k4ivND2ApBiKShndUtf+iIYPtKqbxPfs0sedNGxcSiHSok59ApHbu1YU8KuS0wf5tmti9v/lTzia+IqUYiHRdY63O8FkXauGaf6O5vf+E64IgWCNbrtIjl/yBpnf9xNrCoAKRdMaf2pZbCntUyGlTA/c2/kEgYt8bAAAAAHKqz983gQP78OciEFmVpq4tx0XTO5m7+T0araZ1nnVHdQhEEutMXHJr8jbk3FoYIpVn4svBc8vytTt96d/Xk6N17d/JKbGQD4erP7HxKJGSBSIT24p10fQoQ32XamxL87pvvsJgV49LmywDEQAAAADIv+aRIQQipr3HXne1IC3c8WMa3nbOxoVeAxEH61gHIkm9ixGIjF10Y3L/nNtfvUbDA+evW0IgYt7bvMbotr1avH5Why/5e8n3AQIzsuUqLeyua2JH87SBJQpExgbe3r68gMY2/+DaD57CYG+nQEwzEAEAAACAgll3miwCkaTeo+dcpKEdrRfeLKfBzQOav31C1c3bNt7gLRBxNPlk9ZxIcfI7o0Bk7MIbNNi/Nbl3AdSq17YsIRAx751cY+qiMS1c+ysa2bY3uR8QqMG+HZo7/xdLFYiMDdypwcrZ7fcroDNHhpxGINJFbwAAAADIr5Zrhlh86ClRIFLbPRzVsLRGqrs1c+MPG0zcSAQiXdTJIBCpnVueI57Gzr/JzTdiCUQ2qPZv18K1/7fuH7qXa4OgMDILRNruY9O7u/GndlZ5TgM6WNmp0U1v2LiQQKSL3gAAAACQT33ePvx5O0Q/xUCkRe2i4eSVSmZ8zz5NX38ngUjHdSzqpByIjO68LLlfQYyePdz4h4sJoFyeK95mYqtz3bFz3qylG+a4NggKKZNAxNeXSDrUqW25uX3dAqtt/l6DtQLaLxCIAAAAAEDPGkeGhByI+Pzwl1Sn5T7DO6pRjUrv8HV3auzSNxCIdFzHok6Kgcj+c65K7lUQQwPnqdrfPL1byIGI14mvhN+ri/F8Zvhe/dHr/xVHg6DQ5s7/xfQvqp5yIDKy+Zr29Qqs1h8Rhti+lzWpY3NEUKrviRPuAwAAAAAFsHaaLAKR6Drr7jNyzoVRTSCpfst7Nbrr4oIEIq33aV1QrEBkeOt5yT0K5szRIRKBSJyE3tX+7Vq8flaHLjrQuQ5QEPMXfkDVvuY1NQoWiIyWLAiRpOFNMUdEZhmIeD3aOaGOyX0AAAAAIOc2XjOEQCS6zmqFo0ISDG4e0PxbxlXdsrUAgUi638ZN5DkQGd52bnL9ghkeOH/jAgKRaDG9azuv19KNv6OR7Xs63x8okKH+izW96yfXFhQoEKn27YzfvoIaab1myHoEIvH3AQAAAIAc60teJcVAxOo+6XyIJAxJNrR9l+bfMt74gUDEvo7tdR58hTEFNLz1/OSVCEQib584/w596g2/zGmxUEqHdv591QbetLbAVSDSJsVAROW7XogRApH4+wAAAABATrWHIT4//Ln4AJbm+ZINLqqOjfZfsFf1W97b+IFAxL5OioHI6M7XJdctpLSen1HLQguDEzTvU79iSnNXTHV/f6BANhwdIrkJRHwdVRt5P5NxoxxGOx0dIhGIAAAAAEDBRB8ZUtpAxGSiAUnG9+zTxN6bGj8QiNjXSSkQqW7ellyzsAIKRDKd+Or8O1X7t2vhDb+s8fPv6LgeUAb7B27aeHSIlP9ApKSqFYOjfr2+J06qa7KO7X6hBYEIAAAAgBKIP00WgUhCHXQyd/N7GhdUl+w+YKcZiFjVbV2Q70Ck3AhE4utKw2ddoIU3/JL277wu8nagjKYG72lfSCCST2me/tVo3E1rv2DwHOF9AgAAAICC6XzNEAKRhDroZOGOH9Pw9l2NHxIfX5+T/haTT2kGIm1SDETKylsokdTHZ2/3gcjo9r1aHP0AF0oHWhzY9lYN91/SfgOBSD4RiMTX4f0vAAAAgAJJvoB6mqcHCD0QQVcGNw9o/vYJVbdsbSwgEIlex9eFr617lxWByPqfR7fv1cJ1v6TBTWU+jRoQb2zbHbLeLyTxGYgk1S0rApH4OrxXAAAAAFAQfZl++LP+AObqQ2RCbyYIejZS3a2ZG394bQGBSPQ6BCLp8zr5ZNLLV+/ex76J89+mR0ZmCEKADsa2f1/zXxb7BZ/vvax6835HEoFIYh0AAAAAyLfGkSGlDUQsJ7/RlfE9+zR9/Z3xKxCIxNSIWsfj36aMsgxEAp34mrjgDs1d+X9ENQawzv6Bm9b9VIRApKxSfFyS6qS6T0qoYVoHAAAAAHJk7TRZBCId6vBhsFeHr7tTY5e+ofGDs3OdR3Dx2PkMRNoQiGSOQOQMghCgO7WBN637iUAkv8oQiHh87wUAAAAAObHxmiEEIh3q8GGwV/Vb3qvRXRc3fsgyEPF1nQfJzelJfAYiSXXLikBEExd+H0EI0KWNYYhEIJJnBCLx6/A8AQAAAFAM7dcMIRBJqANbg5sHNP+W8fgLqksEIrE1DOvYnAastNIMJdR5nYwDEYIQwE61b6fllycyfO9FINJBQO+JQwtEAAAAAKAAoq8ZUthApLVuQg3TOjA2tH2XFu74sbUFBCId1onaIAIRt8oSiLT2XvsnQQhgb/Ssqxr/SNzfRN07pfdeRr2TWxeSt/eyjuoQiAAAAACAU/HXDClkIOJx4h3GRqq7Vb/lvWsLCEQ6rBO1QQQibpUhEIl+fjaCkJ/qvI0AzOQ9ECkrr4GIg3Ws9wtJvQlEAAAAAJRP52uGEIh0qINejO/Zp4m9N60t8BmItEkxELHqTSCSvvIFIqPb92hmzz9M3j4A5ghE8inL97Imdbyd/pVABAAAAEC59LUtIRCJXwdOzd38HtUuuHxtga9AxOe3Pr1NfHmaQGtFILJOeQKR0e17tPDGX9Rg/7bkbQMQL+p1SCCSTwQi3dUBAAAAgBzqMwscbD+Uu1iHQKTI5m8f1/D2XWsLCETc1jEKO0r6PPf6uLT2CicQqfbvIAgBXLIZZ70GIgnrEIisaf1bEIh0qAMAAAAA+dc8MsRXIOLow591IGJTt3VBSScIUjK4eUDzt0+oumXr2kICEbd1OPojnrfHJcuJr/i61f7tWnjjLxCEAK6ldnSXQW9X75nKgkCkwzqdNw0AAAAA8mbdabKKGIhweoA8GKnuVv3m925cSCDitg6BSLxCBiLRveuv/ymNbB9O3gYARpZeeWrtBwKR/CpEINJ6n9YFBCIAAAAA0HLNEAKRrurAmQOXXqvp69++caFtIJLEZyCSWNdkHQIR75ycai9qnYTbY+skrOOg98zl/0AHzv2e5N4AjG0IQyQCkTzLfSDi6kskBCIAAAAAiqvP6oNSaQMR+HT4urdpYu+bNi60CUSsgwwHdbxOfFlMYhGIxCtRIDJx4Vt16JL/JbkngK4svPDX7QsJRPKLQCR+HQAAAAAogH5JjQ9KGz73VNT26Wm1IlVW43+O0raOQV1XdWx+p8h1WuvAp5kb79Li8ae0ePzrawujniNJj6/V88pRHaO6rdtv2jupjqPXblkkjhuS3XOitY6jsc/iOTG6Y49mLv8HnfsgWMde+qaWXvrGmZ8XX3hcy6+dSLjXqqqbztbo1ivOLBnefJGGtlzkaSvLa/HUo9E3pLpfSOhtO/6UQkx4sH6xr/cK3vYLJu9lLd8TAwAAAEDO9Z/5VxECkbb7yF0gglQMbh7Q/Fvu0eh/ekDLLz2/dgOBSBd1CES64iQQcTX5ZLJ95mFMtX+75q/9WS6YHrCjL3xZSy99Q4svfEnLr57Q4vNf1vJrz2nxhS+tWyvi8W57jrasE/kcaSyr7bjhzP+rfTs0uvVKjQ5cqcFN221/jVI6+tKjWn7tufgVCERywmD8JhABAAAAgELo3/BT3gMRmwlz4+3rvGlwZ2j7Li3c8Y81+okZ9fz4Eoh0uX0llftAJLp3/apJDQ2c37k2UvPQiaNafP7LWnzhS2f+Lyn68U983iSs02HcWDjxiCQ1/r+uRnXTDo0OXKnajlHVtt+o0YErNLhph/kvWDILzz+cvBKBSE7YBiItsnxcCEQAAAAAIFF/2xICkfh1kJqR6m7Vb3mPJv7HR9X1BBCBSPTtcduHhoIFIlOXvkMHzm25Bg9S9eDyX2rhuaNafPFxLTx3NH7FyP2WzT6pt3Fj+dUTWjj5iBZOPiLpdySpGY7coNr2xn+EI2vqz/1xgPuFhN5x4w9kF4h4ei9rUsd23LB+TwwAAAAA+dfv7IMSgQgcG9+zTwvfekL1Jx5Wx8fX26SRozqpTny11jF57XYuWVyGf5scBiKjO4Z1/+UTnWvBuWMvfVPzzQBkfvnTG29Mmku0mdj0FqSurbP44uNafPFxzXz7o1JlVbXtN2hs5+0a23m7hjaX9xokR089tna9kOD3C4ZjVCm1/oEJRIx7AwAAAEAONY8Msfyg1IpABI7N3Xy3lk58VwvfekIEIlF1mOTojW0g0iKgQKTav0Pzb/jZhA2GK8de+qbmj/+l6t/9z1p8/svrbnE0/gQQiKyvc/rIkamnH9DowJWa2PVDpQxGZlY+vHFBqvuFhLpG6/De5gyb8ZtABAAAAAByqW/tnxGftts+/7SsE3VqBZPTLbStY1mnjcn2Jdwn8n422wJX5m8f1/D2XUp8fCM/rxs8J1pFruOgjlHdqEJJdVw9z8vK4G/jatzw9bisu8/MFRNcJ8SzlVdP6sh3/lw3fOHHNfzZ92nqq7+uxZNPRKzpaPxJem5Zj3291Vl88XFNPf2Ahh/7Eb11aVJHlj8RVaBwjr3ytOrPfqz9htT2Cx7fe5WVzd/G1XtZF3Vsxg2J9woAAAAASqdv4485C0RsJ6358Jcrg5sHNH/7uKpbtopAJK4Oz/PuWIw/IQUiMePu2Hnfo/ELa53vC2tHn39CB5d+VcOffZ8mnvy3LUeCyN+4EbksjEDk9H0WTj6iia//onZ98fv109/4gI69/I2oQoUw/d3faP7L0fsfApEw2LzG0gxEuq5hWNfkuQUAAAAABdHn5IMSgQg8G6nuVv3m90TfmGog4mCd0AKRsk582Iw/AQci1f7tql/1k53vAysPLv93vfWL/0yjf/vjqn/7z7T86on4lX0GIol1TdaxHX9axLw2ll89oZnvfETDj/2I3vmVf6GHTj5iUCw/Hnrhb1R/9o/XLSEQKZSQAxFfQapk9z4fAAAAAHKocWQIgYh9b6TmwKXXavr6O2U3aa32+6V5SjdngUhSb7712ZUCBSL1q39Cg/3bOq+Prhz59p9rz2fHNfb4tBae+2xjYSGPLDOp0/1rY/65v1BtaVJvXZosRCiy8toJTT3zq4HtFwhEnCMQiV8HAAAAAHJu7TRZVh+MUwxEuq4RUYdAJPcOX/c2Tey9SeUNRJjkcM5m/AksEBk77006cN6bOq8HY0e+/V+057Pjmnjy17R06psqx6n2TOrYjbsLJx9Rbekncx+KTH/nN7R46tHGD6nuF1rv07rA1XsvnEEgEr8OAAAAAOTYxmuG2Hz4SysQ8Tn5xIe/XJm58S6N7rpYBCKd6vA874rN+BPI41Lt36761Zwey4WHnvucbvj8T2riiV/T0ovfarmVQCTy9qg6Mb0XTn7mTChy9MUvRa0UrCPPfkwzy7+3cWFq+wWPX+QgEOkCgQgAAAAA5F1f2xICkej78GEwGIObBzT/lnuiL6guEYh0XMegTlmFHIh0eF5N73k3p8fq0bFT39I7H/t51f7un2vx+Sc6rEkgEnl7VJ0OvRdOfkajX75HB7/+f2nltQ7XXwnE0VOPaeKbh6NvJBApLtvXmKvnRGJvj4FIUm8AAAAAyKn2MEQiEIm7D4IxtH2XFu74x82fCETi65g8z3FGzgKRWvVaHbr0h9prwdh9X/9dDS+Oa/74f29/DHwFGa7qeA1EWnsn1Iiqk9C7vvxxDT/2Lj3w3Y8k98/I0VOPqfa1H+28UhECkbJK2h9mGYj4HH+s3ucDAAAAQP5FhyESgUjcfRCMkepu1W95T/OnogYirfdpXUAg4lyOApGZKyfaa8DIQ89+TnsWD2r6a7+78QYCkejbI+v0Pu4uv3pCU08/oBueuEdHX3w8auXMPHhiQbWv3qvlVw2OXiEQyS8noYTJ/QhEAAAAACBr8WFIpBQDEZu6Rn0IRIpkfM++5gXVpWIGImlOvCNeeIHI1GU/pJEdQ+33R0crr57UTx/7TdX+7mebF0eXEvdtBCId6rgZdxdf+JJGn7hH9z3z21Erp+6B4/+fxp76GS2/9lxjQZr7Bau6rQsIRLpCIBJTd90tz507nNwEAAAAAMLWOQzxeQqOLD/82dQhEAnW3M13q3bB3uZPBCK91SkJJ6dG8fi4JPSubtqh6eG7De6H9Y4+/6RqX/g5zTz9YMStBCLRddILRLRa0fQzv5XpUSIrr53QO5/6p5p65tfab0xrv2AzaS0RiPhGIDKc3AAAAAAAwtbn7dtweQ9EyjpJnFPzt49rePuu5k8EIr3VKQlf44+LxyXh+clF07v3wDce1OhnJ7V4snmBdJvT0hGIdKjjbtxdfPFxjT5xj376GzOpXmD9yMqfaPiJuzR/YiF625rbl4hAJJ+cvXZN7mfxGHgdf5LqSpJGDe4IAAAAAEFrHBlCIBK9TlkniXNocPOA5m8fV3XL1uYS24m5hPsYreNo8inNQKSschiIDA+cr0OX/WDUjYiw8upJHfzy/Zpa+s32G21eY2lOSKYaiCT1TjcQkaSZ735Ew4+/U/c989teQ5EjK3+iPU/8sCa+cV/E9UEIRIrN1/tJk/vlLkglDAEAAACQe2unySIQiV6HQCQ3Rqq7Vb/5PeuW2EzMlWXii4mwM3IWiMy8fjxiexDl2KlvqfaFn1P9mf8Sv1JQgYij8cdqf53i+NNFGLP86glNP/Nbqn7xTh186hf04HN/YXDnZMdefloPHP997flyIwRZevnp+O0tzX6hrAhEDOvWkosCAAAAQNj6u1p7tSJVWj/dVbThE9+qIj5zt64TVcdFb4O6NnUIRHLjwKXXavr6OzX9uT9vLml5bKXox3fDc9bgPlHa1rGoE3W7UV1Z/A4R6yCa7fjj4nFZV6O261odOO+mrje/jI6ebFwfZPmVk8nZn81rzNs+ydH4Y7W/thw3bOpY3Ke+/KeqL39c1U1na+zs2zU68HqNDrxe+7fdoCTHXn5ai6ce0+KLj2n+xENafPHRjSu0Pkd8PS42467P/QKafL2fVPfPLV/vZU3qdK47VHn23OHVnd9Z6lwUAAAAAMK1MQzx+eEvMXDI8MOfyTrMH+TG4evepqWTx1V/4uHmEgKRznXKKOIbsb7GH6sJyegxdXrPuxPuB0k68sx/1cSX7l9b4Oy1KwKR2HUs6lj2Xn71OdWXPy7p42eWVvvP1uhZV7ZskLT82gktvvhY865moWOn3l72C7bjj4vHxebLKYVFIGJQd0zSTOeCAAAAABCu/lQ//AUdiFhOciBIMzfepcXjT2nx+FPNJQQineuUUYqTT1YTkhvXqVWv1f7qNZ23D80gZEb+9gsiEIldx6KOo97LrzynhVc/s/F+PRyF1U3vQgQiaErzPXFavZ2OG4QhAAAAAHKtec2Qlk9oJh+MI9dprRN1x4Reznrb1Im4D5MEuTS4eUDzb7ln3QXVJaNJ/7bnrOVzwuS51XUNw7qufodSSHH8SXpcEupyVEiytSDkNF/7haT7+OxtUcfoPq0LUhx/suxt8r7F1+Piavxx8bcp6z7B22s3qk6WvV2NG5X9lWfPHU4uBgAAAABhWruAOoFIdA3TOgjO0PZdWvi+f9yy1MGkddz9EtcJaOIL64QfiNR2Xav9uzgqpJODX3pAE48/EHELgYh53dYFKY4/WfYmECk3ApH4daLrTiUXAgAAAIAw9W38Mc1AJKEOgQgcGNm1W/Wb39OylEDEuHdpZDj+GNyHo0I6e+Dpj6n+rf/a+CHV/ULSfXz2znkg4mzcdRc6dq5h2ttmXE1xv5DUu6wIROLXab/PROXZ86rJhQAAAAAgPH3ti9IKRAw+yIcWiCCXxvfu09RVb2lZSiBi3Ls0Uhp/ujxabvTsIY4K6eDItz6pqSf//caFBCLx6xCIxPdOemAR5gAAIABJREFUKxDxOfmduL+JKsR+QBKBSKd1Nv48KImjQwAAAADkUl+mH/4IRJCS+298h2oXXN6ylECk1LKcfOoiEJm67AeTt6Gkjnzrky3XCFnH+rFLWsc2EPHVm0DEae/SBiIllWooEVLvnseNKY4OAQAAAJBHjSNDCEQ6rMPEcVHM336PRndd3LI0xUCkDYFI5gIPRIYHLtD47tuT+5fQQyufjw9CTvMVJlgFIj57W7ye0wxE2hCImPcmEPEu06O7suzdUyAyKClhAAYAAACA8KydJotApMM6TBwXweDmAdVvfo+qW7a23JJSIJLlxFcknteSgg5Epi77geS+JXT05JMa++IvZTspmLdAxGeQajXxnmIgYtObQKRcCETM66z9PF559rxacgEAAAAACMfGa4ZkeXqA4AMRFEH0BdWlUgQinCt+TUinJ4l5XKr92zRxMUeFtFp55XlNPP6All852VhAIGJep6yBiG1vV4FIklTftxCIxCIQMa+z9nOd02UBAAAAyJO+oD78eQ1EPK2D3Dlw6bWaufGHI24hECmVkCafIh6XsQvepMH+bcn9Smbi8Qe0eGJp40ICEfM6BCLd9XYRiGT5RQ7b36msQnpPnI9AZEhSPfnOAAAAABCG5jVDWpYWMhBxNfmEIjh01a2a2HNTxC1lDURKKqTJp5Zt4RRZ7e77yu9r/jv/s/FDUPuFwHoTiLjtXYZApLRCCyWy7G393DpQefa86eQ7AwAAAED21l0zpOUWApHu1kHuzOy7S6PVSyJucTQxl4RAJAwhTT41t2X07CGNnP265B4lcvTkkqa/8vsbFwa1X3AwYe6qtwmfgUgbApH4ukk1HNUhEOkgtFAiy97Wz63DlWfPm0i+MwAAAABkq+WaIS23Eoh0tw5yZXDzgBbedq+qm6NOReRgYi7Lia9IBCKxQpp8WpWmXsdRIeutvPK8xv7ulxX+fiGgQMRXkCpZjn0pBiK+eluNoQHtFwhEOggtlMiyt/Vza45ABAAAAEDo+tqWhPThL7SJLxTO4OYBLdxxr/3zPORAxNlkXhGFPfk0dv6+5LolMvXkb2vpxW81fwpsv0Ag0kXvlAIRn72T6ngNuAlE/Aptv5BlbwIRAAAAAMXUF94HsIQ+UXUIRNCDkV27Vb/lbgKR0glt7Gssm7j4di6cvs6D3/kr1b/xyZalge0XCES66E0gEr9OSnUIRDqw3S+4WCfMfVJXdQhEAAAAAASueWRIaB/AEvpE1SEQQQ/G9+7T1NW3lTcQKa3Qxr6Kxi7gqJDTVl55XlNP/HbjB5vTI2W6XyAQie9NIBK/Tkp1eK+zxkko4em1a9TbpK5tb4vnCYEIAAAAgICtO01WaJOCCX2i6hCIoAf33/gO1S7c6+55HvzEF8/zhnDGvmr/Nh3gFFlnTH/l99edHkt2k99p7RdsJ95TC2M8BiJWvQlE4tdJqQ7vddbkPhAJbOwjEAEAAAAQqJZrhoQzKRjZm0AEns3ffo9Gd11s9zy3nlCTwToEIn6FMfZxVMiaoyeXNPP1P2m/gUCkh96eAhGvFyT3FUT7Gr9bfyYQyY3gQ4ksexOIAAAAACiGvvAP0W9dQCACfwY3D6h+y92qbtlaokCkpAIc+8YuuCn5viUx9eXfaf7LYr9AINKhdwEDkUzDmCyDVEfrsF9YE3wokWVvAhEAAAAA+dc4MiT4D2CtC9IMY5gkKJszF1SXCESKLqCxr9q/XQcuuDH5fiVw5JsLWlj5/LolBCJuexOIOO0dyJFlPdWJ/L3LwOJ5HoVAJP52AhEAAAAAAek/86/VilRZ/wmrorZPXKva+NnI6D6t60Sw6d26TlQfZ72ZPC6bA5deq5l9d2nqbz4W8zxKeP61PV8N7hPFprdJHZP7lEUgYx+nyFozfewjZn/jNinuF5IYvXbVPk64eG75GjdMts967HNQJ8veVuOG6fa18Pbeq6xM/n4pvXZN69jcJ8uxr7FsrvLseVrd+e16dwUBwNzk7FxNUlXSqKTh5n9qLhuJuMsxSUvNfy9LWlz3/8XZyYPL3jYWAABkon/DT4FMChr3TnXii0CkbA5ddasWjz+l+hN/Yxk4iEAkLwIY+whDGo58c2Htoum+Jt5d7BecvXZlN6maxGcg0oZAJPL2qDoEIoHKWSCSaW/L5xWBCByYnJ0bljSR8WYkOT2ZrtnJgwvZbkqxTc7OVSWNqRF81BQddiQZav532oGWHsfUeEwXJM3PTh5csuhRCB5ef/XQ/p6Ofsf52cmDi71vjT/N0LDmqNzS7OTBuqNaiXKyH8jc7OTB6TT7Tc7OpdovMAuh7O9z8Dgsae0LCJl+4aC/bUkAk4Jd9Q7pm8AonJl9d2nx+NNaPP6U3fPcayDiYJ3SHvUU8XtnPPbVzrk6aaMLb+WV59ddK6SJQMRzb1dBapqBSNL2Zdg7r4EIRCDSTW8CEWRmWNLhrDfC1OTsnCStqHmUQfO/hdAmgPOkORE6psZkqE340a3TYckBSfc3w5F5NSbyg57w9mBYbl9/C1qbFAvFsHr/HccmZ+dqgR9VVJO7x/IhSXVHtUwMK0f7gQxNp9yv7I/JQtYb0JSrx6H5PukhNfYFp4/IXEijd7/Vh78omR6iTyACPwY3D2jhbfdq+MFf0fJLLwQWiLh8jZVROGNf7ZyrNdi/LXmTC67+zU9p+ZXn228gEPHcO2+BiM9x10HvPAYiZd0PtP1ZCETMexOIAIYGJe1v/ifpzNEGC2p8g3w+o+3KjXVHgEwpnQCkkyFJhyQdaj6OdQV4hAMyNaLG82Is4+0AgDw4/R5pXDoTkDwoz0dkNi6gHvct6Q1afo76/JN0n8h1LOpEfvZqXcdTb5TO4OYBLdxx79oCm+e57XM2qa6z11hZhTH2cYqshpmvf7z5L0ePS1r7BevXnIPnlrPeFnVsfyej3kl1fI67DnpHrpN0n6jeKe4Xysrk8W0T+Hvi1Hpbjj+NZVxUHWU2pMaH/j+anJ1bnpydq0/Ozo1mvVGhmZydG26e8mNJ0pyyD0JaDanxLdwneQzR4sDk7NxM1hsBADl1QNL9auxfFyZn5yZcN+hb+2cYk4I99SYQgScju3arfsvdawsIRAok+7GPU2S1XCtEkrMJSVf7BZu6Rn0IROzrEIh015sxP1bS4+vrtRtbO0lIvQlEgB4NqhGMPOLrA3/eTM7OVZsTyU+qETYMZrxJJtY/hsNZbwyCcIjXMwD0bL+kueaXR6abR4v2rG/jj9lPCvbcm0AEnozv3aepq29bW0Agkl8uJjYdjX3V/m0aOft1EcXKZXrpo/4mJF3sF7xNWkfVSS5DIBJze1QdApHu6pRVyIFI8L0JRABHTn/gX2xe4Lh01h0JcijbLbG2X2tHijiZsEGuzXHEEAA4MajGFySWXFwovi+kScFIQQUiKLv7b3yHahfuXVtQiEAkeZVCCmTsq51zTfT2lchDy19YOyqEQKS5Tpa9QwtEWnsn1Iiqk2VvApH8IBDpoTeBCODQiKRPTc7OzZdlQn1ydq42OTu3qPwcCZJkXI0Jm6msNwSZWyjL6xgAUjAo6fDk7NxSL18caRwZEvr5km16E4jAk/nb79HorovXFhQhECmrAMY+TpElzXz9TzYuIBBprpNl75ACEYMwwdu466i3dSDiYh32C/EsHt/gQ4ksexOIAI4dUGNCvZb1hvjU/IbnpxTeNUF6NSjp/uaps5gML69BEYgAgGtDanxxxOr6TGunySrihz9v54pHmQ1uHlD9lrtV3bJ1bSGBSH5lPPaVPQw59uIzmv/2X7ffQCDSXCfL3gQiTntbBSKuvsjBfiGeTQiew/fEBCJAXg2q8WF/OusNca15gfTTR4MU2X6VINRCRyOSuKA6ALh3qHl60a4C543XDCEQ6aI3yqztguoSgUieZTT2VTdzvZD575wOQlKckLR5jbUiEIlfh0CktzoEIhlwNW44ek+cJPjeBCKAB4cnZ+fqWW+EK83rKCyqeEeDxDkdanHarPIa5/EHAC9G1DgCz/gaTX1tSwhEYnp3vhnlc+DSazWz766NC50FIgn3MVqHia+uZDD2jZY8CJGkma+tP0VWihOSSXWyDBMi18myN4GI094EIoEKKBDxFaSm2runsYVABIg2XoRAZHJ2bkLSIyrGtUG6dX8RHkNYu39ydm4s640AgALqKhDpK835kjllFjw4dNWtmti7b+NCJ4EIE1/+ZT/2lf0UWUdPHNPSC99uWUogEllDSjEQcTT+WD8uSb19BiIp9Q4uEEkuU0iJwUDUnQhEzHv3NG4QiADRch2INIOQuay3I2O5fgzRs3o3314GABgblDRvcsqs5pEhJpOjKQYiSQhEEJCZfXdtvKC6RCCSG9mOfaM7y31kSP0bC41/ZDkhSSDSRe+0AhFHYYK3cddjIGLV21GdsiIQ8dybQATwIJen2yEI2YBApLwG1QhEuKA6ALg3JGkhaaV1p8kqyYc/m15AB4ObB7Twtns3XlBdIhDJjezGvtGzhxK2rdjmv/1XHW4lEImsIRGIdFzHok5IgYivo2pN66CpJO+JCUSAPLs/T98uJwiJRCBSXiOS5rPeCAAoqJHJ2bmZTiu0XDOkJB/+XEx8AesMbh7Qwh33tt9AIBKo7L8JXN28TUNbz43fxII79uIzWnrxmbUFXgNukzotCEQ69CYQcdqbQCR7oY0/qb4nTqt3z4FI7r4FD6TA6FQQWZucnauJICTOeNKEDQprP489AHhzqPn+I1JfaU8PQCACx0Z27Vb9lrvbb7A6NUrrAp8TXyV9rmc89pX94unz3/5rRxPmUet4mngnEOmtDoGIeR0CkfRlOf54e+2G1runceP+yrPn1ZMLAKUyJCnooLB59Eoo34A/Jumhdf8dzXZzzjjUPHIG5cNjDwD+1ONu6JfU+KBRWf/pqKINn5ZWFfFZuXWd1hqGdRJ7R9VNquHodzDpDawzvnefFpef1swXP73xBpvnedtztuU+cfdrldS7zDIc+8p+8fT5Z/668Q+jcTetx8XgNeZsn+Totdv6O6Ta26KO0X1kMfYZ/G1Mxr40e9uMP74eFwKRhizHH2+v3dB69zRujFeePU+rO7890bkAYOyIpCUHdaqSRpv/H3FQrxuHJ2fn6rOTB5dS7puoedRKXY1rJKTtQUmLapw3fHF28uByp5Wb3x4dbf43pvS3eWZydm5xdvLgYsp9kb05HvuuLEm6L6VeNUn7HdZztc8puiPqMIkdoKWsN8CTY3L3ONSa/x9VuvvXocnZuanZyYNtR+H1x98nxUAksTeBCPLj/hvfocXjT2nhm09svIFAJCfSGfuGt57X+6bm2MLyF9Z+IBDpok4RAxFPYYJJHWfjrqMwJs1ABE2u3ssSiHitQyACP+qzkwcXXBddN7E+oXTCkelmr9BMK91w6EE1HtOuj0RpPg8WTv/cPKJlSukFI4NqTDrl5jowcGphcnZuOCm0g9QMfqfT6DU5Ozctt2GIl31OAS3xdwrC0uzkwWnXRSdn54bVCEfGJB1wXT/CtKS2MGTtmiFlPT2ASR2T3sA687ffo9FdF7ffkHhqlIjnWttzNmodm9cHz2tJmY19ZQ5DHlofhJzm5JRKUevY1DF4jWV52pjI7cuyt0WdtE43ZVLH2bjrqLfJ89zF48J7m3UCGn+yfE+cau+exo1xTpmFkM1OHlyYnTw4Mzt5cFTSHjW+5erTWGjXDmkGQodSandE0p7ZyYNjNkFIlNnJg4uzkwcnJA2r8S30FRd1EyRe8BWFNahGIBLU6xgAXJudPLg0O3mwPjt5cEzSLvnfxw5GnY5w4wXUy/rhz9XEF9A0uHlA9VvuVnXL1vYbCUTCk8HYt/+cq8y2rYAWosIQKeVApLV3Qo2oOtb7JBfrEIg4rUMgglQDkRapvifOsjeBCMqn+aF/QtIN8neNikEFdGTIutNj+fagGiHIhK/ThM1OHlxufjN2WOmcmudQ86gUlM+IIr69DABF1bKPfcBjq7brq/XxbbiY2017ATFGdu3W/O3vM1w7y0AEklId+6r927rYsOJZOP638TemFog4eo1lGSZYByK+eluMLQQi8b0JRDIQ0PhTyCPLHK1DIIIcal4PoCZ/R4lMeKprY0qNi7v7siLpnc0jQZY89jlj3YSNz1DrNCbEy2t8cnaubdIOAIqsuY+dknTQU4uR5um5zmgeGUIgEnm7aS8gxv4L9mpm313tN9g+z3nO+pXS2De683VdblixxB4ZchqBSI91suxtMfGeZiDSJsVAxKZ3WoFIWXk71Z5JnbIGIo7GHwIR5FDzw/6E/AQibR/0s9DcBp+TuUcl1VydDqtbKYRakrQ/6pQeKI37J2fnxrLeCABI2+zkwbr8BSIbxtV1p8lKMxBpQSCCAjt01a2a2Luv/YYsAxGe0/FSGPvKfGTI0RPHep34WodAJL5Olr0DDkRsX7tZ9nYViCAagUggvQlEUCpT8nN0QQgTqNPyd8Hx00HIoqf6RjyHWqdNe6yN8NU5XRqAMmoGIvd5KB0Xhkjl+PAXtU5CH9M6QIy5W+42vKC6RCASAM9j3+jOyyw3LP8Wn1tq/INAxLyudZ0sexOIOO3tIhBhzI9HIBJIbwIRlMPs5MFl+Tl6ItPJ0+ZRIeOeyp8OQpY91e+a50BkiKNDSm1QjUCEC6oDKJ3maSmPOS67f/0Pfe238+Evdh2gBwtvu9fwguoSgYhnkWNW6zr+xr7q5vIeGbJ4Yt0+LdVAJKEugYiH3gQiTnsTiPjlNRBp7ZWz98QEIoBzs5MHFyQ95LhszXG9bvk6PVZwQchpngORaU91kQ8jkjI5HRwABGDadcHJ2bna6X/38W24Dr0JRODQ4OYBLdxBIBIM6yPLeh/7ynzNkMUTSxsXpBaIpDjxHlogElJvkz4EIvG9CUQcS+txcfQ8JxCJX4dABPnk+kLZPi9a3lHzG+wTHkqvSBoLMQg5rRmI+Djt2dD6iRuU0v7J2TnX4wQABK95uqwVx2WHT/+jcWQIgUh8bwIRODSya7dmbnxH9I0+AxFEyzAQKavF5461LyQQMa9rU8fnRbddTLz7DETapBiI+OpNIOJW22s3aqWAxh8Ckfh1CESQMz4uAp7hdQbG5OdaIROzkweXPNR1bUzuJ20kPwET8uUQp0wDUFKu3ycNn/7H2mmyOD1AfG8ml+HQ+N59mrr6tugbfQUiTHzF8xqIRNfZf85VBisX0/Irz8vDxNc6BCKRdcoaiPgMM7PsbTP+sF+IRyASaG8CEZTCQ47rZXWNgQkPNR/0ERj50Axspj2UHue6EZA0xwXVAZTQguN6Z8bRjdcM4cNffG8CETh0/43v0Nilb4i+kUAkBY4ma52MfeXx0PLfrfuJQKS73gQikXUlApG4Oq7eM5WFs0CktW5Cjcg6gb8nJhABXFp0XC/1ifPmhdP3J61nwdc1SLyYnTw4Iz+nyxrzUBP5s0AwBqBklhzXOzOG9vFtuC56Aw7V33y3RnddHH0jgYh/TiatJauxr6SWXz7ZssRnINJ6n9YFHgORxLom6xCIGNeVCETi6hCIdMfJe2JHQar1e2IX64TWm0AEheb6WhhZfHu85qHmfTk5PVYrHwEOYQikxmnoCEQAlInrL4yc0bxmCIGIcW/AkcHNA6rfcnf0BdUlApE0ZBCI1M4t7ymyFk8cc3f0TOJjl+KEpNHrMsVJwTYpBiKJvQlEnPcmEOmBwXMtd4GIz/Eny94Wz9GNgUiuvmEO5IyPyfq6h5rezU4eXJD7o0Nqjushv0YkcUF1AKUwO3nQ9RdGzlh3zRACEePegCMju3Zr/vb3xa/gbBKLia9YHCGSPgKReC4mBW0n3lPr7TEQsert6v1Plr0dBCKlRSCSn94W48/asvsrz57Ht6sBP2qO6x3J6VEhp7merB6cnJ2rOa6J/BqfnJ0j4AeAHrRcM8TThEARTg8AeLL/gr2a2XdX/Ao2k4vOJvNKwlkg0rpO64Jy/80Xn1ta+4FAJB6BSPw6Sdvn9YLkvsbdlN57EYh0QCCSn949BSL1yrPnDSdvCABTzYs6Dzoum4uLpncwL2nFcc2a43rIt/snZ+cI+AEUWvOaZF70tS3hw198HcCTQ1fdqom9++JXIBDxz0kgkjxmVTdv72qzimT5lec3LiAQiUcgEr8OgUhMHdsvkbAfaLANRBLuU9T3xPkMRAaV01PvoNBcn//f2/m1Y9Qc11uZnTyY6zCkeVqPBcdls7gWDMJWb4aRAFBUw74K9zc+ZLR8olmtSJV1y1YV8Vmk5X6t94ms21rHoLdJHaP7tK4TwaQO4MncLXdr8fjTWjz+VPQKkc/hhNehyWu3tEzGPkfjxrrHYXTnZXabWwgxE2pd7xcMpLlPapO0f4xZ1srFvs1o3FD7Q5Nab5u/g8H2Wb1vcVQny95W75lKLHLivdv3xI7ey7oaf7J8T5xmb5vxp7Fsf+XZ8yZWd3673nkjgNS4nsz0dn7tGMOO6+U6CFlnXtIBh/WY9M6nI5LGPdUeVCMQqfk8rz6QgYmATw04NTt5MO0vHZSZ633f0ul/9Df+RyDSVR3Ak4W33avhB39Fyy+9EL0CgYhj2QQiZdU4TZar/YKSb09rn2Q7+Z3WPslnIOKkN4GI29+BQKQrNu8fQwpEbF+7LsafLHubiB83psURIgjA5OxcVdJ+x2XTnhR1PVGx4LheVhYc1xtyXA/pqKsx+XbYU/0RNYK3mqf6QBaGFO6Y5/poTnRWc1xv6fQ/1p0mK2KWjlNmxdfBBg89/ZUN/x074fo0qeUwuHlAC3fcq+qWrfErWZ02KGolntcNJmOfo3Gj5HOPa6fJcrVfMLg9rX2S1f4xZlnXvW1qRNXJsrdtnaS6JutY/m1aFeKUWSVl8/7R13tZV+NPWu+JM+1tOW6sVoYqz543kXxnwDvn5/zP4Burw47rFeIbt80LwDv9QMwpkfJpdvLgtBpHiPiyf3J2ru6xPgCkrvmFkZrjskun/9G/cbnNt+EiFPL0AFhv5aVTml96TDOf/2stfuebavsbV6Thswc1NnSVpq57k4Z2uL6uXnGN7NqtmRvfoYn/8R/iV3LyTdbG/aqbOwQvRRU5+ZTiESKQu/2Ckm8vwxEi1vs1g98htd4WdbwdXWFSx37c7b13BI4Q6Q1HiMQLurfl+LNamRZHhyB7E47rHXVcz4TTb+8W7PQji3J75A/fSM6vKTWOohrxVH98cnZuYXbyYN1TfQBI25gapwN06cx7jH4+/HXAJEGkI499TlN/+V+1/PL6Uzm1Py5Lz61o5vN/pZnP/5WmrvseTd/4Fg1uOSvtzc2l8b37tLj8tGa++On4lRwFIrULLu9xa3PKamLTUSBSVt72C0l9fPYmEFl/+/BZF2p06+Ua3db4r7pph6qbdmhk297O25WBlVdPavGFxyVJCycXtfTSN7Rw8jNaeukb69YKORBx9N6LI0TWWH0JRyV9TxxSb6uxb6iycv7Y6uAzRbk+AXJmcnZuTO5PkZX3ICGLMMcnwhBIkmYnDy43X/OLcj+5d9rc5OzcYsECRQAl1DwqZNp13fXjY+PIEAKReAQiZ6y8dEoTCx/X/NJjjQWJkztr68x8/q+08PQx1fffpZFzLvC/sQVw/43v0NKJ45r/2t/Gr9Tja7e6eatGqhc72uIcIhBJn6v9Qtd9fPYudyAytut7NVb9XtV2jmhoS37G98FN27V/R+OME6f/L0nHXvqG5p/9tOrHP9EMS0oQiCQedlIiNq+xNN8Tt0nxPXGWvf2MfWMqzsWakSPND/l1D6UXPNSM5eECt0W7CLTr32dUjFm5NTt5cKn5mnnEY5uFydm50eZp2gAgr2bk/roxD63/Ye2aITbn9237zGFwn8h1HNSJ+vzj7ZzF5bPy0inVPvZ7a0GIFPN3iX9cFr/zTdX+5MM6+t1vednGIqq/+W6N7koIK3p47U7sucl62wrDZvyxGjcYR85wsV+wHbu99TbYJ5nUsdrfOPrbGP0ODcNnXaiZ1/2Ylm/8Q/3RFYc1ft6duQpCOhnacpEOnfduPXLlb2vx9b+jiV0/qOS/jc17poj7WT0urp7nOCPxPaen97ImdWxfuy7eE2fZO1LPY5/z6zUASZpByIL8fDt8wUNN2CtauIMeNb+VfNBji0FJ881xBgByZ3J2bkLSuIfSG75M0LfhJgKReCUPRMb+7A+1+J1vqdcP5csvvaixP/8PWnnplOtNLKTBzQOq33J35wuqS1bP8+rmrZq+7u29bWBREIikj0Akvo6TCUk/gcjo1ss1f+VhPfnGIzp04ZgGN21P7pNjIwNXaO6yf6Glqz+q2o4bNt5IIFJsBCLRgu/d1dg3WFk5v5Z8B8CNydm5YTUCCx/XDThagG+DF+30PkX7feBA87oeRzy2GFHjW9UAkCuTs3PTkuY8le8Qhkh2k3dpBiJtsvxGWjk88LmHtfDUV9Yt6e1D+dJzK6p9/MOuNq/wRnbt1vzt9ySv2OXzfPq6OzW4eaC3jcstR+MPQWpvCETi6wQWiFQ3bVd978/okev+Xx2ovjm5bsEMbblIn9r7Ac0P/7Kqm3as3ZBqINJa16I3gUh3CESiBd+7q7Gvlrwy0LvmNx0X5e8CykWY/ORICpTC7OTBCbWcssWx8eakIgAEb3J2bnhydm5B0mFPLR5q/cJIexgi8eEPZ6y8dErTD3/a+eOy+J1v6uBf/ImDLSyH/RfsUf2W9ySvaPg8n9hzkw69/i1Oti2/HI0/BCJdSHO/kNTHZ+9iBSJTF41pafSIxs97W3Ktgjuw8zYtXf0HG48SSS0QSfO9V0lY/d68J85Hb+OxbzRpNcDW5OxcdXJ2bmJydm5JjW86+rpw8oqKcS0JTu2DMhmTdNRj/cPNi7YDQJCaIUhd0pOS9nts1faFkf7YVVcrCvYCklG929ZprWHaO6p2edUf/ZyWY0+MYwOAAAAgAElEQVRp1dvjUn/ss6rtHtL4ldc7294iG997oxaPP6WZRz/decWE5/nE3ps0d7NBsFIKjsYfk3GDsaXJcr+QVMf2MfDW22Cf5OK5ZdTb7m9T3bRD9cv/iQ7sKt+RIJ0MbtquT+39gH76qf9HM9/+aGOhzfsfq+eExZhlWqesfL3GvD0uKb4nTpLl+3F3Yx+Tr3CqeYHkUTWOOqrJXwCy3szs5MEiHFVRtHCylvUGIFyzkweXm0eMLcjfOFGfnJ2rNa9VAgCZW/c+aUL+jpZd79js5MG2L4zEhyESgQhUf/Rzaz/YTuZ1eFwmHvqYhncMav/u1zna4mK7f987NLrrYk195mNafumF+BVjnufT19+pw9fd6XszcyblQASy2i9Yjz8tbAIRD2NfT79DKw+ByOi2vZp//fs1dFYxLoruw/0X/5RGt16hia/+UmMBgUh+hRyI+Bx/bN7ntwo+jEn8HfZ31xQFMzM5O+cqRBhVOsFHqxUV4xRZQOn8/+3de3Ac53nv+QcwdaFoGZBIiZFsiZAjyXJsibByEjt21hyvnGRzciGUPWcvrtQKSLJJ1RYcQfHZk2ydnBWYU7u5VGyBMXJqa493Ae5xnK09sgWuJF90sQeWLFnWJQNKlmSKsga0JYribUa8g9TO/jFDAuh5p9933nnf7re7v58ql4We7udpcAZvz7y/6e7p8bFKKxC5z1OLczdUH85JYAogOUMOLrc3KMtfdBgSkU091rMxoVoYH4aIEIgUWH3ptFQOHlj97+fhQ/nIw/dK5Xd+Xza9O43PD9lzx/tvldLG98vk8w/L7I+f7bziiuehdOX7Zernf1s2D16V0F5mTYKBiOqSIIVEIGJcx9mEpFmd4XXXSfnn/jr3N0d34Y7Lfl1EhEAkDwhEuqirqxFab97To6MkvpHo22Rak5zT42Pl8ekZlyWHXBYLgOszz/h2fw5Nj4/NjU/P3CUi93hqsUmal9EreaoPIJ82ib97eCRlXnVWiIhIv903lSPb+Lxesk3vtnUUq7i4ZnHOVQ6+1fwPJ9c6V63T/L/a0ikZefheqXe8HBeiNq0blJmP/Uupbv1Tmfr535LSxvfL4IVrzz8+eOHaZmDy4V+R6m//mXzntj8iCInyNf4UfNyI5eK4YD3+6Pr47O2gju3v1OW/zfC69xOEdOmOy35dJjasuPSgzevcZJ7W6H2LRW8C2mW6vzPbv7FUxz4H74mdjT9p9uZ1jlyanx4fy9NZIWl8Y9Qn15f94pv9OdX6O97hscWW1nX5AaAo6tK8FJdS88wQvg3Xef/Q5OSbrKp1mosqh/bL6Pz9ct+v/AuHO51/m9ZdJnd+4BNy5wc+kfauZJOv8YdvoXZmclxo4+q4EN0Xk+cuwWNSymeINIOQvyIIsXDP1Z+V6tI+mXv7seYCJ2eIWLxnsq5TVBYT5EV9T8wZIkBoYj/kJ2hRHIYYrfsblF3VS5nrMKTquB7CMiHN14yvM9buGJ+eKU+Pj816qg8AIZmYHh+rdnpw+TJZBCJd1C0oz4HI3OJuuev7j8g9H/u0w50GNAhEEjO09gqpnjygPy74ChNUjC9tllQgotk/T5OCBCG9m73m38jQy/9Cau8cay4gEMmIBCfeUw2DLcYfAhEgZKNxH/ITVBW3Z3QMS/OG0pk2Pj0zJI7vIRPI8w1PWjdUL0nzb8rX9cNnxqdnuNwaQjcv4R4HqmnvAIzs0AW/q+8ZQiDSuS6aPAciUy/8QIbXb5Q7brjZ4U4DGgQiiRi6eEMzDBEJOxDx2ltXx2TC3O2k4OCadTL7s39CENKjgXetk7mhv5TSq59dXkggkhEBBSJpjj+uwoTgwxhe98i8sU7XwE5BWUS2OKxXknzcEH7Ecb0Fx/UQoBWBSFn8BSJlad5DBAhVeXp8bDLtnUBm7ZgeHxvVrdTftoTrJXdRtwgMnifHz8vEkw/LwuG3DPcPsJHg+BNZVj74I93OFYfuuGA7ntuM323jms/eujom467F76Ts3SdTm/5INl9ynb4etLasG5aR9/xnqxeaPL9RLt4zWdcpKn9/Y+3b2fROaPyx/Z2igu99/udFfUEgKNsCu8xN1XG9kuN6aSk5rse3+QtienysIs1LZvkyICJ3eKwPAGkxCkJERPqNPpRH+QxEtHVN1vEUiBRWsoFIbemUlB74MjdUh2cJjj9MNoqIyNDFV7QvJBDpUCeZQGTk8o/JHVfcpq8DY1NX/3H7QpvXeZKBSFFZjT/RGgQiHQXfu0+Eyx0gW8YC/Las60n6gfHpGddnVSRqfHpmUES2Oi5LGFIgrcBze9r7AQAZYhyEiJw/M4QPf50xadCUQiDy4Je72D/ARoLjD4GIDK29wvDfgUBE+biqTg/H68E162Rq6A/126Mrmy78GRm97J+3PxB0IML4tIz3xObb5CIQYYIRWVAXkdsDOyNERM5/i73uuOyo43pJG/VQs+yhJgI2PT42ISI7094PAMiAu7oJQkRWXSaLD3/G2xSWz0AkWlekcmi/jH33AdOdAywlG4jUzpzsYt/yZfCCS5r/4flSe93Xkfh1Eu2tqaGqY3m8nrhqRDZddKV+W3RtcuOYWIUSnCGSPF/jhm2dVMe+6M+FCEQIQxC6BREZDugeISqu921r6wbkWeX6Ekf1VuiE4hkV7hcDAJ0sishHpsfHur7XWOSeIQQixtsUhdEEi4vnRf0amd29S7a/8HT8PgLdSnH8qdR/Gr9vOTZ86ablHwhE1I8r67gPRAbXrJOJq35bvw2sbLrwZ2R47Q1CIJIRaQYiqY59Bq8Rr6FEEL3L+gJAKurSvD/I8PT4WDXtndEoe6g56aGmd+PTM6Miskm3XpdCDsLg0fT4WE2agYjrs68AIMvOvUcasv2yQD/XS+5Qh0vaLEs5EJn4/sOyc3F3/D4C3QrpXhUFMXTxhtULgpoUVMhxIDJx1VYZeNc6/fqwNrHhX7b+y9HZAAQifhGIdK7jLZRIvfdC47L9Vf3GQOJ2SPNskMm0d8SQj8n6O8anZ4Y91PVt0kNNwpACa030Zfo+OgDgkJP3SP3qxQkGIlbbEIgkLuVAZHT+AVk4/Fb8PgI9S2b8qRf0Ulmb1m6QsCcFFXIaiHBWiH+ldSvncBy9Pl0FImhJaNwwqUMgkkZvJhgRkro0P+BfNz0+NpqBs0HOa3173ce9Dbq+7EWaxqdnJsX9WSH1wC+RhgRMj4+VRWQs7f0AgBQtisP3SM0wpLAf/hQIRDpLMRCpnT4lo/P3S33ptGYngS6kNP5U3v6Jft9yavjSa9sXBn9cCGhC0kEgMnL5xzgrJAHLl8o6J6BARNm7qJIMRDTrEIgk3XtWvwHg3YKI3CUiQ1kLQSJ8TNhvGZ+ecX3/DS9aZ7Hc7aE0QQhERGR6fGxWmoEpABTRJmleNtCJ5TNDChuI2H4AKyhngUj3dSsH98vIw/caFAO6ENrEe84Nrb1C/AWpqnUMdirRQETX238gMnrlbQY7BhdK6z4SWUIgEqakApHQx75CBSI7G5e9WdWvDDhXl+ZZFHdJ8xuOw9PjY1OtsysyqzVR6+O+BveEfrms8emZQfEXWmTq7Bj4NT0+NircUB1Acd3t6j3B6stkEYh0rsOkwTInH+4tJm5EpPzGotz1/Uc0Owh0KeHxp3ywuPfAWT4zJM1JQZPxR8FJIGI39rkMREoDNyuXw72hC3/GMpQgEEleEQIRR+NPPgIRJhiRhAURmReRbdK8xM1HpsfHBqfHx0ZaAUg11b1zz9ffVbkVOIRqTtxfHktEZN72xrDItZI0LxcDAEU06+I9wRpp9In0rfik0RDFZ5E+WfVpJLqNinIdTR3r3tF1bOpEHu9YByJi+O+ne34NtlGsM/X8D2R4/Ua54wYm9NALF+OGZZ0CDyylyz8o8up9rZ9sxg3FdlbPi8n4o9C2f756mxyTTP79Vv9cGrhZBt51iSAZwxdf3+ERR+OPi9cWgcgKro4LEU7eM5n2Tmj8sXmfr5JO7/nG5fvK8TuGgrhLRJxPNreu719EUyIyISIDjusOSDMQKYV2Bs349MysiGzxVH7SU11k2PT4WG18emZERMri/m8NAM6Znx4fK/VapHU/LZeXkdwszeNjT5fRXCMiDj+ARVhNLNn2NvkAq9s/ApGupBiIjJbvl+H1G2Xz5Vda7jwgkmwgsqx8cLfc/YHf6H53c2D40ugX50KfFFTIcCBSes+HFb8QfBl817ub/+Htixyq7RSviTYEIk2qgZpApPM6kTrZDURG43cIBVIpcHDhXGuSdkr83DtjszQDkZEQzqhpfSt1SkTu8NRintcmOpkeH6u07qczk/a+AECc6fGxyVaAu9lh2TvHp2fmejlOrrhnSOTTlvKzQ3Qdg5Qgj5cHKIyknl+756V0/5e5oTocSHH8KaCBNWtl6OIrIktDPy4oZPSSWcPr3t++LrzZvHbFmSHeLvWp2s7i9VlUPp8Xba/Qxz6D11r2Lpm1rXH5vqp+hwBYmhI/9w4RaU6kVManZ0qe6htpBSFl8ReEiHBWCDRa9+nZlvZ+AICBUQ81e7pcVuSeIXz467hOUbl6ftu2iS7o/nmpLZ2S0gMEInAh2fGnyPcMEWldKivR40K0rqaGcZ2kersLRIYu4my6VBGIhCm3gUi0rqaGso5tKOFiHeeByHzj8n2T+h0BYKt1GatJjy0GROQ7rctuJK717daquP2GaxRnhcDI9PjYpIjsTHs/ACBO6/5Xdzkuu0lEZm037m9bQiDSeZ2icvH82kzcGNStHNovE08+rN8/YBWfE19m48/iicMd9y7vSpff1PyPxI4LrsYfBW0g4mfsM64TsXndddp14JqLccOwDoGIvVwGIgmOPza/k4q/MKYuIiP6FQH0anp8bEqaN4/36e7x6ZnEzhIZn54ZGp+emROR+8TvfRrqwqX80J1R8f/3BgA9ab03mHdcdmvrSwpd60/2G2kEIpkVcCAyu3uXbHvuMf3+ASt5nfjSjz/VE4fi9i7XSpfdtPxD5iYFFUIOREz2HwkgEAmS1VkGqkIhvycuaiCy6ue6iJQal+8L6sbLQM6NJtBjszTPEin7CkVaIcisiLwmIlt99IiYDOGeKMiO1tlYI+Lv8nQA4MqouB+rZsenZ4a63ah1ZkheA5FoXU0NZZ2CThCoBByITD77mOxcLPalh2Ah0Ymv1T9W3v6pfpuc2rR2gwyt3bC8IHOTggoEItBKMBBxsk1BGF3uLuvviQsdiDSDkPVvVPRNAbjSuiTGtoTabZFmKFIdn56ZsJkUWWl8emZwfHpmdHx6pizNEMTnvUFWmm99cxboSitAK6W8GwAQqzVWTTguOyAWl8tas/yffdL2qaLRJ9K3YllDFJ9FIttFt1FpW8dXb1XdaB2D3gQiy1w8v6oa1s/L8s+j5Qek/Ju/K5vXc018dEH5mo6+ZsX5+FPkM0NEREau/HmZWvzW8oLMHRcU2vbP5zGpyzqNPikNfih+/5EAk/dMDsYfV+/XikL7tyti9rxo6hqtE/rYZ1DH5ndS6b13XaSv1Fj/OkEIkILp8bHJ1hkbWxJquUlE7hGRe8anZxaleZPzSut/VdUZF62brw6LyFDr/0vi934gnXApP/RkenysMj49MyYiM2nvC9CjUlr3hepF6x4+0JgeH5ttXdrK5dmWW8anZya6+ULBmtU/EojE1ykiyw+wujoeApHa0ikZefg/SeV3/kAGLryoy/1Doai+TZpwIFKpF/fMEJHmfUNWhSEiDo8LEUkGIon17r5O7cyJLnYc/hCIBMlJIOJz0j+ksU+xjlVvr4FI64wQghAgZSPSDCM2Jdx3kzTP6Ljj3ILx6aDniEdalzsCrLUmGUuS3NlMgA9bJLkQ3aXJtHcgQ0ZFpCpu78F1z/j0TLl1ZqpWf7qXrUqqt6qupoayTlFZ/NsYXWbC1fOy/HP1aF1GHro3ft8AEcXYYvKaVRWyG3/KB4t9WbetV94qg2suaX/AyXGhu3GjtzoGjyd5yZo2y+tUjr9msD6cs37P5GD8cfV+rSicHBcs309mbuwzeK0lecms1erS4IwQIATcz8DI2PT4WDntnUA+TI+PjYr7mxQDgDOt9wajHkrPmq7YvGcIgYh578LKTiBS3rcoY/MPxO8bIJJ6ILJQ8LNDRjb+vPqBzE0KGjye5oRkYc9sDEjogQiWEYjY10kzEFnu3TwjZMNPCUKAQLS+pVlKez8CtW16fGw27Z1A7oyIyGLaOwEAnUyPj82JyHbHZTePT88YXSqr//x/OQslNNsYreOrN4FIb7ITiMzu3iU7dj8fv2+AiMNARFNX8Rou+qWyRq68tfODmZsUNHicQKTYvAYi0V68JnpCIGJfJ91AhCAECFQrEBlLez8Cs4NrzMMHzsgCkBGT4j64vbN1ucBY/at+SuwDmELmPvwVhIsPsCkFIqPz98v8vr3x+waIJDjxtfrnoochHS+VdU7WjwsBBiLz9R+qHkBSvAUitl8iKeh7GxNGx4XoNtEFRXlPHEQgQhACBK51BsSYMEEr0gxCRtPeCeRXK4AcTXs/AKATn5fLGp+eGYxbob9tCYFI53WKyuo69boaijq2gUhM3ZGH7pXFY7zfhoEUApGihyEiMZfKOsdm/AnpuBBYIFI7e7x9ITyzCCUIRMKgPS54/IJN5sa+VAORZhByBUEIELpWIFKSYgciYwQhSELrMjR3pb0fANBJ655Z2xyX3SSa+4e0hyEiBCJx6xSVdtLN5rk1rKN7XmLq1pZOychD90p96bR+/4CEA5Gi30RdRGRi06/pV7IZf5I6LtiOfSlNSHIT9bQQiATJ5u83pEAkuLEvwUBkGUEIkDEr7iGykPKuJK0uIrdzjxAkaXp8bEpEdqS9HwDQSeuSka7fE2wdn54Z6fSgOgwRIRCJW6eoMhqIVA7tl9H5+/X7BogkHojMH3yli53Ln82XXiNDF1+hXzFzk4K6Pj57d359lusvqPcPCQg9ECkoApGYdTR10gxEmo+3gpCfEIQAGbMiENmZ8q4kZUFESq1v6gNJm5DihY8AsmVU3J812vFyWZ3DEJEET9FPszeBSFcyGojMVXfLtuce0+8bIGIYiES3iS4wG384O0Rk8vqRnE4K6vr47K2ekCzXX5D62ROd9xGeuQpEIghEekMgErOOpk56gUhdGn0EIUCGTY+P1abHx0Yk//cR2S7NIITxCqloXZe/JPn+OwOQYa1j5KTjsgMiovwSQnwYIpLgB7A0exOIdCWjgcjks4/Jjt3P6/cNBRDOxFe54GeGiDTvGzJ4wSXdXhqlJaDjQkYCkbnDT3XePyTARSDi6HVOILLMZvwhEOnc228g0jwj5Mq9TCwCOdC6bNSwiMynvCuuLYrIp6bHxyZak9FAalYEIgAQpNZl/Vy/F9gyPj0zEV3YH9YHsDR7m9RBZwkGIlbbNJdNPPmwLBx6y6Amci+QbwIThogMrFkro+/95eYPZpdGiUjwuGDTW9vHZ+/2Ccm5Q4QhibKdKCYQSZ7N+JNkINIm9LHPSyBCEALk0PT4WHV6fKwkIrdLM0TIsrqIbJseHxtq3RgWCELrm9djae8HAMQYFfdnsU2OT88Mr1zQPDMkqFAizd4EIsZcBRk2dXq4znpt6ZSUHvgyN1RHUyCBSNHvGyISuZF6yIGIs8saJdl79bK5g09xqaykEYgEyuJ9aZqBSCbHPkeBSBNBCJBz0+Njc9PjY0PSnLDNWihSF5FtIjLUuhksEJzWmVjb094PAFCZHh+rSjMQcWlARGZXLli+TFZQoUSavQlEztP93hkPRAARCSIQmdvH/ew2rV2/fHaISE4nBXV9fPZevWzqjfs1OwfnQg9ECotApPN2AQUijT6CEKBApsfHZjMUiqwKQbgkFkI3PT42ISI7094PAFCZHh+bE/dj1Obx6ZnJcz+svmdIUKfop9mbQOQ8Xx/KXdTp4UN55dB+GZt/QL9fKIaUrxXPpbKaJq+/ffWCXE4K6vr47L28bOr1+zk7JA3WgYiuDoFIbwhEOm8XRCBCEAIU1IpQ5FMiskPCugH0vIiMTY+PDRKCIINGRYRv5AEI1ai4P+bfPT49UxJR3UA9qA9gafZmguC8nAYis7t3yfYXntbvF4ohxYmvSu11WTxxOL5/AbSdHWIik5OCuj4+ezeX1c4e5+yQpGjPLBPRP78pTrwXhotQXLUsh++Jkw1EmkHIxkWCEKDApsfHytPjY6MiMiTNs0XSCkZ2ishdInLd9PhYqXXJISBzWuHdqIQVMAKAiJwfo0Y8lJ4dn54ZXNP8YBL5NNLoE+mL+Wqi8vFIHdU6DYl8Dgq9t2IdqNk+L0Z1NOu0Pbemvftk4smHZXj9Rtly1bXxPZFDjsYfk3HDYPwpH3xF7rj2oyY7nmuT198us68/vrzAetxwdFxoE60brWHYO8pkHWe9m+tMvX6/TFz9WzKw5hJNX/Ss7bhl8poVN+9brF7nBaGc9Hfwt5vU85LJsc+gzvJ2BCGIqkjzDAGX9ZAhrcmR2db/pHVD1FLrf8Misslhu7o0XyNlESlzM/RC/P0V4Xc8b3p8rNL6GxrqoUyez4ialebfvytBvx565PLvBvZcPg+p/21Pj4+Vx6dnPiIig65r98lffKX1iUTxIUj3AVD5eEO/TtuHp9B7N6R0zdXynf/6N+P3KWfmX/+plO67d3mBdqKu0zoGz4u2jsHzpPwSpb734IUXSfk3f1c2r79Sv1/IhW0vfksmf/it1k+Oxh+j12x0wfI6I1fdIvd97A/j+xbEtj07ZXLPfasX+hx/dMcFo7qqHXIw9nnt3ZDRjf+5zNz4Wf1+wVrfc7et+MHF8+t+/Jnc+Hty95W/p9iXfPvUT/9Qyief0f/72Y4/PT4vPfUOfuzT1OlrtIKQap4nDgB40LoExqA0wxGRZlCiU5HmxE+19b8Kl70CACCf1iz/Z+hnaaTZu6iXkFBc8sDXN7S1dQyeJ8tvKdaWTsvo/P1S/s3flYELL4rfL+RQGGeIzO3bJfUzJ2XggrXd7HwuTQz9qkwtPiS1M8eXF6Z5hojtt5tdjH1ee/fJ7P5vy8j6j8rW9b8Yv19ww+j5jW4jlu9bLN7/FJXu3y/NM0RyO/bF1qlLo6/U+JnXCEIAdG3FGRxzae4HAAAIU+SeIRaT/j6vWZxmb66h3WR0rXPNNiJi9Lxo6xg8T8r5An3vyqG3ZOShe9uWI6dc3CPIw7Xi5/bt6n4/cmhgzVqZuukz4mbcELM6uuOC7fXvXfwOXnv3yejuv+Nm6knSPr+u3rd4eu+VV9r7ZFiOPy6el9yOfco6zTNCCEIAAAAAeNDv7cOftw9gCfXGsoIEIuV9e+WuJx/R7xPyIcCJr7k3FvQ9C+KO935CSpffJEEdF3IaiNTOnpDSrj/X7xPcIRDJiASPC756Bz/2rVpWlwZBCAAAAAB/mmeGEIjY9y6KggQiUy88LTt2P6/fJ+RDYIHIuUtloWnqg59p/VeK409BApHK8aqM7f6ifp/gDoFIeLy9b1EtS2jcsK2T/NjXPCPkKoIQAAAAAP4sXyaLQMS+d1EUJBAZnb9fFg69pd8n5EOAgQiaNl96jUxeP9L6KaHxx+3lXizqSPw6HnvP7v82gUjSggpEICLFDURSHfv6CEIAAAAAJGL1PUMIROx7F0UhApE+KT3wZakvndbvE/IhoEBkdvEpfa8Cufv6rTL8nmtbPxVhUlAhsUCkj0AkBAQi6SMQ6bJ3T3UIQgAAAAAkpl+/SoqT3wQiATAJHPIXiNSWThOIFF6CgcgK5YOvyOKJw/peBTJ78x+s+CnXk4KdJRyI3P7iX3FTdVd0z6/DM8us6kCNQKTL3lZ1WkHIjwlCAAAAACSiPQzx+eHP2wcwB72VmDRoKmYgUjn0lkw8+bB+f5APAU18ze7l7JCVVl8uSyT8Y1L2A5G5Q09Jadefy8Lxqn6/oBdyIMLZIZ15fU+sq2uyTqbHPoIQAAAAAIlTnxlS1EDEpHdh+QxEXKzjJxCZ3f28bHvuMf3+IB8CCURmF7+v71Ewd1+/VUqX37RiSULjj9dJQU1vk3U8BiKV469Jadefy/bXH9DvF/QIRLLJ13EhzSDVZB2/Y18zCLn6VYIQAAAAAInqfJksApHO2xSWr0DEZOLGUR2LCcnJZx+XnYu7DTZELgQQiFRPHJad3Ei9zdytfyyDF1yyYklC44+3SUFHY5+3MKZPamePy8SP/w/51K5/y1kiLoQciBRVmme2phqIpDb21UX6CEIAAAAApCL+niEEIp23KQqbCZbMBSL6bUbLD8rCobf0+4N8CCAQmdpT1tcvmIE1a6X8i38WWZrpSUGz3ipOJlXNX5/l+gsy/NxdMrb7i7J4+oB+/2CPQCR5BCKd13E79rXOCNlDEAIAAAAgFfobqCd5veREAxGb3gVFICK1pVMy8vC93FC9SJIc+xSTRtxIXW3zpddEbqguktFJwe56qyQciIiIzO7/tgz94A/l9hf/SnYe+oF+HyGJBakiZs9vGwIRESEQiVvHzdhXlwZBCAAAAIB09af64c/rBzBfvQuKQESqR+sy8tC9+n1BNmRg4mvypa/raxfQHe/9hIy+95cjS0M/JuUnEBERmTv0lIy8+Jdy3TN/JHf9+P+UnYd+IPWzJ/T7W1gBBSJGAW1RuAq4CUQ69+4TOXdGyHsJQgAAAACka42IND+89Glm/pXr9MmqT0dWdSI1VOs0RPE5Lc3eBdX2b2Hy7+fpebGt07aNdPU7lfftlbH5B2Vmy2/E10U2pDn2GdSde2OXTN1yUgYuWBtfu4Bmbv59qZ09IXP7n1uxNGvHpGgdR2Of0WvWpnf7OtWTb8nUG/fL1Bv3i4jI8LrrZPjdQzJ00ZUydPGVMnTRxvMNhy6+UjZddGX875JrLl6fqmWq507in1+T3oXh6HlJ6LgQ3ntibW+CEAAAAADBWNdxndkAACAASURBVHP+vwhE4nujKeuBiHJiSbr6nWZ375LSVdfKHTfeHL8vyIaAJ75qZ07K1J6y3P3BX4+vW1CzN/+BlE7+lVTe3rtiacjHJItJa9vfwVsYE/87VI6/JpXjr7Wv06oxdNGVMnvDnbJl4MPx+5ZbBCJhIhBR1lDuX1e9CUIAAAAABGX1PUO4ZFZ3dQpB9W9jsk6Kz4uujvLSI9EF8b1H5x+Q+X1729dBRrh4fTqqo6k7u/h9fc2COndD9eH3XBt5JORjkqMxVUX72nLV26JOq0b19FtSeuHfyM7DT7XXKAxH4w+XzHIsO8eF5jqqQkGNfa0g5BWCEAAAAADBaL9nCIFId3UKgUBEtd3IQ1+VxWN1/b4gUAGNfTF1qycOy47FIk8cxyMQ0awTYCAiIjL6yvb27fPK23sm1TKT9y0EIp1l47iwvI6qUBBjH0EIAAAAgCA1zwwhEDHvXVgEItHtakunZOShr0p96bR+XxCogMa+mLrcSD0egYhmnQADkdrZ48U6OyTNQMTk9WkUouSQz+fFxTrZDESaQcj7dhOEAAAAAAjO8mWyCETMexeW5QRa2zZpPi9uA5HKof0yOv+AxX4gHAGNfR3qcnaIXudAJCLRY5JN3eiC/AYizXuLFEjwgUhBpfle1qSOdSDioHf3Yx9BCAAAAICgxd8zhECkuzp55PjSKLHLrHpr6ti+PruYFJyr7pZtzz0evx8IXEBjX4e6nB2ipw5EEhx/kgoTlHUMJBmItGl/nQ+vu85gu5whEAlTLgORxMe+VhDyI4IQAAAAAMHqb1tCINK5d1ERiGh7Tz77mOzY/Xz8fiAc3sYNR3UU21RPHOHsEAPnApHR9/7yiqUFDURsJsyte3d3bB5cs062Xv5R1Ur5RyASJgKRmHWMxj6CEAAAAADB6/d3nwdX69gGIp56FxWBiLb3xJOPyMKht+L3A+HwGog4WEexzeRL35D6mZP6WgU3sGatzNz8+zIx9KsrlhKI+O9tPvE+sr4YQcj80V3qB3wGItq6BpsURfTfgkAkZp3YOmONawhCAAAAAISvdWaIr0Ak9Mkny95FRSAS27u2dEpGHr6XG6pnSWiX2tOMu9UTh2VqT1lfByIics9N/63M3vwHK5aEfkwqTiAycfVvqx4olgTPLCMQiUEgYt5bXWd745ofzeqLAQAAAED6Vlwmi0Ckq95FZfVvk2Ag0nUNRZ0eApHq0bqUHviH7vcL6clYIDK1p8zZIV24472fkMon/kKG1m5oLUlw/CEQUdYoDXxYNq8baq9TRAQiYchFIBLdJrrAy9i30Lj25Ql9EQAAAAAIQ+SeIQQiXa1TVD1cGqVzjQ7Luu5t+9w6CkREpHJov4zNP6jfD4QjQ4FI7cxJmXzpG/oaOG/zpddI5RN/ISMbb20tSXD8STIQ0fEZiLTpfFyYvPa/Mdg+HyonXtWvRCAShswHIp6C1Pheo/qNAQAAACAc/VYflAhEQCASu83s7l2y/YWn9fuB9GjHDZFQJ76m9pRl8cRhfQ2cN7Bmrdz3kc/K1Ac/01qSw0DEduzz1rv9b2xk/Udly8CH4vcxR2rvHPd7TNLVIRDpDoGIeW/p29a49mXuEwIAAAAgU5pnhuQhEGnbJrqAQMQ5ApHYbSaefETm9+3V7wfSk+FAZPRZLsdm485NvyKVT/yFDL/nWiEQSaL38rLBNetk9oY/1u9fjpw/M4RAJFAGr3MCEdU6iyIypd8AAAAAAMKyfJmsrAciziafTHoXhJPnRbVRcQKRkYe+KguH3tLvB9KT0UCkfOAV2bnvef32aLP50mvknz6+TSavH5HBC9a1rxDUMSk/gcjsjX8sA2su0e9bjtTOHlv+IfRApLBsAxEX62Q2EJlsXPtSTb8yAAAAAIRl9T1DCES66F0QVr93goGITV2jPm4CkdrSKRmdf0DqS6f1+4H0ZDQQmVj4KjdT78Hd12+Vysf/QkqXf7D9QV/jj6tAxKa3to9hb4tAZOK9vyVb1/+ifp9ypnw0ElgSiATKJhDx9F7WtI5V3egCq96LjWtfmjXdLQAAAAAISX/bEgIRROn+bawvweEgEPF2+QrLOoptKof2y+j8AwbbIjkm45rBdikHItUTh7mZeo82rV0v3/nFP5W5W++UobUbVj/oa/xxEYh4e30a9Fbq3Ls08GG55/2/Z1AjXxaXzp0VmOIxiUCkCxkLRHyFmfreXB4LAAAAQGb1O/ugRCCSbwQi6nUMf6e56m6568lH9PuABOUjEJnaU5aF+uv6bRFr65Ufkde2/G3r0lkrLuVEINJT7+F118ncz/2Zfh9yqHp6/4qfXB2THKxDILLM6O8w+nPhA5HZ+J0CAAAAgHC1zgyx/KDUtk2Ck4JtCES8IxBRr2P4O0298LTs2M09HsJiG4hotjFax9H40+iT0We+3P12ULr7+hGpbvn86lCEQMSq9/C7r5PyLf+ucPcJOad8dCGyJKwgFS024UFxA5GdjU0vcq8QAAAAAJm14jJZFh+UbCatleskOPlNINIbAhH1Ooa/0+j8A9xQPTg2gUhYY1+l9oZs43JZzgysWdseigR1TAo/EBnd+Cn5p1v/trBBiIhI5fiPFUsJRIJkc2m4YgYic/E7AgAAAABhi9wzhEDEuHdh2H1TXVvH1eSdVe90A5HSA//ADdXTZnUpQIttlL39jH2TL36Ty2U5Fg1F2u4pEuXzmKSta7KO/0BkcM06mf3AuMx8YFzfK+fKb+/yeEwiEHHOJvhLMhDpuoZh3e7GH8IQAAAAAJnW7+SDEoFIzvkKEyx6+QoyjOto1jH4nWqnTxOIhMBm/Ak8EBl95h/0vdG1c6HIa5/8vMze/N9L6fKbOq/s65iUZMhsdOxr710a/JBUbv1buWNjyWD7fFs48WOpvXO8+QOBSHaEHIj4CjNFTMefBS6RBQAAACDrmmeGEIjY9y4MAhFlDdU6Br9T5eBbMsEN1dOXs0CkUntd7lq4T98b1u64+pflO7/wP0n1k5+XiU2/pj5bJI+BSEzvoYuvlLkP/al855ZtsuniK/S1C6D89q7VC0IPRArLIjwobiBS1jcHAAAAgLAtXybL6hT9BAORrmso6hCI9IhARFlDtY7B7zT7o+dl+wtP6/vDL5vxJ8lApMsaU3vKMn9gT/d10JVNazfIPTd9Rl775Oel8vF/1x6MFCAQKQ1+SGZvGpfXPvrvZeuGX9DXK5DmJbIiCwlEAkUgsrxOdMGqdar6xgAAAAAQtjWrfmr0ifSt/CTUJ6s+GTVE8dkpuk60RodlUdreNjVM908iv1dkmyJL7HmR7l9bPl8T2jqK10jb/on2d5p44lEZunRQtm66Ib4//LJ5nZuMGymNfSNPfkmqv363DFywNn47OLH50mvlnps+I/fc9BlZOLpX5t56Tub2PyuVo3v9HJN8jakqkXVKAx+WkSt+QUbW/wJngcSYO/Jk8z+iz0OaxySjOkVl8r7P4G/M1fOi7W353Brtn3Qafypd7TIAAAAABGhN2xICkc7boCXJQERTJweByOh3HpTyb31GNq+/Mr4//MpRIFI7c1JGnvySfOeTn43fBs5tvvRa2XzptXL3z45I/exJKR9+ScpHXpLy4Zea4YiIWD2/KQQig2vWyfC7N0npsg9JafDnZMvgz2n2ESIiO88FIedkIRCBOPsbc/G8eHuNGO5fmz4RaVQ1KwEAAABA8NaYfUgjECk0nx/Kta8tk8Ah24FIbemUjDz0Van8l78nAxdeFN8ffuUoECkf2CPbXvqm3P3B/yJ+G3gzsGatbL3yVtl65a3nl80feVkqRxel8vZeqZ46IOXDLzUfsAhSXQYiQ2s3yNDFV0jpsg/J8LuHZOjiK2TzuzcZ/65YNnfk++0LCUQygkCk+bi0/U6NoR9W4xsBAAAAQPhaZ4YYfyts+UcCkWIhEIlZp/dApHq0LiMPfVW+85ufie8N/3IUiEy++A0pbbhetlxxffw2SMyWy26SLZfdtGrZ4smDUj11UCpHF6V29rhUTx6U6skDIiJSrr0UqWA3WVu6vHlWx+CaS2T43UMiIlK67IMyuGYdoYdjc4efEPUYIAaBSESSgUhR6cZvAhEAAAAAyI0Vl8ny941Tq0CkTYKBiLI3CETi6vQeiJTf2Ctj5QdlpvQb8b2RggQDEZveUSvW4f4h4du0doNsWruhLSRRmT8SDUfUtlz2wV53CxZ2Hvm+1N453vrJJhDxFKSa1ikqApEOdYW3wAAAAAByJXLPkIACkUQn3k0nrQvI6JusBCLm+yexfy+zu5+X0tXXyh033hzfGz3S/D37PLMs4bGvduaklL77RSl/8rMEIjlAyBG22QOPRJYQiGRXgoGIDoEIAAAAADjR3/55LPKJR3kd6eg6qtIGdXTXqDbqbfAJzaYOcwXLov8WXp8XTW/VJ/K2587Ta8Kojsn+qQotrzNaflAWDr2l743e+Bp/bF6zrnp3qFOpvS4TC/fp1wdgrf7OcZk7/KThcSH6s8WxRMVVnSKyfS9r8p5Y97yk+r5FhffEAAAAAPKpX0T0k3cEIkgsEHE0uewsjEkyEFlWuv8rsnisru+N3hQoEJldfEq275nXrw/AyqqzQghEMsLRe9msByImdQEAAAAgB/o7P0Qg0vxZX7YwChGIJDj5FPM71ZZOyci3vib1pdP63uhNgQKRiYWvyY7FH+jXB9C1qX07Vy8wOS5EEYikgEDEuC4AAAAAZNxyGOLzw5/Nh7SoRC/NRCDSEYGI2zoxv1Pl0H4ZLT+o7wv/fAYivnp3qDOx8DVZqL/e/X4A6GjHgUelenp/+wPayW9FsSSPSWghEDGuCwAAAAAZtvrMkDQDkdDv81BYBhO8BCK91Yn5neaqu2Xbs4/r+6I3Pscfq8sQOuqtqFM7c1JK818kEAEcmj3wcOcHQw5EeK+zQoKBiFVdMViHQAQAAAAA4vQn++GPQCSbCES814n5nSaffVx27H5e3xddSnD8CTAQGXniS1I/c1K/PoBY82+/IOW3NWM0gUhGJPSeOM3Lv5rU4TUBAAAAIKdaZ4YQiChrmNYpBAIR53XatokuWN5m4olHZeHQW/oa6FJxA5HqicNS+u4XCUSAHk3+5B8chRIW2yjXsaxTRF4v/0ogAgAAAAChWXGZLAIRZQ3TOrlkEUoQiJjX6WLCvLZ0SkYe+io3VPeiuIFIpfY6gQjQg1VnhVi9VyAQSR2BSOd1Cvv+FwAAAEBerb5nSJrXSw4+ENGXySWbfxsCEfM6XUyYV4/WpXT/V/Q9YSHF8YdABMisier/vnqB7u/O9j2Tty9uMNktIgQicesQiAAAAADIkf72RUkFIr4mrVW9+cZkTwhEzOva1OkiEKkc2i9j5Qf1PREvzckn6zHVQe8OdQhEgO7tOPCoVI6/1v5AyIGISe+i8hqIRHvZ9CYQAQAAAIBe9af6bTgCkexwFoi4WMcyEPHWO9lAZHb387L9hWf0PRGPQGTVOgQigLn6O8dlovofWj95CiUIRJLn7T1xml8i8bgOAAAAAGRM88wQApGYdfgweJ6TD/eewgRVb6PAIcFApI19IDLxxCMyv2+vRU+sQiCyah0CEcDM5N5/lNrZ4yuW5CEQKSoX72VN6qQZiLh6/wMAAAAA2bZ8mSwCkZh1+DB4HoFITG8XE1/mv9PIt74mC4feiu8JPQKRVesQiADxFo6/JlP7/l837xUIRAJBIGJeBwAAAACya/U9Q9K8XrLXQMTFOkX9MGjy4ZlAxLiOw0CktnRKRssPSn3pdHxP6KV5eRKvgYjdOucCkcUTh/XrAwUzumf78g82l0CM8hmIWPUuKgIR8zoAAAAAkE39dh/AVKUcfPgL/sbXRUUg0l3v5AKRyqH9MsoN1d1Ic/LJWyBi/zqv1F6X4Uf+Rhbqr+vXBwpi20/+USrHf7x6YciBCO91uuQqEInIQyACAAAAADnQumdIZCmBSHfrFIJlIGKzjbczd/IZiMxVd8tdTz4a3w9mCERWrVM7c1JK81+U+QN79OsDObdw/DWZ/Mk/qh/MfCCiXyWX0rz8K4EIAAAAACRuxT1DIo8QiHS3Th65+HDv61rntr2TDES6rqGoYxiITD3/tOzY/Xz3+4B2BCKr1qmdOSml735Rdiz+QL8+kFP1d07IyMv/S/xKWQ9EiopApLs6AAAAAJBhkXuGRB4lEOlunZypHDhEINJTb1cTX2Z/LxNPPMoN1V0hEGlbZ/SZf5C7Fu7Trw/k0Ogr26V66oDFlgkGIi56F0z1zJvN/yAQ6a4OAAAAAGRUf9sSZ4GIrk4GA5GCqZ1q3ZibQKSH3skFIrWl01K6/yvcUN0VApG2dab2lOX2J78k9TMn9dsAObH9jftl7tD3mz/4ugSiVR13vWvvHNfvUw5Vl/Yt/0Ag0l0dAAAAAMigfncfwDSPK+tkJxCp7D+i75FnBCI99CYQCU3l8D6/z4u2TnYDkbk3npfSd7/IjdVRCPP1H8rEa19avTCHgUjlxKv6/ckjb+OupoayDoEIAAAAAPjWOjOEQERXp3ZqSV8/Z8o/2bd6gcnz0ibBQMSmdw4Dkcqht2TiiUf0/QqstnSq+R8EIlZ1KrXXpTTPfUSQbwvHqzLy0v9qd1zIWCBSXXpTvy85M3+80vwPJ+Ouo/ey1u/HXaxDIAIAAAAg/1ZcJotARFdnfrFY92Oovn2sfaHuebG9rJqLD+XWl3RzFIjY1DXq032d2d0vyPYXntH3K6jy/teWfyAQsapTO3OS+4ggt+pnT8jo7u1SO9u6fFTOA5Hq6f36/ciZ1ZfIynog4umLHKZ1AAAAACAjIvcMIRCJq1OtK8KBnKqfXpJq/ahYPS9FDUQSnfjS/04TTzwqO6uv6PsVzMKRNx2NGyJFD0REmvcR+cijfyOLJw7rtwMyoH72hJSe/3OpHK+ufsBmUtjrcSG6Tm+954/u0vfIkfLxf1q9gECktzoAAAAAkAH9/k7Rjy7wGIho65qso9+/8mJxvjm5+hJZBCJueycXiIyWH5SFQ8U6o0mncrj12nYWiLhYxzYQSai3pk6l9roMP/I3XDYLmbcchJw7e0w37oYWpNr3Lh9d0O9DjrSFISIEInF1AAAAACAHmmeGePsAFl3gKRCxvaxRlx8i5370U33NnCjvjdwvhEDEce9kApHa0mkZLT/IDdVXmNv70vIPCZ5Z5qSO1ZjqqLfGuctm3f79L0n9zMmutgVCUD97Qkq7VgYh5xQjEJmrPaHvnxOLZ95s3SfFVxDt8T2xVW8CEQAAAAAQWXmZLAKRmN7NZbVTS7Kw/4i+Zg7M7Vm0/GCcYCCiQyAiIs0bqo889DV9r4JYdb8QEQKRXuooHp97/XkZ+uak7Nz3vH4fgECsCkJsjgs5CEQqx38si0vFOAN2rv7Yip98jbue3hP7+hKJaR0AAAAAyLDV9wwhEInp3Vw2u/Bjfb2Mm//Jvtb9QsTuQ3lSgYizySfVhha9rHrb/g6adSK/U/mNvTJW/rq+Ts7teLUiNdVZMgQi9nUUj9eWTsnIk/+Bs0SQCc0g5N+uPiOkoIHI3JFinB0ye+QbkSUEIl3VAQAAAICM6m9b4u0U/eiCbAYis7t+LPXTZ/T1Mmz2hchNtwlE1HWCm/iK/51mdz8vO3a/oO+VY7OvnrtGvMm/H4GIcZ0O4+7cG7s4SwRBWx2EmBwXIoI/LnTXe2r/ffq+GTd/vCKVk6/YjaEEIgAAAACQaf3JfgCLLrD8ENkmuUCkdmpJ5n70E4N9yqb66aX2MESEQKRTneAmvuJ/pyLfUH3xWE3Kb668RFYGA5G2baILwgtEamdOnj9LZPHEYf2+AAlZOF6Voaf/KHKPEAeT38EdF8x7V0/vl521J/V9M2z28IqzJAlEOrM5IxYAAAAAAtc6MyRjgYiv+zwY9e6Tye/u0tfJqKlnf9j6rwSfFwKRHup0P3FTuv8rsnjsbX2vnJlc+E6CE5v+xp/2baILUvwmcMy4O/fGLhl+9K9l20vRy9MAyduxvyylhf9ZamdOKB4tdiAy9WZ+7zG1uPRm+yWyTJ7fqCQDkTYEIgAAAABga8VlsghETHtXj5yQHbvyd++QxbePydQzKy+j5OhDuatAxKquGKxTrECktnRaRr71Vamr7p2RUwuH35TZPa1LZBGIuO1t0qe1rHbmpEy+9A257puTMn9wj74W4MFdr87K6I++KLWzx5sLrI4L+Q1Eykd3yY6DD+t7ZtDEG18Ud5dg1Wyj3M5R7yQDEQAAAADIkcg9QwhETHtPfOu53N07ZPLx56R2aimy1FWQ4aCOt0kjg94mdYKb+Or8O1UOvSUTTzyq75MTE09bfBOYQMS8t0mfFcuqJw5L6bt/J5967O+4dBYSs3jqgHxq190y9foD4ubYlt9AZPKN/yj1d47re2bI/PGKzL39WOsnApH42l08DgAAAAAZ0p/uKfoGvQMNRGqnlmRyPj83BZ7/yZvL9wrx9aE884FIFie+Ov9Os7ufl23Pfk/fJ+N2vFqR8pvV9gcIRNz2NukTWVY+sEeGvnm3jD37ZamfOamvCVjaefBpGX7uX0m59sMVS21e19EFPo8LLtaxC0Sqp9+Sydf/o75fRtTfOS6je/8yspRAJL52F48DAAAAQEY0zwxJ9QOYpq5SgoFITN2pp16W+cXs34y6fnpJRr8+v3ohgYi6d84CkclnH5cdu1+QvFo8VpOJH5w7K8TR+JNkINImf4GISJ/MLj4lQ9+8W7a99A1CEThVP3tCbv/h38jID/9aamdUZzroXteO/sZCClJFjI6rU/vvk/mj+bhH2uT+GakuvekvlChCIAIAAAAAObB8mayQAxGfE+9W34ZbXjby/3w385fLGn3wManWTC6HQSCifFxVJ0OByMQTj8jCoeyHeioj3/6/pbZ0asUSVxNfCU1s2r5GXAUiNr1N+ij+bZr3E/k6oQic2bG/LENP/Q8yd/AHywutjklFDUT6ZOSVbZm/XNaOw9+UqQP/aXmByb9NmwQDEZveBCIAAAAAYGT1PUMIRNRietdOLUnp/3oks4HItu/9k8y9stj8IWbCfFmSgUhEooGIpneOApHa0mkZeehrubuh+tjjc1I57PObwAUIRHz+jXX4t1kVirxMKILuLRyryqcWJmX05b9v3STdxTGpmIFI7Z3jUnr5f8xsILJw8lWZeGO6/QHtmW+qagkFIj7fe1mFMQAAAACQH/1tSwhE1GJ6V948IhPfejZ++wDteGGPTD5eWb0wqEDE5pusJnUVgpr4crWOeSBSPVqX0v1fyU0gsv3F78vsnhWvbQKR5Hub1In5t6mdOSmTL35dhr5FKAIzi6cOyNjL/16Gn/nXkXuDiBCIxNWJ36Zy4scysfd/0/cKzMLJV6X06p1Se+eYJBpKZD0Q4ewQAAAAADnWJ392f6Pt05Lyc1B0HeUnLH2dtu0Uddq2c9TbpI6ytlnv0c3vl5nf/lj89oHY8cIeGX3wsRVLNP82Pl8T2joGrxGj3prn1ra3ch1fvT3Vaf1Ow+uvlPJvfUYGLrxI3ydQO/YsyOjjc2L275fQuGHS26SO7evc5jXrqrdJHcPnZfTaj8rkB/+5bLrkcn0fFEb97AmZ+unXZeqnD7bOBGmxOiZZvD5t6wR3XIjfZnTDr8jMdZ/T9wrAwslXpbTnTqn9f8cijyR5XNBs47O3i/fjkccbNzxHSgIAAAAg81phiEhYH8A89tZO+ltO5rXqjnzgfTK79Zdk4KIL9HVSsuP5PTL69ccUjxCIWPfO5MRX/gKRbZV5mayUVyzJWCDS4/gTu05OAhERkdKGG2Ti+pJsveoWfS/k1uKpAzL106/L7L755RDEaNwlEFHWMXi/NnLZL8nsdf9KBt61Tt8vJeeDkHdaQUiaoUSOAhHCEAAAAAB5sCIMEQnrA5jH3p4DkeGfuUzK/92ngwxE7nr0BzL19IvNH3qYMI/djkCkc52QJr5U67R+p6FLB2TuV39HNq+/Ut8nAPWl0zLxg2/K7CuVlCe+Mh6I+Oytq2MxbgxdcrlMXP8pGb32ozJwwVp9T+TCfO1Fmd03L7NvltUrEIjY1zF4vzZ8yftl7oZJ2XRheMeHnfXvyejev1wOQs5J9YzjFHs7DEQIQwAAAADkQSQMEQnrA5jH3p4DkcGLL5S5/+qTsmVTGJMFi/VjMvrg41Le++bqB4IKRBxNPhGI9Fan9TsNXniRTH3803LHjR/W90nRwuH9MvpY62bp5xCIdF4nZ4HIuXVGr/2YjFx9C2eL5FT97AmZ3TcvUz/5ulRPv6XfgEDEvo7B+7XBd62T2ff/K9k6+Ev6fgm56/W/l6kD97Z+CiyUCDkQMRzPCUMAAAAA5EGf/OkDjbBP0ffY23MgIiIy8dGbZHLLzameJbL9mRdl8vGK1E4tqVcgEOmsEBNf8b/TyNANMvXx22TTuwf0vRK2rTIvUz98SmpLiptrE4h0XiengYiIyNAl62Xk6ltk4mc/xb1FMq5+9oTMHXhG5g4+LXMHnl79YGKvLQKRuG1GLvt46pfNmj+2IBM//XupnHol8khgoUTGA5HGjc8ShgAAAADIvA5hiAiBSFxdMVhnedngxRfK1K/dKnfc8n59LYfm9+6XyccqUv7JPv3KBCKdFWLiK/53GrzwIpm4+Z/JxM2/EMS9RObfXJTRx3ZK9VhtxdLAJp8IROzrOHpehgff2zxj5KrNBCMZsXjqoMwdeFrmDj4j5SMvrnjE0d+Yr/Hc1fgT1HHBbJvBd71bJt/7u3Lnxtv1PR1aXNovk/t2yOzhb8buXxsCEXUdzTaEIQAAAADyoBmGiAT9Acxrb2+T1u21hy67RCY/eYuMfOAar2eKnA9BVl4Sy9cEC4FI5945C0RE0g9Fdu79kUz98Ckp71ts7V/oE1+a58Xb69OgjvXfroPeJnUcPy/DA++T0Ws/JqUNN8rmgffqUv5xTQAAHJlJREFU9weJqJ89IeUjL0n5yA9l7sAzUj11YPlBq+OCAoGIYQ1FnS6+wDJ00UaZ2Hi7jG74Va9nipwPQQ59y/DfL7TjQoq9e3g/ThgCAAAAIA+WwxCRYD+Aee+dYCAifQ0ZvPhCGfnA+2TiF2+SzRsv09c1sFg/LnO798rU0y9JtX7uxqEJTbwTiHTuncNA5Nw2ozfeLCNDN8rWoRv0fXuweKwus68syOzuBaker7WvEPzEF4GIdR1Pz8vQJZfLyFWbpbThRu4xkoL5Iy81A5DaiwZnf0QXEIh01zvZQEREZPBd75aRyz4uI5f9kmwd/Hh8f0P1d47LXO17Mnv4m1I+uqDZl/j9az6u6pLQcSHN3iZ1OmxDGAIAAAAgD1aHISJBfgBLpHfCgcg554KR4Y2XyfDGy41vuL6w/4hU68ekvPdNKS/ul8r+wx4nNn0FIglOPiUVJqh65zgQEREZvPBiKV19rZSuvkaG12+U4fUbezprZOHwfqkc2i+VQ2/K3OJuqR47otkX1T4TiBjXKWggsvLxc8FIacMNsnngffp9RFfOhx9HXoqEH+LxuKBAIGJYQ1HHctwdXLNOSpfeIqVLN8vwJT8rWy41Cx8Xl/ZL5cSrUjm5R8rHKu0BiHZfDPavsIGIzXsmkcaNzxCGAAAAAMi8PvnTBxtZ+EZaIr1TCkSiBi++UIY3Xqb8AFutHV9x5odq/1QVCUTMt0koEAl+4qv356V01bUd+qvrVI/VpHq07nVijkCkwzoEIucNXrhWShtulOGB90lp/Y2yZYPfM5/yZuHoXqkcXZTK0UUpH3lJKscWI2t4ChOUdQweJxCJedzVuNu+rHTpZuXjtXeOSeXEq4reluMPgUiHOt2/ZyIMAQAAAJAHrTBEhECkw+OqOmlOCnoLJdLsTSDivncYgYi6rmqHHI0/IU98dazdbW8Ckc51VYV6H39KG26Q4YH3yfDANTL8nvdx9kjL/JGXpXrygFRaAUj58EvNB7SvrYIGIr7GDZPeJnUSDkS6700g4rR3l++ZCEMAAAAA5MGKMEQk1A9gifcmEEmhN4GI+94EIon31k58FXXccFQnoONCMxx5nwxdsl5KG26UoUs2yKa1l6uaZ9784ZeleuqgVE8elMrbe6V66i2pHN27Yg2b1xaBSOd1PB0XnP3tptmbQMRp7y7eMxGGAAAAAMiDSBgiEuIHsFR6ewtEEpz89nWddQKR3noTiHSoYdibQKSHOmkGIo5e51bPS3KT38MD75PBC9bK8MA1MnjBJTL8nmtk8IK1MnTJetm0dn379imrnz0plbebl7KqHN0rtTMnmv9/9rhU3t4rtbMn1BsmdkwiEIld1nXvggYi3t5PmtTxOe4m936cMAQAAABAHijCEJHQPoCl1ptAJIXeCU4+EYjEPE4g0lNvAhH73iZ1Ag9EdL9Taf2N5+uW1t+46rFmeHJJhy1N9q+pduaEVN7eu+rx8qEfnd+/c8FH57p5PC4YPE4gErMOgYh9nTQDETev88YHniYMAQAAAJB5ffKvH2xk4RtpqfUmEEmhdw4DkVxMfAU2KUgg0kMdApHOdUI7Llj0Dmrs8/Q7mdSx/RsjEIlZx8W4m+LYRyASUyf+dU4YAgAAACAP+kVE+fmn/Sthyk+8kXVs6ijqtn0+S7G3ch2TfxvNNiZ1XdWx+Z1S7e3oeTF5jST1vNj+jTnpbVPDsI7J86Kta7KO7RiQZm9NHZ/Pi7aOzd9ugr1N6lg9LwmOP87+bSx6BzX2efqdTOrY/o25el7aJHhcsKlr1MfBayvNsc/b+0mTOj7H3aTGPgAAAADItv7z/5XkhGSigYiD3gQiKfTO46SgaqMCBCJpTj6lOvGlQCBi3tukDoGIeR0Ckc58BSI+xx/d7+Vt3FDV0ZchEOnwuKoOgQgAAAAAeNO/6qfQP4AVZuLLUZ22baILCES6600g0nEdApEOdXyNG6reBCKdt4kuyOJxwaJ3UGMfgUjndVQ7lPFAJNHeoQUi0d6aGqo6afYmEAEAAACQY/2Z+0YagYh5HWeTTxa9ldvY9Lb8HdqENCmo2ohARF3DUR0CkZh18hiIpDjxrpJkINImpLGPQKTzOqodIhDxWsfb8+Lq/WSKvY3GFgAAAADIntY9QwKaFCQQcVsnzUAkuImvBCcFbXq7CkRs6hr1IRCxr0Mg0lNvkzohBSK+wkzb3kGNfUlO1hKImPcmEOlcV1WIQAQAAAAAsmjFPUMCmhQkEHFbh0AkZh3FKi6el8JMfLmakPQ18R79mUCk8zoEIk7rFDUQ8RWkKrdL6vVp0FspxbEvikCk8zoEIt3VAQAAAIAMi9wzJKEJSa+BSEK9CURS6J3HSUHVhhkPRLyFCSZ1bMeNgMY+6+fFxToEIk7rEIjE9M5hIJLm2JdqkKpaJ83eBCJOexOIAAAAAMiR/rYloX8A037ATnHiSyXJScE2BCIdewc1KajakEDEvk6agYiria8UwwTribmEepsI6bhAIBLTm0DEaZ1UAxFX426KY5/186Lr7TMQSag3gQgAAACAnOjP5DfSQg5EvE58hTT5ZCLBQMSmd1CTgqoNCUTs6xCIeK+TVJBqUsdm0lok3fHH1b+NTe+gxj4CEad1CER6q2P1vCQ4/qTZGwAAAAByoHVmiM0HMMV2BCIdanRYZtU7pMmnNHsnOPnk4huSPgMRJ70JRBLvTSDSW2+Tx5M6LvgKM332Dmrss3xetHVN1iEQMa5rVIdApHMdAhEAAAAASNuKy2TZBiKabQhE4pdZ9Q4plEizd0CTgs4mn1QbhjzxZbCO10lBTW8CEf91CEQ61FCtk8NAxOf44+syYL7GvkQDkYigjgsEIp3rEIgAAAAAQJoi9wwJ/QOYpw/lrnoTiKTQO4+TgqoNQw5EbMYN094JjT9phjEEIr31NnmcQCSmT0hjX8YCEa+9HfyNBXdcSLN3Us9vguMPgQgAAAAAdK0/uYmvBCefijDxZcJnKJFm70JMCqo2JBBR10kzEEly4ivFSUGjIDq6ILCxrwjHhVyMfQQi5nUIRLrr7er5jW4TXeBx/AmpNwAAAABkUPPMEAIRt70Tm/gKbfIpod5KCU4KWtUVg3UIRDr3JhBR11VIKhBxFmY66m3Sx9ukYILHBV+9CURi6kT3hUDEvE4eAxFP7ydN6vj6EolpHQAAAADIuOXLZBGIuO1NIJJC74Qmn7xN3Bj0NqkT3MRXQJOCBCJu6xQ1EPE5/uh+r1Qn3m3risE6FnUIRNSPq+oEd1xIszeBiHVvAAAAAMi41fcMMfmgFEUg0rk3gUgKvYsQiGRx4svXhKSmhrIOgYjTOgQiMeuodijjgUiiY19SYYJpHYlfJ9HemhqqOsEdF9LsTSBi3RsAAAAAMqy/bUliE1+uPoAlGIjY9CYQSaF3HicFNY+r6gQ38eXieUlw/EkzjDEKoglE7GsY1BUhEOlUh0Ck8zreejv6G7N+Xlys42rcJRBR10iwNwAAAABkVHsYIhJ2IGI70ZD1iS+lFCe/CUS62IZApOM6mQtEAhv7kpwUbJNgIGLT26RP1o8LhRn7CESUjyvr+Dou+Bx/0uxtMf4keVxok+b7cQAAAADIPnUYIkIg4rp3YhNfoU0+OeitlObEV/RnApHO6xCIOK2TZiDiK8z02dukjq8JSV/jTxSBSJe9CUTUdRUIRDo/ntRxwfr9pIPeAAAAAJBDncMQEQIR170JRFLondDkk9fnRdPbayDiYh0CEad1CES6621Sx9eEpIs63oJUg97KXja9PY0tBCIxdQhEnNYpaiDC2SEAAAAAciY+DFEiEOmpN4FICr2zHojkdeLLYtIlyVAizd4EIm57m9QhEOlQJ7SxL8nnRdPbZB1vvfN6XEizN4GIeW8AAAAAyKb+sCa+DD7QJhmI+OpNIJJC7zxOCmr6qOoEN/Gle14Cm3xKM4xJMhDpuoaiDoGI2zoEIp3X8fa8OPob89Y7p8eFNHsTiHTRGwAAAACyp3lmSMiBiM/Jp5Anvkx4DUQ06xCIdK5DINJbHQKRzr2TCkR8/e2KmP3b+OptVEdX12QdAhHzugoEIl30zuFxwXrcdfQ7dF3DsK7V2BdQIAIAAAAAObB8mSwCkeR7JzbxFdrkk663wTqpXholtElBTR9VnZAmvlTrEIh07l2EQCTNsc9rwO1g/CEQ6bwOgUhvdUI6LqQZiNj+jbl4XnyOPy7CGAAAAADIuNX3DCEQSb43gUgKvROafCIQ6a0OgUjn3gQivfXW1Uk1EPH1t2vS26ROaGNfQM+LCoGIfR0CkZh1VDvka9w1+LcAAAAAgIzo/gbqBCLuexOIpNCbQMRtb0d12raJLvA4KdiGQMS+hmEdApEOddIMRLI49vk6JmlqGNdJqncOjwsEIjHrqHbIWyCyoOoGAAAAAFnTH9TEl1KSoUSavQlEku+dx0lBTR9VnaAmvjyFCSZ1fAWpJr2VEgxEbOoa9SEQsa9DINJdbxfPi6vxR0H73KU49qkkeVxoQyDSuXdqgUhN1QkAAAAAsqZfRObDn/hKaPIp1YkvBQKRBHrncVJQ00dVh0Ckc++kAhGvE1+a58Xb69OyDoGI+nFVHQKRzusQiJjXsQ1SXRwXvI67JuONrrfl35jJ/ln1dnVcsOkNAAAAANm24jJZBCKp90504iukyafQemtqKOuENimo6aOqQyDSuTeBiFkN2zrexg1HdbweF6K9NTVUdaz/bRz0Dm7sIxCxrlPUQMTn2Kc91qkKpTj+dN6mYrAxAAAAAASvX1Z9wCEQSb03gUgKvROcfHI2aenod/DWm0Ak8d4EIva9Tep4e14cvc7TDFKDG/tMnhebutEFBCLd9SYQUddVFUpo/DHfhstkAQAAAMiFfmn7gEMgknpvApEUeqc5Kehz8im6IKCJL6UEAxGb3gQiZjVs6xCIxNTJYyCS4PiT5P03bMa+JJ+XNgEdFwhEuuydWCDCmSEAAAAAcqFfGn3l9sUpTj6leXkAApEu6hCI9FSHQCTm8YQCEZ+TT2mGMVbjbgSBSOd1CER6q0Mg0vnxpJ4XX0GqSW8TiY67Nr0LGYgQhgAAAADIheZlsjI58ZXQ5FOaYYzXQMTFOgQiPdUhEIl5vACBSKoTXymGCSbreA1EHKxDINJbHQKRzo8XIRBxNv6k2dvR2BLUcaHjNvXGh56oqh4FAAAAgKzpb3z+0zURWSAQialTmImvJEOJkHvndVIwuoBARF3DsDeBSA91bP92Axr7rJ8XXe/QjgsWvYMb+whElOsQiPTYO8lxI6HxR92bs0IAAAAA5EZ/6//LIuL523AEIta9cxmIhN7b46SgVW9HddoQiKhrGPYmEOmhTlEDkQTHn9ACEavensY+ApEONVTrEIg4rZNqIGI17s6p9gYAAAAAsmh1GCJCIBJXh0CktzoEIh1qmPZ2Mfmk2ijBQKTrGoo6toGItq7JOgQixnWN6hCIdK4T2nHBondQY5+n38m0jo7PQKRNQMcFApGYuqpCqQQiZdWeAAAAAEAWtYchIp4DEc06aV4egEDEfx0CkQ41THtnPBDxOflkcxmwREOJgHoTiJj3NqlDIGJep6iBiO3fmLfeCR4XbOoa9XEx7hKIdKzT3Gax8aHvcZksAAAAALnRLyLSum/IzlWPZHLiK6HJpzTDGAKRFHrncVJQtRGBiLqGozrBT3wRiPRUh0DEvA6BSGd5DES8fsHGxbib10Ak2ltTQ1WnwSWyAAAAAORL/4r/bv/Ak8mJr5ADkSxOfDmq07ZNdEHovfM4KajaiEBEXcNRHQKRmHXyGohEt4ku8Dj+aOuarJPHsY9ApPM6qh0iEPFax9vz4uR1PqvqDAAAAABZ1ddoLH8y6vvcIzURGVCspdi0YbCOro5im+g6ys+VJr11dQx6K9fRbZNgb6N/P0/Pi00dVQ2rf5s0e1vUsXqNmPbW/NvY9jb69/P0vBj1cfD8+vy30dVJs7e3cUPVO7TjgoPeJnV8jeeuxh9n/zYWvYMa+wJ7XrR9fPZO6LjgbdxQ1Umzt4txQ1VXVcjb+LPY+PD3hlQdAQAAACCr+iM/q0+Hz+Q3gR18S5ozRNzWcfZt3DR7J/htXBfPS5rfBFZK8du4nCGiflxVhzNEequT1NkVJnV8nd1l2zuosc/j82LTW9vHZ++EjgucIdJ5nfDOEJlSdQMAAACALIuGIZMd18zFxJemhrKObSCSUG8CkRR653FSULVh1ia+kgoTTOtEJBqIaHoTiPTW26QOgUhMn5DGPk/Pi7fXp8/enn6HKK/Hheg6SfbOVSBSFy6RBQAAACCHVoUhjc9/uirRG6mvWiFrE18JTj6FNPGlkuSkYBsCkY69g5oUVG1IIGJfx2bcSLC310DExTq2x4WEepvUCem4QCAS05tAxGmd4ILUpHo7Wsf6edH17up1Pte4+fGaQRcAAAAAyJTomSEiIvGnxROIdK5TmImvkCafTBCI9NSbQKSHOkUNRBIcf5IKUk3rWNWNLrAcf9oQiJj3JhBxWqewgYijvzGr58Xp+5ZJxQ4AAAAAQOa1hSGNz3+6LCLzsVsRiHSuQyAS83hCgUiaE19KCU4K6hCIdNmbQERdV4FApPPjSR0XfN7/pxBjX2DPi7aPz94EIm57ZyoQ2d64+fGqojkAAAAAZJ7qzBCRRt+odkvrD7m6dQhEnNYhEEmgd4KTT9reriafVBta9LLq7WlsIRCJqUMg0lNvk8eLEIjkYuyzfF60dU3WcTT2EYioa4gQiMSuIyLNe4VMdtw/AAAAAMg4ZRjS+MJtVWn0bdduHdTEl23d6ALLD5Fp9iYQCaB3HicFVRtmbeIryUlBTW+vgYiD3gQivfU2eZxAJKZPSGOfo+NsUoGI194Oxp/gjgtp9g4+EJls3PwY9woBAAAAkFvqM0OaJqXRt6itkLmJrwQnn9IMY5IMRLquoahDINJdHQKRDuukGYg4Gn/S7J3FQKRtm+gCApHO6xCIdFWHQKRDHV/jhqo3gUjnbaILuh43Fhq3PBZ/30AAAAAAyLiOYUjjC7fVRGQiuIkvAhHz3olNfKU4+WQi0d55nBRUbUggoq5DINJdb0/jT5KBSNc1DOumOf4QiHReh0CkQx0Cke56u3h+nb+fHNXvFAAAAABkW9yZIdL4wm1zIrI9qIkv1ToEIp17FyEQCa53gpOCVnXFYB2L3sFPfAU0KUgg4rZOmoGI7evcxfPic/wx+b189Q5q7AvseWnbl5COSQQi3fUOKhDZ1rjlsYp+hwAAAAAg22LDkJZJEVkIauJLtQ6BSOfeBCIp9E5o8snbxI1B70xOfPmakNTUUNYhEHFah0AkZh3VDjk4LhRm7DOoQyCiflxVJ7jjQpq9gwhE5hu3fHdSvyMAAAAAkH3aMKR1uaxREakHNfGl3Ca6wOOkYBsCEfsahnUIRNR1CERi1vEViHj621XVSTOMMRp3AzouEIjErKPaIQIR6zpez3oJPRCJ9tbUUNWxfl5crEMgsqJOXURG9DsAAAAAAPlgcmaINL5wW0XOXUs4lxNfCU4+pRnGuApEbOoa9SEQsa5DIBKzTh4DkcDGviSPC20IRDr3JhDpvI6DOoUNRBz9jYX0flLE8LXlq7fF2Nf781IXkVLjlu/Wum8OAAAAANlkFIaIyLn7h4w1fwjoA2xRA5HgJ74SnPwOvnceJwU1j6vqEIj0VodAJObxBAMRm94mfUz+bax6h3RcsOwd1NhHIKJ8XFknj4FIYGNfb8/LRGPzPPcJAQAAAFAoxmGIiEjjC7fNisj25g8BfYAlEOmud9YDEV+TRl57+/odoj/7fF40vQlEYuoQiHTXO+BAxOffmPZYpyqU4vgTlduxL2vHBQKR3uqk2TuxQGSssXl+Nr4ZAAAAAORPX6Oh/AQcv9GfPDorIne0Kph0iSxQbOOijqpG22dCk94WdZT7H11HsUqavY3+/TTPi1Fvm+fWoI7t75Rqbxd1DF4j3p4XR39jIY0bqnWSGjds66TZ28W4Ydzb0/hj9W/jqLdJHe2xTlUoofHH2Zhq0Tu4sS+p58XR31iaz0smjwtp9rYYf8x/p7HG5vJsfAMAAAAAyKeuzgw5p/GF20YljTNE2vj6JrDJvjj65iVniNjXsf2dUu2d0LdxEz27QtNHVSe4bwLrnhdn38a1qxNSb84Q6a23SZ2QzxBxNqZa9A5u7EvqeXH0N2b9vOh65/W4kGZvi/HH7HciCAEAAABQaFZhiIhI4wu3TUjS9xBJdOIrwcmnNMOYxC6NElookWbvPE4Kavqo6gQ38RVwIOIrSLXtnWQg0nUNRR3b44Kv3iZ1CEQ61Alt7CtCIJLg2BfacSGk3iZ9Oteti8hYY5ggBAAAAECxWV0ma1WBP3l0RERmRWQgn5dGSfDyJIW4NEpolydJs3ceLxuj6aOqE9ylUVxcsibB8SfN3kldMsvn+KP7t0lz7PN5CUQXl2biklmd10nzeVFx8tpKcOwL6bhgPe6mOPatXlYXaZQaw2Vulg4AAACg8KzPDDmn8YXb5kSkJCILnCES09vFN7199k7sm8ChfRs3zd4mdTS9g/uWtKaPqk5o3wTmDBHz3kmdIeJz/NH926Q59nk948/B69zrGSK6OqGNfQE9LyqcIWJfx3rcTXHsW162ICJDBCEAAAAA0NTzmSHnC/3Jo4MiMikid3KGSExvzhDpoY7Pb+Om2Tuhb+Nyhoh5HV/jhqs6NuOGz96cIdJbb12dwp4hksWxz8Xz4upvV0H73AU29gV1XEizt9Xf2LbGR749qd8QAAAAAIrDWRhyvmDzsllT0tfYZNA9siD0iS8Ckc51xWCdkCef0u6dx0lBTR9VnaAmvlKcFPQ1bvjsTSDSW29dHQKRmDqhjX0EItZ1fI0brupkIxBZEJHRxke+zdkgAAAAABDhPAwRkeWzRPoadxrsQWRB6BNfCU0+FWbiK6TJp7R753FSUNNHVSeoia/AJgWLEIh4e30a1PE2bjiqU5jjgkXv4MY+AhHrOmkGIl7HXe9jX11Ephq3PjoZ3wgAAAAAistLGHK++J88OiR9jSkR2arZi8gCApHUexOIpNQ7j5OCmj6qOgQinXsTiJjVsK1T2EAkzb9dRe1cjH0BPS8qBCKGNRR1wgtEdojIZOPWR6vxDQAAAACg2LyGIeebfO6RkohMSFwoQiCirkMgErNOHgORBCefkgoTVL0JRMzrEIh0V9dFHQKRmDpJ/u1a9A5u7AvoeVEhEDGsoagTRiBCCAIAAAAAXUgkDDnf7HOPDEkzFBkVkQHF3kQWEIik3ptAJIXeeZ0UjC7I2sRXYJOCBCJmNWzrEIjE1CEQ6alOmjckN3mcQCTm8SACkbo07803SwgCAAAAAN1JNAxZ1fhzj4yKyIisPFskkxNfBCKd62q2UfYOKZRIs3deJwWjC7I28eXpefE5/qTZm0DEvrdJHQKR3uoQiHR+PKnnxde4YdTb1d+uRW+T/qsfr4vInEhjrvHzj8zFbwgAAAAA6CS1MOT8DnzukUERKZ3/X19jc/taoU98JTT5lMuJL0XtoEKJNHvndVIwuoBARF3DsHfWA5HCjhuO6uTyuJDXsY9ARLlOUQMRfe8F6WuURaTc+PmHCUAAAAAAwIHUw5Covs89Mih9jWERGRaRodb/i0hjy+oVCUQS753oxFdIk0++eiu2K8ykYHQBgYi6hmFvApEe6qQZiDh6nVs9LwlOfhOIdF6HQKRDDdU6uQxE6iJSaf1UFpGaiFQa/+yhsn6nAAAAAADd+v8ByH0ik9jP1LoAAAAASUVORK5CYII="/><path id="path6" class="cls-3" d="M81.41,50.94a5.33,5.33,0,0,1-2.23-.24L51.51,43.21a9.66,9.66,0,0,1-2.06-1Z" transform="translate(0 0)"/><path id="path8" class="cls-1" d="M39.35,98h4.21c1.51,0,2.31.72,2.31,2.15v6.93A18.33,18.33,0,0,1,39,108.23a6.61,6.61,0,0,1-5.64-2.55,11.44,11.44,0,0,1-1.91-7c0-3,.79-5.26,2.38-6.86a7.94,7.94,0,0,1,5.81-2.47,10.75,10.75,0,0,1,6.2,1.92,3.61,3.61,0,0,1-.56,1.43,3.2,3.2,0,0,1-1,1,8.17,8.17,0,0,0-4.53-1.6,4.42,4.42,0,0,0-3.58,1.6c-.88,1.11-1.27,2.78-1.27,5.1,0,4.38,1.59,6.53,4.85,6.53a18.48,18.48,0,0,0,2.94-.32v-2.47a10.14,10.14,0,0,1,.08-1.75H40.62a2.05,2.05,0,0,1-1.19-.32,1.32,1.32,0,0,1-.4-1A9.18,9.18,0,0,1,39.35,98Z" transform="translate(0 0)"/><path id="path10" class="cls-1" d="M59.78,106.32a2.9,2.9,0,0,1-.47,1,1.89,1.89,0,0,1-.64.72,3.06,3.06,0,0,1-2.46-1.6,5.3,5.3,0,0,1-3.82,1.68,3.94,3.94,0,0,1-3.1-1.2,4.43,4.43,0,0,1-1-2.79,3.89,3.89,0,0,1,1.44-3.34,5.72,5.72,0,0,1,3.73-1.12,21.53,21.53,0,0,1,2.31.08v-.8c0-1.43-.64-2.07-2-2.07a12.84,12.84,0,0,0-4.05,1,3.67,3.67,0,0,1-.88-2.39,14.16,14.16,0,0,1,5.73-1.2,4.54,4.54,0,0,1,3.26,1.12,4.34,4.34,0,0,1,1.27,3.35v5.41C59,105.28,59.23,105.92,59.78,106.32Zm-6.68-.64a3.62,3.62,0,0,0,2.63-1.28v-2.31a16.56,16.56,0,0,0-2-.08,2.14,2.14,0,0,0-1.67.56,1.92,1.92,0,0,0-.56,1.43,2.17,2.17,0,0,0,.48,1.36,2.6,2.6,0,0,0,1.11.32Z" transform="translate(0 0)"/><path id="path12" class="cls-1" d="M61.93,96.2a2.7,2.7,0,0,1,.48-1,1.87,1.87,0,0,1,.63-.72,3.35,3.35,0,0,1,2.79,2.39,3.54,3.54,0,0,1,3.42-2.39,9.8,9.8,0,0,1,1.51.16,6,6,0,0,1-.8,3.11,6.08,6.08,0,0,0-1.19-.16,3,3,0,0,0-2.63,1.75v8.45a11.72,11.72,0,0,1-1.59.16,11.94,11.94,0,0,1-1.67-.16V98.9a3.35,3.35,0,0,0-1-2.7Z" transform="translate(0 0)"/><path id="path14" class="cls-1" d="M83.08,106.32a2.75,2.75,0,0,1-.48,1A1.87,1.87,0,0,1,82,108a3.07,3.07,0,0,1-2.47-1.6,5.26,5.26,0,0,1-3.81,1.68,4,4,0,0,1-3.11-1.2,4.48,4.48,0,0,1-1-2.79A3.91,3.91,0,0,1,73,100.74a5.54,5.54,0,0,1,3.66-1.12A21.62,21.62,0,0,1,79,99.7v-.8c0-1.43-.64-2.07-2-2.07a12.89,12.89,0,0,0-4.06,1A3.71,3.71,0,0,1,72,95.4a14.14,14.14,0,0,1,5.72-1.2A4.51,4.51,0,0,1,81,95.32a4.31,4.31,0,0,1,1.28,3.35v5.41a2.67,2.67,0,0,0,.79,2.24Zm-6.68-.64A3.64,3.64,0,0,0,79,104.4v-2.31a16.64,16.64,0,0,0-2-.08,2.13,2.13,0,0,0-1.67.56,1.92,1.92,0,0,0-.56,1.43,2.17,2.17,0,0,0,.48,1.36,2.56,2.56,0,0,0,1.11.32Z" transform="translate(0 0)"/><path id="path16" class="cls-1" d="M86.34,106.24a9.07,9.07,0,0,1-1.19-5,7.37,7.37,0,0,1,1.51-5,4.69,4.69,0,0,1,3.66-1.84,5.22,5.22,0,0,1,3.57,1.36A3,3,0,0,1,96,94.6a2.06,2.06,0,0,1,.72.72c.16.32.31.56.47,1a3,3,0,0,0-.71,2.31v7.49c0,2.79-.48,4.78-1.35,6s-2.47,1.76-4.54,1.76a14,14,0,0,1-4.77-.88,3.6,3.6,0,0,1,.8-2.39,7.79,7.79,0,0,0,3.58.8,2.77,2.77,0,0,0,2.38-.88,3.84,3.84,0,0,0,.64-2.47v-1a5.13,5.13,0,0,1-3.34,1.28,4.35,4.35,0,0,1-3.5-2Zm6.76-2.16V98a3.53,3.53,0,0,0-2.31-1.12A2.06,2.06,0,0,0,89,98a6.74,6.74,0,0,0-.63,3.27,6.23,6.23,0,0,0,.55,3.1,1.93,1.93,0,0,0,1.51,1,3.13,3.13,0,0,0,2.63-1.28Z" transform="translate(0 0)"/><path id="path18" class="cls-1" d="M110,102.33h-7.4a4.2,4.2,0,0,0,.72,2.39,2.46,2.46,0,0,0,2.14.88,9.11,9.11,0,0,0,3.5-1,3.36,3.36,0,0,1,1,2,8.31,8.31,0,0,1-5.09,1.52,4.86,4.86,0,0,1-4.3-1.91,8.76,8.76,0,0,1-1.27-5,8.17,8.17,0,0,1,1.43-5,4.77,4.77,0,0,1,4.06-1.92,5.23,5.23,0,0,1,4.05,1.6,5.75,5.75,0,0,1,1.43,4.06,12.9,12.9,0,0,1-.23,2.39Zm-5.09-5.66c-1.43,0-2.23,1.12-2.31,3.27h4.61v-.32a4.2,4.2,0,0,0-.55-2.15,2.15,2.15,0,0,0-1.75-.8Z" transform="translate(0 0)"/><path id="path24-3-6" class="cls-4" d="M70.68,27a8.16,8.16,0,0,0-3.42.72L32.11,43.37A1.33,1.33,0,0,0,31.4,45h0c0,.08,0,.08.08.16l5.64,11.15h4.93l-.71-3.9c-.08-.32-.56-2.55-1-4.14l16.46,5.18a15,15,0,0,0,.88,2.86H84.27A15,15,0,0,0,85,53.49l16.38-5.1c-.48,1.59-1,3.82-1,4.14l-.71,3.9h4.93l5.56-11.07.08-.08.08-.16h0a.72.72,0,0,0,.08-.4,1.42,1.42,0,0,0-.79-1.27L74.41,27.83A7.86,7.86,0,0,0,70.68,27Z" transform="translate(0 0)"/><path id="path24-3" class="cls-5" d="M70.68,34.36a8.16,8.16,0,0,0-3.42.72L32.11,50.7a1.33,1.33,0,0,0-.71,1.67h0c0,.08,0,.08.08.16l3,6.06H41c-.24-.88-.48-1.92-.8-3l9.31,3H92l9.3-3c-.32,1-.56,2.07-.8,3H107l3-6,.08-.08.08-.16h0a.72.72,0,0,0,.08-.4,1.4,1.4,0,0,0-.79-1.27L74.33,35.08A9.58,9.58,0,0,0,70.68,34.36Z" transform="translate(0 0)"/><path id="path24" class="cls-4" d="M110.27,59.46a.72.72,0,0,1-.08.4h0l-.08.16h0l-.08.08L101.53,77c-1.2,2.31-3.34,2.23-3-.08l1.74-9.56c.08-.32.56-2.55,1-4.14l-16.38,5.1c-2.55,16.81-24.65,17-28.23,0L40.22,63.13c.48,1.59,1,3.82,1,4.14L43,76.83c.39,2.39-1.83,2.47-3,.08l-8.58-17c0-.08-.08-.08-.08-.16A1.22,1.22,0,0,1,32,58.11h0L67.1,42.49a9,9,0,0,1,7.07,0l35.15,15.62A1.49,1.49,0,0,1,110.27,59.46Z" transform="translate(0 0)"/><path id="path26" class="cls-6" d="M82,62.41l15.18-6.14a.74.74,0,0,0,.4-.87.66.66,0,0,0-.4-.4c-1.75-.72-4-1.59-6.12-2.47-.4-.16-4.13,2.55-4.45,2.79l-6.52,5.26C78.55,62,79.9,63.29,82,62.41Z" transform="translate(0 0)"/><ellipse id="circle28" class="cls-6" cx="70.99" cy="68.39" rx="7.95" ry="7.97"/><path id="path6-0" class="cls-3" d="M81.41,50.94a5.33,5.33,0,0,1-2.23-.24L51.51,43.21a9.66,9.66,0,0,1-2.06-1Z" transform="translate(0 0)"/><path id="path8-6" class="cls-1" d="M39.35,98h4.21c1.51,0,2.31.72,2.31,2.15v6.93A18.33,18.33,0,0,1,39,108.23a6.61,6.61,0,0,1-5.64-2.55,11.44,11.44,0,0,1-1.91-7c0-3,.79-5.26,2.38-6.86a7.94,7.94,0,0,1,5.81-2.47,10.75,10.75,0,0,1,6.2,1.92,3.61,3.61,0,0,1-.56,1.43,3.2,3.2,0,0,1-1,1,8.17,8.17,0,0,0-4.53-1.6,4.42,4.42,0,0,0-3.58,1.6c-.88,1.11-1.27,2.78-1.27,5.1,0,4.38,1.59,6.53,4.85,6.53a18.48,18.48,0,0,0,2.94-.32v-2.47a10.14,10.14,0,0,1,.08-1.75H40.62a2.05,2.05,0,0,1-1.19-.32,1.32,1.32,0,0,1-.4-1A9.18,9.18,0,0,1,39.35,98Z" transform="translate(0 0)"/><path id="path10-2" class="cls-1" d="M59.78,106.32a2.9,2.9,0,0,1-.47,1,1.89,1.89,0,0,1-.64.72,3.06,3.06,0,0,1-2.46-1.6,5.3,5.3,0,0,1-3.82,1.68,3.94,3.94,0,0,1-3.1-1.2,4.43,4.43,0,0,1-1-2.79,3.89,3.89,0,0,1,1.44-3.34,5.72,5.72,0,0,1,3.73-1.12,21.53,21.53,0,0,1,2.31.08v-.8c0-1.43-.64-2.07-2-2.07a12.84,12.84,0,0,0-4.05,1,3.67,3.67,0,0,1-.88-2.39,14.16,14.16,0,0,1,5.73-1.2,4.54,4.54,0,0,1,3.26,1.12,4.34,4.34,0,0,1,1.27,3.35v5.41C59,105.28,59.23,105.92,59.78,106.32Zm-6.68-.64a3.62,3.62,0,0,0,2.63-1.28v-2.31a16.56,16.56,0,0,0-2-.08,2.14,2.14,0,0,0-1.67.56,1.92,1.92,0,0,0-.56,1.43,2.17,2.17,0,0,0,.48,1.36,2.6,2.6,0,0,0,1.11.32Z" transform="translate(0 0)"/><path id="path12-6" class="cls-1" d="M61.93,96.2a2.7,2.7,0,0,1,.48-1,1.87,1.87,0,0,1,.63-.72,3.35,3.35,0,0,1,2.79,2.39,3.54,3.54,0,0,1,3.42-2.39,9.8,9.8,0,0,1,1.51.16,6,6,0,0,1-.8,3.11,6.08,6.08,0,0,0-1.19-.16,3,3,0,0,0-2.63,1.75v8.45a11.72,11.72,0,0,1-1.59.16,11.94,11.94,0,0,1-1.67-.16V98.9a3.35,3.35,0,0,0-1-2.7Z" transform="translate(0 0)"/><path id="path14-1" class="cls-1" d="M83.08,106.32a2.75,2.75,0,0,1-.48,1A1.87,1.87,0,0,1,82,108a3.07,3.07,0,0,1-2.47-1.6,5.26,5.26,0,0,1-3.81,1.68,4,4,0,0,1-3.11-1.2,4.48,4.48,0,0,1-1-2.79A3.91,3.91,0,0,1,73,100.74a5.54,5.54,0,0,1,3.66-1.12A21.62,21.62,0,0,1,79,99.7v-.8c0-1.43-.64-2.07-2-2.07a12.89,12.89,0,0,0-4.06,1A3.71,3.71,0,0,1,72,95.4a14.14,14.14,0,0,1,5.72-1.2A4.51,4.51,0,0,1,81,95.32a4.31,4.31,0,0,1,1.28,3.35v5.41a2.67,2.67,0,0,0,.79,2.24Zm-6.68-.64A3.64,3.64,0,0,0,79,104.4v-2.31a16.64,16.64,0,0,0-2-.08,2.13,2.13,0,0,0-1.67.56,1.92,1.92,0,0,0-.56,1.43,2.17,2.17,0,0,0,.48,1.36,2.56,2.56,0,0,0,1.11.32Z" transform="translate(0 0)"/><path id="path16-8" class="cls-1" d="M86.34,106.24a9.07,9.07,0,0,1-1.19-5,7.37,7.37,0,0,1,1.51-5,4.69,4.69,0,0,1,3.66-1.84,5.22,5.22,0,0,1,3.57,1.36A3,3,0,0,1,96,94.6a2.06,2.06,0,0,1,.72.72c.16.32.31.56.47,1a3,3,0,0,0-.71,2.31v7.49c0,2.79-.48,4.78-1.35,6s-2.47,1.76-4.54,1.76a14,14,0,0,1-4.77-.88,3.6,3.6,0,0,1,.8-2.39,7.79,7.79,0,0,0,3.58.8,2.77,2.77,0,0,0,2.38-.88,3.84,3.84,0,0,0,.64-2.47v-1a5.13,5.13,0,0,1-3.34,1.28,4.35,4.35,0,0,1-3.5-2Zm6.76-2.16V98a3.53,3.53,0,0,0-2.31-1.12A2.06,2.06,0,0,0,89,98a6.74,6.74,0,0,0-.63,3.27,6.23,6.23,0,0,0,.55,3.1,1.93,1.93,0,0,0,1.51,1,3.13,3.13,0,0,0,2.63-1.28Z" transform="translate(0 0)"/><path id="path18-7" class="cls-1" d="M110,102.33h-7.4a4.2,4.2,0,0,0,.72,2.39,2.46,2.46,0,0,0,2.14.88,9.11,9.11,0,0,0,3.5-1,3.36,3.36,0,0,1,1,2,8.31,8.31,0,0,1-5.09,1.52,4.86,4.86,0,0,1-4.3-1.91,8.76,8.76,0,0,1-1.27-5,8.17,8.17,0,0,1,1.43-5,4.77,4.77,0,0,1,4.06-1.92,5.23,5.23,0,0,1,4.05,1.6,5.75,5.75,0,0,1,1.43,4.06,12.9,12.9,0,0,1-.23,2.39Zm-5.09-5.66c-1.43,0-2.23,1.12-2.31,3.27h4.61v-.32a4.2,4.2,0,0,0-.55-2.15,2.15,2.15,0,0,0-1.75-.8Z" transform="translate(0 0)"/><path id="path24-3-6-9" class="cls-7" d="M70.68,27a8.16,8.16,0,0,0-3.42.72L32.11,43.37A1.33,1.33,0,0,0,31.4,45h0c0,.08,0,.08.08.16l5.64,11.15h4.93l-.71-3.9c-.08-.32-.56-2.55-1-4.14l16.46,5.18a15,15,0,0,0,.88,2.86H84.27A15,15,0,0,0,85,53.49l16.38-5.1c-.48,1.59-1,3.82-1,4.14l-.71,3.9h4.93l5.56-11.07.08-.08.08-.16h0a.72.72,0,0,0,.08-.4,1.42,1.42,0,0,0-.79-1.27L74.41,27.83A7.86,7.86,0,0,0,70.68,27Z" transform="translate(0 0)"/><path id="path24-3-2" class="cls-1" d="M70.68,34.36a8.16,8.16,0,0,0-3.42.72L32.11,50.7a1.33,1.33,0,0,0-.71,1.67h0c0,.08,0,.08.08.16l3,6.06H41c-.24-.88-.48-1.92-.8-3l9.31,3H92l9.3-3c-.32,1-.56,2.07-.8,3H107l3-6,.08-.08.08-.16h0a.72.72,0,0,0,.08-.4,1.4,1.4,0,0,0-.79-1.27L74.33,35.08A9.58,9.58,0,0,0,70.68,34.36Z" transform="translate(0 0)"/><path id="path24-0" class="cls-7" d="M110.27,59.46a.72.72,0,0,1-.08.4h0l-.08.16h0l-.08.08L101.53,77c-1.2,2.31-3.34,2.23-3-.08l1.74-9.56c.08-.32.56-2.55,1-4.14l-16.38,5.1c-2.55,16.81-24.65,17-28.23,0L40.22,63.13c.48,1.59,1,3.82,1,4.14L43,76.83c.39,2.39-1.83,2.47-3,.08l-8.58-17c0-.08-.08-.08-.08-.16A1.22,1.22,0,0,1,32,58.11h0L67.1,42.49a9,9,0,0,1,7.07,0l35.15,15.62A1.49,1.49,0,0,1,110.27,59.46Z" transform="translate(0 0)"/><path id="path26-2" class="cls-1" d="M82,62.41l15.18-6.14a.74.74,0,0,0,.4-.87.66.66,0,0,0-.4-.4c-1.75-.72-4-1.59-6.12-2.47-.4-.16-4.13,2.55-4.45,2.79l-6.52,5.26C78.55,62,79.9,63.29,82,62.41Z" transform="translate(0 0)"/><ellipse id="circle28-3" class="cls-1" cx="70.99" cy="68.39" rx="7.95" ry="7.97"/></svg> \ No newline at end of file
diff --git a/doc/talks/.envrc b/doc/talks/.envrc
new file mode 100644
index 00000000..4a4726a5
--- /dev/null
+++ b/doc/talks/.envrc
@@ -0,0 +1 @@
+use_nix
diff --git a/doc/talks/2023-01-18-tocatta/.gitignore b/doc/talks/2023-01-18-tocatta/.gitignore
new file mode 100644
index 00000000..9f1f00e6
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/.gitignore
@@ -0,0 +1,17 @@
+*
+
+!*.txt
+!*.md
+
+!assets
+
+!.gitignore
+!*.svg
+!*.png
+!*.jpg
+!*.tex
+!Makefile
+!.gitignore
+!assets/*.drawio.pdf
+
+!talk.pdf
diff --git a/doc/talks/2023-01-18-tocatta/Makefile b/doc/talks/2023-01-18-tocatta/Makefile
new file mode 100644
index 00000000..554f7b97
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/Makefile
@@ -0,0 +1,34 @@
+ASSETS=assets/consistent_hashing_1.pdf \
+ assets/consistent_hashing_2.pdf \
+ assets/consistent_hashing_3.pdf \
+ assets/consistent_hashing_4.pdf \
+ assets/garage_tables.pdf \
+ assets/consensus.pdf_tex \
+ assets/lattice1.pdf_tex \
+ assets/lattice2.pdf_tex \
+ assets/lattice3.pdf_tex \
+ assets/lattice4.pdf_tex \
+ assets/lattice5.pdf_tex \
+ assets/lattice6.pdf_tex \
+ assets/lattice7.pdf_tex \
+ assets/lattice8.pdf_tex \
+ assets/latticeB_1.pdf_tex \
+ assets/latticeB_2.pdf_tex \
+ assets/latticeB_3.pdf_tex \
+ assets/latticeB_4.pdf_tex \
+ assets/latticeB_5.pdf_tex \
+ assets/latticeB_6.pdf_tex \
+ assets/latticeB_7.pdf_tex \
+ assets/latticeB_8.pdf_tex \
+ assets/latticeB_9.pdf_tex \
+ assets/latticeB_10.pdf_tex \
+ assets/deuxfleurs.pdf
+
+talk.pdf: talk.tex $(ASSETS)
+ pdflatex talk.tex
+
+assets/%.pdf: assets/%.svg
+ inkscape -D -z --file=$^ --export-pdf=$@
+
+assets/%.pdf_tex: assets/%.svg
+ inkscape -D -z --file=$^ --export-pdf=$@ --export-latex
diff --git a/doc/talks/2023-01-18-tocatta/abstract.md b/doc/talks/2023-01-18-tocatta/abstract.md
new file mode 100644
index 00000000..b2658868
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/abstract.md
@@ -0,0 +1,39 @@
+### (fr) Garage, un système de stockage de données géo-distribué léger et robuste
+
+Garage est un système de stockage de données léger, géo-distribué, qui
+implémente le protocole de stockage S3 de Amazon. Garage est destiné
+principalement à l'auto-hébergement sur du matériel courant d'occasion. À ce
+titre, il doit tolérer un grand nombre de pannes: coupures de courant, coupures
+de connexion Internet, pannes de machines, ... Il doit également être facile à
+déployer et à maintenir, afin de pouvoir être facilement utilisé par des
+amateurs ou des petites organisations.
+
+Cette présentation vous proposera un aperçu de Garage et du choix technique
+principal qui rend un système comme Garage possible: le refus d'utiliser des
+algorithmes de consensus, remplacés avantageusement par des méthodes à
+cohérence faible. Notre modèle est fortement inspiré de la base de donnée
+Dynamo (DeCandia et al, 2007), et fait usage des types de données CRDT (Shapiro
+et al, 2011). Nous exploreront comment ces méthodes s'appliquent à la
+construction de l'abstraction "stockage objet" dans un système distribué, et
+quelles autres abstractions peuvent ou ne peuvent pas être construites dans ce
+modèle.
+
+### (en) Garage, a lightweight and robust geo-distributed data storage system
+
+Garage is a lightweight geo-distributed data store that implements the Amazon
+S3 object storage protocol. Garage is meant primarily for self-hosting at home
+on second-hand commodity hardware, meaning it has to tolerate a wide variety of
+failure scenarios such as power cuts, Internet disconnections and machine
+crashes. It also has to be easy to deploy and maintain, so that hobbyists and
+small organizations can use it without trouble.
+
+This talk will present Garage and the key technical choice that made Garage
+possible: refusing to use consensus algorithms and using instead weak
+consistency methods, with a model that is loosely based on that of the Dynamo
+database (DeCandia et al, 2007) and that makes heavy use of conflict-free
+replicated data types (Shapiro et al, 2011). We will explore how these methods
+are suited to building the "object store" abstraction in a distributed system,
+and what other abstractions are possible or impossible to build in this model.
+
+
+
diff --git a/doc/talks/2023-01-18-tocatta/assets/AGPLv3_Logo.png b/doc/talks/2023-01-18-tocatta/assets/AGPLv3_Logo.png
new file mode 100644
index 00000000..445284a3
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/AGPLv3_Logo.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme.png b/doc/talks/2023-01-18-tocatta/assets/aerogramme.png
new file mode 100644
index 00000000..3aabe3ad
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme.svg b/doc/talks/2023-01-18-tocatta/assets/aerogramme.svg
new file mode 100644
index 00000000..0c1ee127
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme.svg
@@ -0,0 +1,1241 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1280"
+ height="720"
+ viewBox="0 0 338.66667 190.5"
+ version="1.1"
+ id="svg5"
+ inkscape:export-filename="aerogramme.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ sodipodi:docname="aerogramme.svg"
+ inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
+ xml:space="preserve"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ units="px"
+ inkscape:snap-global="false"
+ inkscape:zoom="0.54488787"
+ inkscape:cx="574.43011"
+ inkscape:cy="349.61321"
+ inkscape:window-width="1678"
+ inkscape:window-height="993"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1"
+ inkscape:showpageshadow="2"
+ inkscape:deskcolor="#d1d1d1" /><defs
+ id="defs2"><marker
+ style="overflow:visible;"
+ id="Arrow1Mend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"><path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path12266" /></marker><marker
+ style="overflow:visible;"
+ id="Arrow1Lend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true"><path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path12260" /></marker><marker
+ style="overflow:visible"
+ id="Arrow1Mend-3"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"
+ viewBox="0 0 8.886927 5.078244"
+ markerWidth="8.8869267"
+ markerHeight="5.0782442"
+ preserveAspectRatio="xMidYMid"><path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path12266-5" /></marker><style
+ id="style2">.cls-1{fill:#3b2100;}.cls-2{fill:#ffd952;}.cls-3{fill:#45c8ff;}</style><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5100"
+ id="linearGradient5094"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(266.85692,297.64826)"
+ x1="192.00021"
+ y1="140.29999"
+ x2="192"
+ y2="332.29999" /><linearGradient
+ inkscape:collect="always"
+ id="linearGradient5100"><stop
+ style="stop-color:#fbfcfc;stop-opacity:0.1"
+ offset="0"
+ id="stop5096" /><stop
+ style="stop-color:#fbfcfc;stop-opacity:0;"
+ offset="1"
+ id="stop5098" /></linearGradient><radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5100"
+ id="radialGradient5715"
+ cx="2.5446666e-06"
+ cy="243.20909"
+ fx="2.5446666e-06"
+ fy="243.20909"
+ r="76.000107"
+ gradientTransform="matrix(2.526312,2.526312,-2.5263122,2.5263122,881.27923,-176.47384)"
+ gradientUnits="userSpaceOnUse" /><filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter13488"
+ x="-0.14"
+ width="1.28"
+ y="-0.105"
+ height="1.21"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="1.4"
+ id="feGaussianBlur13490" /></filter><filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter13338"
+ x="-0.056"
+ width="1.112"
+ y="-0.042"
+ height="1.084"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.56"
+ id="feGaussianBlur13340" /></filter><filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter13052"
+ x="-0.063652175"
+ width="1.1273044"
+ y="-0.038526317"
+ height="1.0770526"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="2.44"
+ id="feGaussianBlur13054" /></filter><filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter13165"
+ x="-0.063652175"
+ width="1.1273044"
+ y="-0.038526317"
+ height="1.0770526"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="2.44"
+ id="feGaussianBlur13167" /></filter><linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient14074"
+ id="linearGradient14078"
+ gradientUnits="userSpaceOnUse"
+ x1="80"
+ y1="252.29999"
+ x2="80"
+ y2="280.29999"
+ gradientTransform="translate(266.85714,297.64826)" /><linearGradient
+ inkscape:collect="always"
+ id="linearGradient14074"><stop
+ style="stop-color:#4d6570;stop-opacity:1"
+ offset="0"
+ id="stop14070" /><stop
+ style="stop-color:#4d6570;stop-opacity:0.06"
+ offset="1"
+ id="stop14072" /></linearGradient><filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter12606"
+ x="-0.033333331"
+ width="1.0666667"
+ y="-0.085714286"
+ height="1.1714286"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="2"
+ id="feGaussianBlur12608" /></filter><filter
+ inkscape:collect="always"
+ style="color-interpolation-filters:sRGB"
+ id="filter13315"
+ x="-0.054750001"
+ width="1.1095"
+ y="-0.042731701"
+ height="1.0854634"><feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="2.9199997"
+ id="feGaussianBlur13317" /></filter><filter
+ id="Adobe_OpacityMaskFilter"
+ filterUnits="userSpaceOnUse"
+ x="162.68"
+ y="18.355"
+ width="14.927"
+ height="6.629">
+ <feColorMatrix
+ type="matrix"
+ values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"
+ id="feColorMatrix10045" />
+ </filter><marker
+ style="overflow:visible"
+ id="Arrow1Mend-3-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"
+ viewBox="0 0 8.886927 5.078244"
+ markerWidth="8.8869267"
+ markerHeight="5.0782442"
+ preserveAspectRatio="xMidYMid"><path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path12266-5-2" /></marker><marker
+ style="overflow:visible"
+ id="Arrow1Mend-3-1"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"
+ viewBox="0 0 8.886927 5.078244"
+ markerWidth="8.8869267"
+ markerHeight="5.0782442"
+ preserveAspectRatio="xMidYMid"><path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path12266-5-27" /></marker><marker
+ style="overflow:visible"
+ id="Arrow1Mend-3-1-6"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"
+ viewBox="0 0 8.886927 5.078244"
+ markerWidth="8.8869267"
+ markerHeight="5.0782442"
+ preserveAspectRatio="xMidYMid"><path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path12266-5-27-2" /></marker><marker
+ style="overflow:visible"
+ id="Arrow1Mend-3-1-6-9"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"
+ viewBox="0 0 8.886927 5.078244"
+ markerWidth="8.8869267"
+ markerHeight="5.0782442"
+ preserveAspectRatio="xMidYMid"><path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path12266-5-27-2-2" /></marker></defs><g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"><text
+ xml:space="preserve"
+ style="font-size:12.5157px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="269.40045"
+ y="46.856514"
+ id="text4115-3-7"><tspan
+ sodipodi:role="line"
+ style="font-size:12.5157px;stroke-width:0.264583"
+ x="269.40045"
+ y="46.856514"
+ id="tspan4117-6-5">K2V API</tspan></text><text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="269.39954"
+ y="152.73567"
+ id="text4115-3-7-3"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="269.39954"
+ y="152.73567"
+ id="tspan559">S3 API</tspan></text><text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="147.04097"
+ y="116.71946"
+ id="text4115-3-7-3-3"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="147.04097"
+ y="116.71946"
+ id="tspan559-5">Aerogramme</tspan></text><g
+ id="g329"
+ transform="matrix(0.31121703,0,0,0.31121703,268.86086,51.929088)"
+ style="stroke-width:0.850155"><g
+ id="g1663"
+ transform="matrix(1.7099534,0,0,1.7099534,-88.607712,-87.994557)"
+ style="stroke-width:0.850155"><path
+ d="m 138.33068,100.19817 a 8.327649,8.327649 0 0 1 -2.77589,-0.288688 l -34.78736,-9.388036 a 8.4442361,8.4442361 0 0 1 -2.620433,-1.238044 z"
+ id="path6"
+ style="stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 85.377935,159.27452 5.163143,-0.0333 h 0.06662 q 2.864711,0 2.864711,2.69816 v 8.69407 a 24.849705,24.849705 0 0 1 -8.649651,1.43235 q -4.730105,0 -7.128468,-3.21447 -2.398363,-3.21447 -2.398363,-8.76068 0,-5.55177 2.981299,-8.62745 a 9.7600046,9.7600046 0 0 1 7.29502,-3.08123 13.368653,13.368653 0 0 1 7.811335,2.43167 3.9250986,3.9250986 0 0 1 -0.682867,1.76547 4.7634152,4.7634152 0 0 1 -1.282458,1.33242 9.798867,9.798867 0 0 0 -5.679457,-1.96533 5.3574542,5.3574542 0 0 0 -4.480275,2.04861 q -1.598909,2.03749 -1.598909,6.41229 0,8.22771 6.062529,8.22771 a 16.910679,16.910679 0 0 0 3.697476,-0.43303 v -3.16451 q 0,-1.49898 0.06662,-2.22071 h -2.442777 a 2.2873276,2.2873276 0 0 1 -1.515632,-0.41638 1.6655298,1.6655298 0 0 1 -0.483004,-1.33242 5.7072154,5.7072154 0 0 1 0.333106,-1.79322 z"
+ id="path8"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 111.07151,169.73404 a 4.3137222,4.3137222 0 0 1 -0.55518,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05902,-1.95422 6.7453957,6.7453957 0 0 1 -4.76342,2.13188 q -2.564913,0 -3.886233,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.299113,-3.4643 q 0,-2.77588 1.815427,-4.21379 a 7.3338829,7.3338829 0 0 1 4.669039,-1.3935 q 1.53228,0 2.89802,0.13325 v -0.99932 q 0,-2.63154 -2.53161,-2.63154 -1.79877,0 -5.096518,1.19918 a 4.674587,4.674587 0 0 1 -1.110353,-2.96464 18.581761,18.581761 0 0 1 7.217291,-1.49898 5.8682167,5.8682167 0 0 1 4.0639,1.39905 q 1.56559,1.39904 1.56559,4.23044 v 6.79537 q -0.0111,1.83208 0.9216,2.59822 z m -8.36096,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06525,0.68842 2.3928111,2.3928111 0 0 0 -0.69953,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.55518 z"
+ id="path10"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 113.76966,157.00939 a 3.986168,3.986168 0 0 1 0.55518,-1.21583 3.3310596,3.3310596 0 0 1 0.84942,-0.94935 4.1638245,4.1638245 0 0 1 3.51427,2.96464 q 1.33242,-2.96464 4.29707,-2.96464 a 10.215249,10.215249 0 0 1 1.93201,0.23317 7.4782288,7.4782288 0 0 1 -0.99932,3.88624 8.4497879,8.4497879 0 0 0 -1.49897,-0.19987 q -2.03195,0 -3.26444,2.16519 v 10.64829 a 11.575432,11.575432 0 0 1 -2.03195,0.16655 12.769062,12.769062 0 0 1 -2.09857,-0.16655 v -11.15905 q -0.0222,-2.40947 -1.2547,-3.40879 z"
+ id="path12"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 140.38483,169.73404 a 4.3137222,4.3137222 0 0 1 -0.58293,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05348,-1.95422 6.7453957,6.7453957 0 0 1 -4.76341,2.13188 q -2.56492,0 -3.88624,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.29911,-3.4643 q 0,-2.77588 1.81543,-4.21379 a 7.3338829,7.3338829 0 0 1 4.64682,-1.4157 q 1.53229,0 2.89803,0.13324 v -0.99932 q 0,-2.63153 -2.53161,-2.63153 -1.79877,0 -5.09652,1.19918 a 4.674587,4.674587 0 0 1 -1.11035,-2.96465 18.581761,18.581761 0 0 1 7.21729,-1.49897 5.8682167,5.8682167 0 0 1 4.0639,1.39904 q 1.56559,1.39905 1.56559,4.23045 v 6.81757 q 0.0333,1.83208 0.96601,2.59822 z m -8.37206,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06526,0.69952 2.3928111,2.3928111 0 0 0 -0.69952,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.54408 z"
+ id="path14"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 144.48203,169.6008 q -1.49897,-2.29843 -1.49897,-6.34567 0,-4.04724 1.8987,-6.34567 a 5.740526,5.740526 0 0 1 4.56355,-2.29843 6.4400486,6.4400486 0 0 1 4.49693,1.66553 3.7696491,3.7696491 0 0 1 2.63154,-1.43235 3.1200925,3.1200925 0 0 1 0.88273,0.93269 3.8862362,3.8862362 0 0 1 0.55518,1.16587 q -0.9327,0.79946 -0.9327,2.86472 v 9.438 q 0,5.29638 -1.73215,7.49488 -1.73215,2.1985 -5.69611,2.22071 a 16.100121,16.100121 0 0 1 -5.9626,-1.11036 4.4802752,4.4802752 0 0 1 1.03263,-3.03126 10.892565,10.892565 0 0 0 4.48028,1.03263 q 2.18184,0 3.0146,-1.11035 a 4.9965894,4.9965894 0 0 0 0.83277,-3.06458 v -1.33242 a 6.4011862,6.4011862 0 0 1 -4.16383,1.56559 4.9188647,4.9188647 0 0 1 -4.40255,-2.30953 z m 8.56083,-2.69816 v -7.72806 a 4.2915151,4.2915151 0 0 0 -2.86471,-1.36573 2.4039147,2.4039147 0 0 0 -2.18185,1.43235 8.6885138,8.6885138 0 0 0 -0.7828,4.09721 q 0,2.66485 0.71618,3.93065 a 2.1318781,2.1318781 0 0 0 1.88205,1.2658 4.2304457,4.2304457 0 0 0 3.23113,-1.63222 z"
+ id="path16"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 174.20619,164.67083 h -9.32697 a 5.6405943,5.6405943 0 0 0 0.88273,3.04792 q 0.7828,1.0826 2.74813,1.0826 a 10.120869,10.120869 0 0 0 4.36369,-1.16587 4.3803434,4.3803434 0 0 1 1.19918,2.5316 10.759323,10.759323 0 0 1 -6.41229,1.8987 q -3.74744,0 -5.37966,-2.43167 -1.63222,-2.43167 -1.63222,-6.2957 0,-3.88624 1.79877,-6.2957 a 6.0181143,6.0181143 0 0 1 5.14649,-2.43168 q 3.33106,0 5.14648,2.01529 a 7.3449864,7.3449864 0 0 1 1.79878,5.07987 13.04665,13.04665 0 0 1 -0.33311,2.96464 z m -6.42895,-7.06184 q -2.73146,0 -2.93133,4.13051 h 5.79605 v -0.39973 a 4.7245529,4.7245529 0 0 0 -0.69953,-2.69816 2.4316735,2.4316735 0 0 0 -2.14298,-1.03262 z"
+ id="path18"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ id="path24-3-6"
+ style="fill:#ffd952;fill-opacity:1;stroke-width:0.471988"
+ d="m 124.80273,70.162462 a 11.0036,11.0036 0 0 0 -4.33203,0.935547 L 76.261719,90.656602 a 1.5989086,1.5989086 0 0 0 -0.837891,2.138672 0.77169547,0.77169547 0 0 0 0.06641,0.177735 l 7.09375,14.021481 h 6.15625 l -0.875,-4.88867 c -0.07217,-0.39418 -0.711263,-3.187532 -1.316406,-5.197264 l 20.691398,6.462894 c 0.27198,1.28839 0.63292,2.49204 1.0625,3.62304 h 33.54883 c 0.36964,-1.13128 0.66138,-2.33705 0.85938,-3.62304 l 20.64648,-6.445316 c -0.60514,2.009734 -1.23639,4.785506 -1.30859,5.179686 l -0.875,4.88867 h 6.15429 l 7.02735,-13.894528 0.0664,-0.126953 0.0684,-0.171875 a 0.10548355,0.10548355 0 0 0 0,-0.04492 1.4878733,1.4878733 0 0 0 0.0664,-0.515625 1.5822533,1.5822533 0 0 0 -0.99414,-1.583985 L 129.35352,71.098009 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ id="path24-3"
+ style="fill:#49c8fa;fill-opacity:1;stroke-width:0.471988"
+ d="M 124.80273,79.416133 A 11.0036,11.0036 0 0 0 120.4707,80.35168 L 76.261719,99.910272 a 1.5989086,1.5989086 0 0 0 -0.837891,2.136718 0.77169547,0.77169547 0 0 0 0.06641,0.17773 l 3.847657,7.60352 h 8.175781 c -0.257897,-1.08856 -0.591943,-2.42953 -0.964844,-3.66797 l 11.744141,3.66797 h 53.371087 l 11.69336,-3.65039 c -0.37193,1.23522 -0.70076,2.56719 -0.95703,3.65039 h 8.17383 l 3.78125,-7.47656 0.0664,-0.12696 0.0684,-0.17187 a 0.10548355,0.10548355 0 0 0 0,-0.0449 1.4878733,1.4878733 0 0 0 0.0664,-0.51563 1.5822533,1.5822533 0 0 0 -0.99414,-1.582028 L 129.35352,80.35168 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ class="cls-2"
+ d="m 174.55595,110.92974 a 1.4878733,1.4878733 0 0 1 -0.0666,0.51631 0.10548355,0.10548355 0 0 1 0,0.0444 l -0.0666,0.17211 v 0 l -0.0666,0.12769 -10.69826,21.15223 c -1.48787,2.93688 -4.22489,2.84806 -3.76409,-0.12214 l 2.15408,-12.02512 c 0.0722,-0.39418 0.70508,-3.17006 1.31022,-5.1798 l -20.64702,6.4456 c -3.24223,21.05785 -30.95109,21.40761 -35.47023,0 l -20.691432,-6.46226 c 0.605143,2.00974 1.243596,4.80228 1.315769,5.19646 l 2.154085,12.02512 c 0.460796,2.9702 -2.276224,3.05902 -3.764098,0.12214 L 75.49024,111.66257 a 0.77169547,0.77169547 0 0 1 -0.06662,-0.17766 1.5989086,1.5989086 0 0 1 0.838317,-2.13743 L 120.47065,89.788613 a 11.0036,11.0036 0 0 1 8.88282,0 l 44.20871,19.558867 a 1.5822533,1.5822533 0 0 1 0.99377,1.58226 z"
+ id="path24"
+ style="stroke-width:0.471988" /><path
+ class="cls-3"
+ d="m 139.0413,114.61611 19.11473,-7.69475 a 0.81055784,0.81055784 0 0 0 0,-1.50453 c -2.2207,-0.92714 -4.96328,-1.99308 -7.65033,-3.10899 -0.49411,-0.20541 -5.17425,3.15341 -5.60173,3.49762 l -8.23882,6.58439 c -1.99309,1.67108 -0.26649,3.28665 2.37615,2.22626 z"
+ id="path26"
+ style="stroke-width:0.471988" /><circle
+ class="cls-3"
+ cx="125.18409"
+ cy="122.13319"
+ r="9.9654207"
+ id="circle28"
+ style="stroke-width:0.471988" /><path
+ d="m 138.33068,100.19817 a 8.327649,8.327649 0 0 1 -2.77589,-0.288688 l -34.78736,-9.388036 a 8.4442361,8.4442361 0 0 1 -2.620433,-1.238044 z"
+ id="path6-0"
+ style="stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 85.377935,159.27452 5.163143,-0.0333 h 0.06662 q 2.864711,0 2.864711,2.69816 v 8.69407 a 24.849705,24.849705 0 0 1 -8.649651,1.43235 q -4.730105,0 -7.128468,-3.21447 -2.398363,-3.21447 -2.398363,-8.76068 0,-5.55177 2.981299,-8.62745 a 9.7600046,9.7600046 0 0 1 7.29502,-3.08123 13.368653,13.368653 0 0 1 7.811335,2.43167 3.9250986,3.9250986 0 0 1 -0.682867,1.76547 4.7634152,4.7634152 0 0 1 -1.282458,1.33242 9.798867,9.798867 0 0 0 -5.679457,-1.96533 5.3574542,5.3574542 0 0 0 -4.480275,2.04861 q -1.598909,2.03749 -1.598909,6.41229 0,8.22771 6.062529,8.22771 a 16.910679,16.910679 0 0 0 3.697476,-0.43303 v -3.16451 q 0,-1.49898 0.06662,-2.22071 h -2.442777 a 2.2873276,2.2873276 0 0 1 -1.515632,-0.41638 1.6655298,1.6655298 0 0 1 -0.483004,-1.33242 5.7072154,5.7072154 0 0 1 0.333106,-1.79322 z"
+ id="path8-6"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 111.07151,169.73404 a 4.3137222,4.3137222 0 0 1 -0.55518,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05902,-1.95422 6.7453957,6.7453957 0 0 1 -4.76342,2.13188 q -2.564913,0 -3.886233,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.299113,-3.4643 q 0,-2.77588 1.815427,-4.21379 a 7.3338829,7.3338829 0 0 1 4.669039,-1.3935 q 1.53228,0 2.89802,0.13325 v -0.99932 q 0,-2.63154 -2.53161,-2.63154 -1.79877,0 -5.096518,1.19918 a 4.674587,4.674587 0 0 1 -1.110353,-2.96464 18.581761,18.581761 0 0 1 7.217291,-1.49898 5.8682167,5.8682167 0 0 1 4.0639,1.39905 q 1.56559,1.39904 1.56559,4.23044 v 6.79537 q -0.0111,1.83208 0.9216,2.59822 z m -8.36096,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06525,0.68842 2.3928111,2.3928111 0 0 0 -0.69953,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.55518 z"
+ id="path10-2"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 113.76966,157.00939 a 3.986168,3.986168 0 0 1 0.55518,-1.21583 3.3310596,3.3310596 0 0 1 0.84942,-0.94935 4.1638245,4.1638245 0 0 1 3.51427,2.96464 q 1.33242,-2.96464 4.29707,-2.96464 a 10.215249,10.215249 0 0 1 1.93201,0.23317 7.4782288,7.4782288 0 0 1 -0.99932,3.88624 8.4497879,8.4497879 0 0 0 -1.49897,-0.19987 q -2.03195,0 -3.26444,2.16519 v 10.64829 a 11.575432,11.575432 0 0 1 -2.03195,0.16655 12.769062,12.769062 0 0 1 -2.09857,-0.16655 v -11.15905 q -0.0222,-2.40947 -1.2547,-3.40879 z"
+ id="path12-6"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 140.38483,169.73404 a 4.3137222,4.3137222 0 0 1 -0.58293,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05348,-1.95422 6.7453957,6.7453957 0 0 1 -4.76341,2.13188 q -2.56492,0 -3.88624,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.29911,-3.4643 q 0,-2.77588 1.81543,-4.21379 a 7.3338829,7.3338829 0 0 1 4.64682,-1.4157 q 1.53229,0 2.89803,0.13324 v -0.99932 q 0,-2.63153 -2.53161,-2.63153 -1.79877,0 -5.09652,1.19918 a 4.674587,4.674587 0 0 1 -1.11035,-2.96465 18.581761,18.581761 0 0 1 7.21729,-1.49897 5.8682167,5.8682167 0 0 1 4.0639,1.39904 q 1.56559,1.39905 1.56559,4.23045 v 6.81757 q 0.0333,1.83208 0.96601,2.59822 z m -8.37206,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06526,0.69952 2.3928111,2.3928111 0 0 0 -0.69952,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.54408 z"
+ id="path14-1"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 144.48203,169.6008 q -1.49897,-2.29843 -1.49897,-6.34567 0,-4.04724 1.8987,-6.34567 a 5.740526,5.740526 0 0 1 4.56355,-2.29843 6.4400486,6.4400486 0 0 1 4.49693,1.66553 3.7696491,3.7696491 0 0 1 2.63154,-1.43235 3.1200925,3.1200925 0 0 1 0.88273,0.93269 3.8862362,3.8862362 0 0 1 0.55518,1.16587 q -0.9327,0.79946 -0.9327,2.86472 v 9.438 q 0,5.29638 -1.73215,7.49488 -1.73215,2.1985 -5.69611,2.22071 a 16.100121,16.100121 0 0 1 -5.9626,-1.11036 4.4802752,4.4802752 0 0 1 1.03263,-3.03126 10.892565,10.892565 0 0 0 4.48028,1.03263 q 2.18184,0 3.0146,-1.11035 a 4.9965894,4.9965894 0 0 0 0.83277,-3.06458 v -1.33242 a 6.4011862,6.4011862 0 0 1 -4.16383,1.56559 4.9188647,4.9188647 0 0 1 -4.40255,-2.30953 z m 8.56083,-2.69816 v -7.72806 a 4.2915151,4.2915151 0 0 0 -2.86471,-1.36573 2.4039147,2.4039147 0 0 0 -2.18185,1.43235 8.6885138,8.6885138 0 0 0 -0.7828,4.09721 q 0,2.66485 0.71618,3.93065 a 2.1318781,2.1318781 0 0 0 1.88205,1.2658 4.2304457,4.2304457 0 0 0 3.23113,-1.63222 z"
+ id="path16-8"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-1"
+ d="m 174.20619,164.67083 h -9.32697 a 5.6405943,5.6405943 0 0 0 0.88273,3.04792 q 0.7828,1.0826 2.74813,1.0826 a 10.120869,10.120869 0 0 0 4.36369,-1.16587 4.3803434,4.3803434 0 0 1 1.19918,2.5316 10.759323,10.759323 0 0 1 -6.41229,1.8987 q -3.74744,0 -5.37966,-2.43167 -1.63222,-2.43167 -1.63222,-6.2957 0,-3.88624 1.79877,-6.2957 a 6.0181143,6.0181143 0 0 1 5.14649,-2.43168 q 3.33106,0 5.14648,2.01529 a 7.3449864,7.3449864 0 0 1 1.79878,5.07987 13.04665,13.04665 0 0 1 -0.33311,2.96464 z m -6.42895,-7.06184 q -2.73146,0 -2.93133,4.13051 h 5.79605 v -0.39973 a 4.7245529,4.7245529 0 0 0 -0.69953,-2.69816 2.4316735,2.4316735 0 0 0 -2.14298,-1.03262 z"
+ id="path18-7"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><path
+ id="path24-3-6-9"
+ style="fill:#ff9329;fill-opacity:1;stroke-width:0.471988"
+ d="m 124.80273,70.162462 a 11.0036,11.0036 0 0 0 -4.33203,0.935547 L 76.261719,90.656602 a 1.5989086,1.5989086 0 0 0 -0.837891,2.138672 0.77169547,0.77169547 0 0 0 0.06641,0.177735 l 7.09375,14.021481 h 6.15625 l -0.875,-4.88867 c -0.07217,-0.39418 -0.711263,-3.187532 -1.316406,-5.197264 l 20.691398,6.462894 c 0.27198,1.28839 0.63292,2.49204 1.0625,3.62304 h 33.54883 c 0.36964,-1.13128 0.66138,-2.33705 0.85938,-3.62304 l 20.64648,-6.445316 c -0.60514,2.009734 -1.23639,4.785506 -1.30859,5.179686 l -0.875,4.88867 h 6.15429 l 7.02735,-13.894528 0.0664,-0.126953 0.0684,-0.171875 a 0.10548355,0.10548355 0 0 0 0,-0.04492 1.4878733,1.4878733 0 0 0 0.0664,-0.515625 1.5822533,1.5822533 0 0 0 -0.99414,-1.583985 L 129.35352,71.098009 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ id="path24-3-2"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988"
+ d="M 124.80273,79.416133 A 11.0036,11.0036 0 0 0 120.4707,80.35168 L 76.261719,99.910272 a 1.5989086,1.5989086 0 0 0 -0.837891,2.136718 0.77169547,0.77169547 0 0 0 0.06641,0.17773 l 3.847657,7.60352 h 8.175781 c -0.257897,-1.08856 -0.591943,-2.42953 -0.964844,-3.66797 l 11.744141,3.66797 h 53.371087 l 11.69336,-3.65039 c -0.37193,1.23522 -0.70076,2.56719 -0.95703,3.65039 h 8.17383 l 3.78125,-7.47656 0.0664,-0.12696 0.0684,-0.17187 a 0.10548355,0.10548355 0 0 0 0,-0.0449 1.4878733,1.4878733 0 0 0 0.0664,-0.51563 1.5822533,1.5822533 0 0 0 -0.99414,-1.582028 L 129.35352,80.35168 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ class="cls-2"
+ d="m 174.55595,110.92974 a 1.4878733,1.4878733 0 0 1 -0.0666,0.51631 0.10548355,0.10548355 0 0 1 0,0.0444 l -0.0666,0.17211 v 0 l -0.0666,0.12769 -10.69826,21.15223 c -1.48787,2.93688 -4.22489,2.84806 -3.76409,-0.12214 l 2.15408,-12.02512 c 0.0722,-0.39418 0.70508,-3.17006 1.31022,-5.1798 l -20.64702,6.4456 c -3.24223,21.05785 -30.95109,21.40761 -35.47023,0 l -20.691432,-6.46226 c 0.605143,2.00974 1.243596,4.80228 1.315769,5.19646 l 2.154085,12.02512 c 0.460796,2.9702 -2.276224,3.05902 -3.764098,0.12214 L 75.49024,111.66257 a 0.77169547,0.77169547 0 0 1 -0.06662,-0.17766 1.5989086,1.5989086 0 0 1 0.838317,-2.13743 L 120.47065,89.788613 a 11.0036,11.0036 0 0 1 8.88282,0 l 44.20871,19.558867 a 1.5822533,1.5822533 0 0 1 0.99377,1.58226 z"
+ id="path24-0"
+ style="fill:#ff9329;fill-opacity:1;stroke-width:0.471988" /><path
+ class="cls-3"
+ d="m 139.0413,114.61611 19.11473,-7.69475 a 0.81055784,0.81055784 0 0 0 0,-1.50453 c -2.2207,-0.92714 -4.96328,-1.99308 -7.65033,-3.10899 -0.49411,-0.20541 -5.17425,3.15341 -5.60173,3.49762 l -8.23882,6.58439 c -1.99309,1.67108 -0.26649,3.28665 2.37615,2.22626 z"
+ id="path26-2"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /><circle
+ class="cls-3"
+ cx="125.18409"
+ cy="122.13319"
+ r="9.9654207"
+ id="circle28-3"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.471988" /></g></g><path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 308.22048,53.699542 V 43.088993 h -11.45897"
+ id="path689"
+ sodipodi:nodetypes="ccc" /><path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="m 308.22048,127.19381 v 21.9817 h -15.37964"
+ id="path689-7"
+ sodipodi:nodetypes="ccc" /><g
+ inkscape:label="Layer 1"
+ id="layer1-5"
+ transform="matrix(0.14374001,0,0,0.15293639,-29.475642,13.625808)"
+ style="stroke-width:1.7845"><path
+ inkscape:connector-curvature="0"
+ id="path13319"
+ d="m 316.85714,449.94826 c -3.324,0 -6,2.67599 -6,6 v 8 c 0,3.324 2.676,6 6,6 h 14 v 16 h 8 v -16 h 2 c 3.324,0 6,-2.676 6,-6 v -8 c 0,-3.32401 -2.676,-6 -6,-6 z m 68.00001,0 c -3.324,0 -6,2.67599 -6,6 v 8 c 0,3.324 2.676,6 6,6 h 2 v 16 h 8 v -16 h 14 c 3.324,0 6,-2.676 6,-6 v -8 c 0,-3.32401 -2.676,-6 -6,-6 z m -86.00001,108 v 12 l 25.60742,38 c 2.06983,3.58859 5.93583,6 10.39258,6 h 56.00002 c 4.45674,0 8.32274,-2.41141 10.39257,-6 h 0.0117 l 25.59569,-38 v -12 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter13315);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter13315);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 316.85714,445.94826 c -3.324,0 -6,2.67599 -6,6 v 8 c 0,3.324 2.676,6 6,6 h 14 v 16 h 8 v -16 h 2 c 3.324,0 6,-2.676 6,-6 v -8 c 0,-3.32401 -2.676,-6 -6,-6 z m 68.00001,0 c -3.324,0 -6,2.67599 -6,6 v 8 c 0,3.324 2.676,6 6,6 h 2 v 16 h 8 v -16 h 14 c 3.324,0 6,-2.676 6,-6 v -8 c 0,-3.32401 -2.676,-6 -6,-6 z m -86.00001,108 v 12 l 25.60742,38 c 2.06983,3.58859 5.93583,6 10.39258,6 h 56.00002 c 4.45674,0 8.32274,-2.41141 10.39257,-6 h 0.0117 l 25.59569,-38 v -12 z"
+ id="path13272-9"
+ inkscape:connector-curvature="0" /><path
+ sodipodi:nodetypes="cccssccccc"
+ inkscape:connector-curvature="0"
+ id="path13149"
+ d="m 290.85714,553.94826 8,12 25.60743,38 c 2.06982,3.58859 5.93583,6 10.39257,6 h 56.00001 c 4.45675,0 8.32275,-2.41141 10.39258,-6 h 0.0117 l 25.59572,-38 8,-12 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter12606);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><g
+ transform="translate(266.85714,297.64826)"
+ id="g13285"
+ style="stroke-width:1.7845"><path
+ inkscape:connector-curvature="0"
+ style="fill:#607d8b;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.670974px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 32,116 v 12 l 25.607422,38 c 2.069825,3.58859 5.935831,6 10.392578,6 h 56 c 4.45675,0 8.32275,-2.41141 10.39258,-6 h 0.0117 L 160,128 v -12 z"
+ transform="translate(0,140.3)"
+ id="path12541" /></g><rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#263238;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.707;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect11626"
+ width="8"
+ height="28.000004"
+ x="330.85715"
+ y="453.94827" /><rect
+ y="453.94827"
+ x="386.85715"
+ height="28.000004"
+ width="8"
+ id="rect12099"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#263238;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.707;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#4d6570;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 298.85714,564.94826 v 1 l 25.60743,38 c 2.06982,3.58859 5.93583,6 10.39257,6 h 56.00001 c 4.45675,0 8.32275,-2.41141 10.39258,-6 h 0.0117 l 25.59572,-38 v -1 l -25.5957,38 h -0.0117 c -2.06983,3.58859 -5.93583,6 -10.39258,6 h -56.00003 c -4.45674,0 -8.32275,-2.41141 -10.39257,-6 z"
+ id="path3138" /><rect
+ ry="11.044247"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#607d8b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect11624"
+ width="19.999992"
+ height="36"
+ x="445.94827"
+ y="-346.85715"
+ rx="10.380134"
+ transform="rotate(90)" /><rect
+ transform="rotate(90)"
+ rx="10.380134"
+ y="-414.85715"
+ x="445.94827"
+ height="36"
+ width="19.999992"
+ id="rect12097"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#607d8b;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ ry="11.044247" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#4d6570;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 310.85714,458.94826 v 1 c 0,3.324 2.676,6 6,6 h 24 c 3.324,0 6,-2.676 6,-6 v -1 c 0,3.324 -2.676,6 -6,6 h -24 c -3.324,0 -6,-2.676 -6,-6 z"
+ id="rect12496" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#4d6570;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 378.85715,458.94826 v 1 c 0,3.324 2.676,6 6,6 h 24 c 3.324,0 6,-2.676 6,-6 v -1 c 0,3.324 -2.676,6 -6,6 h -24 c -3.324,0 -6,-2.676 -6,-6 z"
+ id="path12514" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#8097a2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 316.85714,445.94826 c -3.324,0 -6,2.676 -6,6 v 1 c 0,-3.324 2.676,-6 6,-6 h 24 c 3.324,0 6,2.676 6,6 v -1 c 0,-3.324 -2.676,-6 -6,-6 z"
+ id="path12516" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#8097a2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 384.85715,445.94826 c -3.324,0 -6,2.676 -6,6 v 1 c 0,-3.324 2.676,-6 6,-6 h 24 c 3.324,0 6,2.676 6,6 v -1 c 0,-3.324 -2.676,-6 -6,-6 z"
+ id="path12518" /><path
+ inkscape:connector-curvature="0"
+ id="path14047"
+ d="m 298.85715,553.94826 v 12 l 25.60742,38 c 2.06983,3.58859 5.93583,6 10.39258,6 h 56 c 4.45675,0 8.32275,-2.41141 10.39258,-6 h 0.0117 l 25.59572,-38 v -12 z"
+ style="fill:url(#linearGradient14078);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.670974px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><g
+ transform="translate(266.85714,297.64826)"
+ id="g13270"
+ style="stroke-width:1.7845"><rect
+ ry="22.088493"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter13052);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect13038"
+ width="92"
+ height="152"
+ x="180.3"
+ y="-172"
+ rx="20.760267"
+ transform="rotate(90)" /><rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter13165);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect13151"
+ width="92"
+ height="152"
+ x="176.3"
+ y="-172"
+ rx="20.760267"
+ transform="rotate(90)"
+ ry="22.088493" /><rect
+ transform="rotate(90)"
+ rx="20.760267"
+ y="-172"
+ x="176.3"
+ height="152"
+ width="92"
+ id="rect11599"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ff1744;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ ry="22.088493" /><path
+ style="fill:none;fill-rule:evenodd;stroke:#fbe9e7;stroke-width:10.707;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 36,192.3 60,32 60,-32"
+ id="path11029-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#ff4569;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 32,36 c -6.648001,0 -12,5.352 -12,12 v 1 c 0,-6.648 5.351999,-12 12,-12 h 128 c 6.648,0 12,5.352 12,12 v -1 c 0,-6.648 -5.352,-12 -12,-12 z"
+ transform="translate(0,140.3)"
+ id="rect12531" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#d81a3d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 20,115 v 1 c 0,6.648 5.351999,12 12,12 h 128 c 6.648,0 12,-5.352 12,-12 v -1 c 0,6.648 -5.352,12 -12,12 H 32 c -6.648001,0 -12,-5.352 -12,-12 z"
+ transform="translate(0,140.3)"
+ id="path12537" /></g><g
+ transform="translate(266.85714,297.64826)"
+ id="g13464"
+ style="stroke-width:1.7845"><path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16.0606;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter13488);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 90,296.3 c -3.324,0 -6,2.676 -6,6 v 12 c 0,0.27298 0.02557,0.53962 0.06055,0.80273 2.55e-4,0.002 -2.57e-4,0.004 0,0.006 A 11.999994,11.999994 0 0 0 84,316.3 a 11.999994,11.999994 0 0 0 12,12 11.999994,11.999994 0 0 0 12,-12 11.999994,11.999994 0 0 0 -0.0664,-1.15234 C 107.9726,314.8702 108,314.58855 108,314.3 v -12 c 0,-3.324 -2.676,-6 -6,-6 z"
+ id="path13466"
+ inkscape:connector-curvature="0" /><path
+ inkscape:connector-curvature="0"
+ id="circle13321"
+ transform="translate(0,140.3)"
+ d="m 90,152 c -3.324,0 -6,2.676 -6,6 v 12 c 0,0.27298 0.02557,0.53962 0.06055,0.80273 2.55e-4,0.002 -2.57e-4,0.004 0,0.006 A 11.999994,11.999994 0 0 0 84,172 a 11.999994,11.999994 0 0 0 12,12 11.999994,11.999994 0 0 0 12,-12 11.999994,11.999994 0 0 0 -0.0664,-1.15234 C 107.9726,170.5702 108,170.28855 108,170 v -12 c 0,-3.324 -2.676,-6 -6,-6 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.2;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16.0606;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;filter:url(#filter13338);color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
+ ry="11.044246"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#263238;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect11618"
+ width="24.000019"
+ height="23.999996"
+ x="292.29999"
+ y="-108"
+ rx="10.380132"
+ transform="rotate(90)" /><circle
+ r="11.999994"
+ cy="312.29999"
+ cx="96"
+ id="path11616"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#263238;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16.0606;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#37474f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.607021;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 90,152 c -3.324,0 -6,2.676 -6,6 v 1 c 0,-3.324 2.676,-6 6,-6 h 12 c 3.324,0 6,2.676 6,6 v -1 c 0,-3.324 -2.676,-6 -6,-6 z"
+ transform="translate(0,140.3)"
+ id="rect12574" /><path
+ inkscape:connector-curvature="0"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;color-interpolation:sRGB;color-interpolation-filters:linearRGB;fill:#1a252a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:16.0606;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="M 84.021484,171.42969 A 11.999994,11.999994 0 0 0 84,172 11.999994,11.999994 0 0 0 96,184 11.999994,11.999994 0 0 0 108,172 11.999994,11.999994 0 0 0 107.9805,171.58594 11.999994,11.999994 0 0 1 96,183 11.999994,11.999994 0 0 1 84.021484,171.42969 Z"
+ transform="translate(0,140.3)"
+ id="circle12577" /></g><path
+ style="fill:url(#radialGradient5715);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.670974px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 316.85692,445.94826 c -3.324,0 -6,2.676 -6,6 v 8 c 0,3.324 2.676,6 6,6 h 14 v 8 h -32 c -6.648,0 -12,5.352 -12,12 v 68 c 0,6.648 5.352,12 12,12 l 25.60743,38 c 2.06983,3.58859 5.93582,6 10.39257,6 h 16 a 11.999994,11.999994 0 0 0 12,12 11.999994,11.999994 0 0 0 11.99806,-12 h 16.00194 c 4.45675,0 8.32275,-2.41141 10.39258,-6 h 0.01 l 25.59765,-38 c 6.64709,-10e-4 12,-5.35265 12,-12 v -68 c 0,-6.648 -5.35395,-12 -12.00195,-12 h -31.99805 v -8 h 13.99805 c 3.324,0 6.00195,-2.676 6.00195,-6 v -8 c 0,-3.324 -2.67795,-6 -6.00195,-6 h -23.99804 c -3.324,0 -6,2.676 -6,6 v 8 c 0,3.324 2.676,6 6,6 h 2 v 8 h -48.00001 v -8 h 1.99805 c 3.324,0 6.00195,-2.676 6.00195,-6 v -8 c 0,-3.324 -2.67795,-6 -6.00195,-6 z"
+ id="path13540-7"
+ inkscape:connector-curvature="0" /><path
+ inkscape:connector-curvature="0"
+ id="path5092"
+ d="m 316.85692,445.94826 c -3.324,0 -6,2.676 -6,6 v 8 c 0,3.324 2.676,6 6,6 h 14 v 8 h -32 c -6.648,0 -12,5.352 -12,12 v 68 c 0,6.648 5.352,12 12,12 l 25.60743,38 c 2.06983,3.58859 5.93582,6 10.39257,6 h 16 a 11.999994,11.999994 0 0 0 12,12 11.999994,11.999994 0 0 0 11.99806,-12 h 16.00194 c 4.45675,0 8.32275,-2.41141 10.39258,-6 h 0.01 l 25.59765,-38 c 6.64709,-10e-4 12,-5.35265 12,-12 v -68 c 0,-6.648 -5.35395,-12 -12.00195,-12 h -31.99805 v -8 h 13.99805 c 3.324,0 6.00195,-2.676 6.00195,-6 v -8 c 0,-3.324 -2.67795,-6 -6.00195,-6 h -23.99804 c -3.324,0 -6,2.676 -6,6 v 8 c 0,3.324 2.676,6 6,6 h 2 v 8 h -48.00001 v -8 h 1.99805 c 3.324,0 6.00195,-2.676 6.00195,-6 v -8 c 0,-3.324 -2.67795,-6 -6.00195,-6 z"
+ style="fill:url(#linearGradient5094);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.670974px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></g><image
+ width="30.360945"
+ height="28.817167"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 aGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4 OnhtcHRrPSJYTVAgQ29yZSA0LjQuMC1FeGl2MiI+CiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6 Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogIDxyZGY6RGVzY3JpcHRp b24gcmRmOmFib3V0PSIiCiAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAv MS4wL21tLyIKICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5 cGUvUmVzb3VyY2VFdmVudCMiCiAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1l bnRzLzEuMS8iCiAgICB4bWxuczpHSU1QPSJodHRwOi8vd3d3LmdpbXAub3JnL3htcC8iCiAgICB4 bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnhtcD0i aHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpk b2NpZDpnaW1wOmNiZjJlZTZmLThlZjItNGFjYi1hNzlkLTBkNWY4MTVlN2M1YyIKICAgeG1wTU06 SW5zdGFuY2VJRD0ieG1wLmlpZDoxM2U3NzE1Mi04M2E5LTQxNDktOTMwOC03Y2VlNmU3ZjM4ZWQi CiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4OGQ4YWI2OS02MDBmLTRjYWQt YjczZS0yZGIwMjI1NDUzZWMiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICBHSU1QOkFQST0i Mi4wIgogICBHSU1QOlBsYXRmb3JtPSJMaW51eCIKICAgR0lNUDpUaW1lU3RhbXA9IjE2NTU5MDUw MTAzNjYxNTEiCiAgIEdJTVA6VmVyc2lvbj0iMi4xMC4zMCIKICAgdGlmZjpPcmllbnRhdGlvbj0i MSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8eG1wTU06SGlzdG9yeT4KICAg IDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAg c3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpkY2RiZTVm Ni1iY2E0LTQ2OWUtYWY5Ni03YzBmYzZjZjQ2MzYiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9 IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIyLTA2LTIyVDE1OjM2OjUw KzAyOjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNj cmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/Psh/3LgAAAAG YktHRAAAAAAAAPlDu38AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfmBhYNJDLHHIypAAAJ PklEQVR42u2dX08b2RnGH4+xsXFsxiYh7Xq1MYq6WWV3FUfK1q1EYCApaRUpQ7vWtr3pOp8g4RPY Ue+boPY69i0SUkHKtW2VK6gliDasmq0q3FW9TbxhASn8MVDcC2ZWhsVmxnNmfM7hPDdBBI898/P7 Pud9z5kzLnCoUqmkAIgDuAYgpv0sA4Db7UY4HIbH4znppUUA6wCeaz8vRaPRdRavgYsTkDEA4wCG tX9PlNfrRTgchiRJZg6/BGAWwEw0Gl0SYJ0BmgKgtoKpy+/3Q5Zlq29ZBjAJIEd7JLsYhCkDeAjg cy3NwiGox5UD8CgajZYFWOtQMwAe6H7ZQajUA3YxAlQBkDUaoQ5C1bUOYDIajWYEWONpN2vEQ4/L 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 "
+ id="image8180"
+ x="6.1239142"
+ y="133.71233"
+ style="stroke-width:1.3711" /><g
+ id="g10135"
+ transform="matrix(0.13518227,0,0,0.1370563,7.2998322,29.425797)"
+ style="stroke-width:1.94381">
+ <g
+ id="g10109"
+ style="stroke-width:1.94381">
+ <linearGradient
+ id="SVGID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="199.533"
+ y1="201.907"
+ x2="39.678699"
+ y2="42.0527">
+ <stop
+ offset="0"
+ style="stop-color:#130036"
+ id="stop9943" />
+ <stop
+ offset="0.2297"
+ style="stop-color:#18023B"
+ id="stop9945" />
+ <stop
+ offset="0.5122"
+ style="stop-color:#26094A"
+ id="stop9947" />
+ <stop
+ offset="0.8211"
+ style="stop-color:#3D1563"
+ id="stop9949" />
+ <stop
+ offset="1"
+ style="stop-color:#4E1D75"
+ id="stop9951" />
+ </linearGradient>
+ <path
+ class="st1"
+ d="M 188.887,35.492 C 174.386,26.02 155.841,22.954 145.606,21.883 134.652,20.738 125.138,20.94 116.77,22.168 c -0.709,-0.009 -1.414,-0.037 -2.127,-0.037 -0.544,0 -1.08,0.023 -1.627,0.029 0.225,-0.275 0.381,-0.445 0.381,-0.445 0,0 -0.44,0.069 -1.304,0.46 -2.717,0.044 -5.421,0.138 -8.085,0.32 3.711,-4.068 6.751,-6.2 6.751,-6.2 0,0 -3.608,0.528 -10.192,6.496 -3.132,0.288 -6.221,0.67 -9.258,1.145 6.918,-9.362 14.155,-13.304 14.155,-13.304 0,0 -8.772,-1.786 -22.507,12.016 -1.149,1.155 -2.215,2.356 -3.246,3.572 C 39.68,35.907 11.03,61.758 11.03,92.139 c 0,5.958 -1.829,12.511 0.143,19.054 -0.788,10.453 0.89,38.975 0.89,38.975 0,0 10.837,58.649 52.51,68.846 0.662,0.158 -8.707,-14.62 -12.851,-32.442 8.069,8.208 17.685,14.699 28.478,15.824 1.325,0.137 -6.165,-8.64 -12.725,-19.234 l 94.698,31.906 c 49.529,-21.274 43.763,-19.357 54.397,-30.875 23.428,-25.36 26.708,-39.75 20.806,-82.235 -3.993,-28.679 -25.16,-57.083 -48.489,-66.466 z"
+ id="path9954"
+ style="fill:url(#SVGID_1_);stroke-width:1.94381" />
+ <polygon
+ class="st2"
+ points="201.939,95.591 22.687,62.276 8.546,142.68 16.387,166.974 172.911,219.015 "
+ id="polygon9956"
+ style="stroke-width:1.94381" />
+ <g
+ id="g9960"
+ style="stroke-width:1.94381">
+ <path
+ class="st3"
+ d="m 23.128,65.01 c 0.785,1.689 0.554,2.089 0.065,2.089 -0.22,0 -0.492,-0.081 -0.747,-0.161 -0.255,-0.081 -0.494,-0.161 -0.648,-0.161 -0.433,0 -0.189,0.639 2.263,3.72 3.468,4.406 54.399,81.293 57.182,81.293 0.015,0 0.028,-0.002 0.04,-0.006 23.71,-8.448 124.543,-43.058 124.543,-43.058 L 195.51,93.697 23.128,65.01"
+ id="path9958"
+ style="stroke-width:1.94381" />
+ </g>
+ <path
+ class="st4"
+ d="m 24.607,63.121 c 0,0 0.76,3.932 4.281,8.284 3.5,4.392 50.51,75.571 52.869,74.944 30.795,-8.176 142.525,-51.674 142.525,-51.674 z"
+ id="path9962"
+ style="stroke-width:1.94381" />
+ <polygon
+ class="st3"
+ points="19.094,171.178 168.976,221.012 167.321,217.161 18.568,167.703 "
+ id="polygon9964"
+ style="stroke-width:1.94381" />
+ <linearGradient
+ id="SVGID_2_"
+ gradientUnits="userSpaceOnUse"
+ x1="10.2428"
+ y1="95.311302"
+ x2="57.703899"
+ y2="95.311302">
+ <stop
+ offset="0"
+ style="stop-color:#3156A8"
+ id="stop9966" />
+ <stop
+ offset="0.2474"
+ style="stop-color:#3351A4"
+ id="stop9968" />
+ <stop
+ offset="0.5365"
+ style="stop-color:#3B4397"
+ id="stop9970" />
+ <stop
+ offset="0.8453"
+ style="stop-color:#472C82"
+ id="stop9972" />
+ <stop
+ offset="1"
+ style="stop-color:#4E1D75"
+ id="stop9974" />
+ </linearGradient>
+ <path
+ class="st5"
+ d="m 57.704,59.795 c 0,0 -54.122,15.85 -29.288,71.033 0,0 -11.387,-10.426 -18.167,-23.757 C 9.944,106.474 21.55,65.242 21.55,65.242 Z"
+ id="path9977"
+ style="fill:url(#SVGID_2_);stroke-width:1.94381" />
+
+ <radialGradient
+ id="SVGID_3_"
+ cx="59.0732"
+ cy="113.9232"
+ r="85.246597"
+ gradientTransform="matrix(1,0,0,1.45,0,-51.2654)"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ offset="0.1654"
+ style="stop-color:#14CDDA"
+ id="stop9979" />
+ <stop
+ offset="0.5478"
+ style="stop-color:#2061BD"
+ id="stop9981" />
+ <stop
+ offset="0.6546"
+ style="stop-color:#2658AC"
+ id="stop9983" />
+ <stop
+ offset="0.864"
+ style="stop-color:#373F81"
+ id="stop9985" />
+ <stop
+ offset="1"
+ style="stop-color:#432D62"
+ id="stop9987" />
+ </radialGradient>
+ <path
+ class="st6"
+ d="m 28.416,130.828 c -4.707,-0.081 -12.269,-3.964 -14.722,-8.665 -3.066,51.098 17.782,80.939 50.88,96.853 C 53.759,217.776 0,189.407 0,121.14 0,63.093 46.06,11.208 118.142,8.831 118.584,12.085 82.406,20.245 81.249,24.082 79.453,30.054 75.325,36.555 71.843,41.766 67.125,48.827 78.4,54.865 70.114,56.767 57.646,59.628 41.016,58.044 28.753,73.986 10.319,97.951 22.62,125.365 28.416,130.828 Z"
+ id="path9990"
+ style="fill:url(#SVGID_3_);stroke-width:1.94381" />
+ <g
+ id="g10003"
+ style="stroke-width:1.94381">
+ <linearGradient
+ id="SVGID_4_"
+ gradientUnits="userSpaceOnUse"
+ x1="44.5387"
+ y1="57.897499"
+ x2="191.515"
+ y2="57.897499">
+ <stop
+ offset="0"
+ style="stop-color:#2061BD"
+ id="stop9992" />
+ <stop
+ offset="0.1846"
+ style="stop-color:#2B51AC"
+ id="stop9994" />
+ <stop
+ offset="0.6826"
+ style="stop-color:#442C84"
+ id="stop9996" />
+ <stop
+ offset="0.9409"
+ style="stop-color:#4E1D75"
+ id="stop9998" />
+ </linearGradient>
+ <path
+ class="st7"
+ d="M 137.048,10.699 C 90.366,7.117 66.341,25.796 50.918,47.516 c -5.617,7.906 -5.002,15.166 -3.068,23.937 0.831,3.744 1.671,5.538 0.659,9.355 -0.558,2.106 -0.465,4.072 -1.158,5.314 -0.959,1.717 -2.18,3.594 -2.589,6.677 -1.022,7.699 1.703,10.151 3.406,12.741 2.426,-2.409 7.165,-8.079 15.71,-11.466 8.545,-3.387 14.167,-8.477 24.876,-13.941 14.632,-7.463 31.782,3.859 64.3,-6.796 C 163.06,70.058 186.056,35.993 191.515,34.685 176.312,17.873 150.448,11.726 137.048,10.699 Z"
+ id="path10001"
+ style="fill:url(#SVGID_4_);stroke-width:1.94381" />
+ </g>
+ <path
+ class="st8"
+ d="m 106.207,0.032 c 0,0 -8.335,4.026 -11.965,11.301 8.381,-4.225 13.246,-6.533 15.546,-6.808 0,0 -2.203,1.067 -4.935,6.87 4.83,-1.547 6.493,-2.522 7.819,-2.537 0,0 -0.385,0.61 -0.737,6.402 -7.417,-2.404 -21.693,0.397 -29.287,5.153 C 80.072,6.678 106.207,0.032 106.207,0.032 Z"
+ id="path10005"
+ style="stroke-width:1.94381" />
+ <linearGradient
+ id="SVGID_5_"
+ gradientUnits="userSpaceOnUse"
+ x1="66.173599"
+ y1="23.205601"
+ x2="167.26421"
+ y2="111.0823">
+ <stop
+ offset="0.0202"
+ style="stop-color:#48A8E0"
+ id="stop10007" />
+ <stop
+ offset="0.3883"
+ style="stop-color:#2061BD"
+ id="stop10009" />
+ <stop
+ offset="0.4968"
+ style="stop-color:#2B51AC"
+ id="stop10011" />
+ <stop
+ offset="0.7892"
+ style="stop-color:#442C84"
+ id="stop10013" />
+ <stop
+ offset="0.9409"
+ style="stop-color:#4E1D75"
+ id="stop10015" />
+ </linearGradient>
+ <path
+ class="st9"
+ d="M 139.379,8.63 C 125.07,6.776 113.109,7.141 102.94,9.1 c 3.198,-3.065 6.898,-4.575 6.898,-4.575 -4.795,0.424 -10.781,3.554 -15.917,6.868 -2.588,0.826 -5.054,1.758 -7.39,2.799 1.43,-1.885 3.094,-3.899 4.72,-5.445 6.039,-5.743 15.006,-8.715 15.006,-8.715 -7.654,-0.562 -33.268,5.995 -48.681,37.213 -2.526,3.077 -4.883,6.235 -7.129,9.398 -5.798,8.164 -5.162,15.658 -3.162,24.715 0.852,3.867 1.009,10.04 0.168,14.029 -0.168,0.799 -2.363,2.863 -2.926,8.428 -0.602,5.905 1.505,8.804 3.582,11.203 C 55.489,94.226 62.77,92.087 62.77,92.087 73.1,87.855 77.4,83.335 88.458,77.694 c 15.108,-7.709 67.939,17.45 101.512,6.448 10.332,-3.384 -3.977,-47.359 1.663,-48.709 C 175.934,18.073 153.139,10.413 139.379,8.63 Z"
+ id="path10018"
+ style="fill:url(#SVGID_5_);stroke-width:1.94381" />
+ <linearGradient
+ id="SVGID_6_"
+ gradientUnits="userSpaceOnUse"
+ x1="19.676201"
+ y1="337.41391"
+ x2="217.8353"
+ y2="43.630901">
+ <stop
+ offset="0.3787"
+ style="stop-color:#3156A8"
+ id="stop10020" />
+ <stop
+ offset="1"
+ style="stop-color:#4E1D75"
+ id="stop10022" />
+ </linearGradient>
+ <path
+ class="st10"
+ d="M 244.176,103.288 C 235.9,60.051 196.08,20.716 164.059,18.536 149.848,17.568 154.212,24.855 145.32,27.63 107,39.589 106.414,46.571 106.414,46.571 c 81.252,3.819 82.484,84.064 60.724,104.366 6.123,-1.428 12.762,-8.914 18.859,-20.666 -0.732,4.931 -1.36,10.98 -2.274,17.729 -2.788,20.595 0.823,63.614 -58.356,92.405 0,0 32.372,-2.646 48.425,-20.717 -6.528,15.012 -24.441,23.121 -24.441,23.121 13.182,-1.928 47.81,-12.146 69.868,-39.732 24.966,-31.225 32.474,-60.519 24.957,-99.789 z"
+ id="path10025"
+ style="fill:url(#SVGID_6_);stroke-width:1.94381" />
+ <linearGradient
+ id="SVGID_7_"
+ gradientUnits="userSpaceOnUse"
+ x1="96.745201"
+ y1="278.64581"
+ x2="206.3175"
+ y2="32.542301">
+ <stop
+ offset="0"
+ style="stop-color:#29ABE2"
+ id="stop10027" />
+ <stop
+ offset="0.7733"
+ style="stop-color:#385AA6"
+ id="stop10029" />
+ <stop
+ offset="0.8575"
+ style="stop-color:#414293"
+ id="stop10031" />
+ <stop
+ offset="1"
+ style="stop-color:#4E1D75"
+ id="stop10033" />
+ </linearGradient>
+ <path
+ class="st11"
+ d="m 164.993,182.221 c 0,0 26.396,-7.38 34.903,-21.633 -1.032,16.619 -16.107,33.662 -16.107,33.662 0,0 22.038,-4.46 31.436,-19.968 -1.224,13.994 -18.191,32.907 -18.191,32.907 17.346,-3.113 60.93,-30.645 47.143,-103.901 -8.142,-43.262 -48.096,-82.572 -80.117,-84.752 -14.211,-0.968 -9.847,6.319 -18.739,9.094 -38.32,11.959 -38.906,18.941 -38.906,18.941 81.252,3.819 102.844,46.344 60.724,103.231 6.123,-1.429 8.578,-4.794 13.178,-10.301 -0.002,0 2.084,21.78 -15.324,42.72 z"
+ id="path10036"
+ style="fill:url(#SVGID_7_);stroke-width:1.94381" />
+ <linearGradient
+ id="SVGID_8_"
+ gradientUnits="userSpaceOnUse"
+ x1="48.2686"
+ y1="92.033699"
+ x2="54.241402"
+ y2="95.4683">
+ <stop
+ offset="0"
+ style="stop-color:#B0DCD6"
+ id="stop10038" />
+ <stop
+ offset="1"
+ style="stop-color:#53ACE0"
+ id="stop10040" />
+ </linearGradient>
+ <path
+ class="st12"
+ d="m 60.609,85.567 c 0,0 -4.719,3.301 -8.136,2.46 -4.045,-0.993 -4.73,-4.913 -4.73,-4.913 -0.089,0.803 -0.192,1.578 -0.341,2.273 -0.168,0.799 -2.363,2.863 -2.926,8.428 -0.602,5.905 1.615,9.325 3.692,11.724 7.381,-10.792 14.552,-13.452 14.552,-13.452 -2.809,-0.982 -2.111,-6.52 -2.111,-6.52 z"
+ id="path10043"
+ style="fill:url(#SVGID_8_);stroke-width:1.94381" />
+ <defs
+ id="defs10048">
+ <filter
+ id="filter10202"
+ filterUnits="userSpaceOnUse"
+ x="162.67999"
+ y="18.355"
+ width="14.927"
+ height="6.6290002">
+ <feColorMatrix
+ type="matrix"
+ values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0"
+ id="feColorMatrix10200" />
+ </filter>
+ </defs>
+ <mask
+ maskUnits="userSpaceOnUse"
+ x="162.68"
+ y="18.355"
+ width="14.927"
+ height="6.629"
+ id="SVGID_9_">
+ <g
+ class="st13"
+ id="g10057">
+ <radialGradient
+ id="SVGID_10_"
+ cx="154.384"
+ cy="67.998497"
+ r="51.967499"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ offset="0.868"
+ style="stop-color:#FFFFFF"
+ id="stop10050" />
+ <stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop10052" />
+ </radialGradient>
+ <rect
+ x="91.294998"
+ y="-7.2179999"
+ class="st14"
+ width="100.015"
+ height="93.338997"
+ id="rect10055" />
+ </g>
+ </mask>
+ <g
+ class="st15"
+ mask="url(#SVGID_9_)"
+ id="g10075"
+ style="stroke-width:1.94381">
+ <g
+ class="st16"
+ id="g10073"
+ style="stroke-width:1.94381">
+ <g
+ class="st17"
+ id="g10071"
+ style="stroke-width:1.94381">
+ <linearGradient
+ id="SVGID_11_"
+ gradientUnits="userSpaceOnUse"
+ x1="176.2139"
+ y1="23.0851"
+ x2="164.2403"
+ y2="20.555401">
+ <stop
+ offset="0"
+ style="stop-color:#3092B9"
+ id="stop10060" />
+ <stop
+ offset="0.2199"
+ style="stop-color:#258DB6"
+ id="stop10062" />
+ <stop
+ offset="0.6564"
+ style="stop-color:#1685B1"
+ id="stop10064" />
+ <stop
+ offset="1"
+ style="stop-color:#1082AF"
+ id="stop10066" />
+ </linearGradient>
+ <path
+ class="st18"
+ d="m 163.513,18.434 c 1.106,-0.287 5.621,0.204 8.584,1.533 2.964,1.329 8.073,3.679 3.986,4.701 -4.088,1.022 -6.438,-0.613 -8.482,-2.351 -2.044,-1.738 -6.847,-3.168 -4.088,-3.883 z"
+ id="path10069"
+ style="fill:url(#SVGID_11_);stroke-width:1.94381" />
+ </g>
+ </g>
+ </g>
+ <linearGradient
+ id="SVGID_12_"
+ gradientUnits="userSpaceOnUse"
+ x1="80.783798"
+ y1="38.0252"
+ x2="90.637001"
+ y2="77.544296">
+ <stop
+ offset="0.0074"
+ style="stop-color:#1398D1;stop-opacity:0"
+ id="stop10077" />
+ <stop
+ offset="0.2482"
+ style="stop-color:#1187C2;stop-opacity:0.6197"
+ id="stop10079" />
+ <stop
+ offset="0.6422"
+ style="stop-color:#3F6499;stop-opacity:0.71"
+ id="stop10081" />
+ <stop
+ offset="1"
+ style="stop-color:#2F4282;stop-opacity:0.5"
+ id="stop10083" />
+ </linearGradient>
+ <path
+ class="st19"
+ d="m 61.051,84.921 c 0,0 25.888,-42.662 49.292,-54.175 2.173,-1.093 -32.405,9.191 -46.32,24.55 -8.271,9.129 -3.891,27.002 -2.972,29.625 z"
+ id="path10086"
+ style="fill:url(#SVGID_12_);stroke-width:1.94381" />
+ <path
+ class="st20"
+ d="m 61.051,84.921 c 0.024,-0.015 0.05,-0.03 0.075,-0.045 C 67.82,80.74 79.292,78.358 82.99,70.861 97.227,41.992 110.344,30.746 110.344,30.746 86.939,42.259 61.051,84.921 61.051,84.921 Z"
+ id="path10088"
+ style="stroke-width:1.94381" />
+ <path
+ class="st21"
+ d="m 63.512,77.118 c 0,0 -4.666,-7.159 2.053,-13.687 3.546,-3.44 8.919,-1.529 9.54,-0.91 2.644,2.622 0.982,8.156 -1.398,11.288 -1.345,1.764 -5.259,4.51 -10.195,3.309 z"
+ id="path10090"
+ style="stroke-width:1.94381" />
+
+ <linearGradient
+ id="SVGID_13_"
+ gradientUnits="userSpaceOnUse"
+ x1="48.7383"
+ y1="14.373"
+ x2="43.199299"
+ y2="11.3027"
+ gradientTransform="matrix(0.9994,0.0349,-0.0349,0.9994,24.5906,57.1202)">
+ <stop
+ offset="0"
+ style="stop-color:#F9C21B"
+ id="stop10092" />
+ <stop
+ offset="0.1479"
+ style="stop-color:#F3BA1B"
+ id="stop10094" />
+ <stop
+ offset="0.3787"
+ style="stop-color:#E3A41B"
+ id="stop10096" />
+ <stop
+ offset="0.6634"
+ style="stop-color:#C9801C"
+ id="stop10098" />
+ <stop
+ offset="0.9884"
+ style="stop-color:#A44E1C"
+ id="stop10100" />
+ <stop
+ offset="1"
+ style="stop-color:#A34C1C"
+ id="stop10102" />
+ </linearGradient>
+ <path
+ class="st22"
+ d="m 66.187,76.674 c 0,0 -3.224,-4.949 1.422,-9.459 2.446,-2.376 6.161,-1.056 6.592,-0.63 1.826,1.812 0.676,5.637 -0.968,7.8 -0.929,1.223 -3.635,3.119 -7.046,2.289 z"
+ id="path10105"
+ style="fill:url(#SVGID_13_);stroke-width:1.94381" />
+ <path
+ d="m 72.623,71.393 c -0.072,1.978 -1.746,3.522 -3.738,3.454 -1.996,-0.069 -3.558,-1.726 -3.487,-3.704 0.071,-1.977 1.744,-3.521 3.741,-3.453 1.992,0.069 3.553,1.727 3.484,3.703 z"
+ id="path10107"
+ style="stroke-width:1.94381" />
+ </g>
+ <circle
+ class="st24"
+ cx="66.724998"
+ cy="70.287003"
+ r="1.136"
+ id="circle10111"
+ style="stroke-width:1.94381" />
+ <linearGradient
+ id="SVGID_14_"
+ gradientUnits="userSpaceOnUse"
+ x1="206.2113"
+ y1="130.1391"
+ x2="169.42979"
+ y2="47.526402">
+ <stop
+ offset="0"
+ style="stop-color:#409EC3"
+ id="stop10113" />
+ <stop
+ offset="0.62"
+ style="stop-color:#2061BD"
+ id="stop10115" />
+ </linearGradient>
+ <path
+ class="st23"
+ d="M 228.505,65.01 C 210.784,38.034 196.744,31.179 196.744,31.179 c 0,0 0.645,19.65 10.484,29.128 1.124,1.083 -11.774,-8.432 -11.774,-8.432 0,0 -2.758,9.076 3.562,19.51 -1.836,-2.439 -3.051,-3.363 -3.051,-3.363 0,0 -11.908,5.491 -15.423,13.109 -1.815,-3.426 -3.176,-5.444 -3.176,-5.444 0,0 -8.236,16.437 -7.201,35.495 1.684,30.988 -5.803,42.404 -5.803,42.404 0,0 20.057,-7.695 29.676,-32.468 3.974,10.533 -0.121,21.619 -0.121,21.619 0,0 16.206,-12.109 19.691,-34.18 3.863,6.23 2.727,18.664 2.727,18.664 0,0 10.344,-14.402 10.596,-30.086 4.794,3.343 5.235,16.399 5.235,16.399 0,0 15.336,-19.606 -3.661,-48.524 z"
+ id="path10118"
+ style="fill:url(#SVGID_14_);stroke-width:1.94381" />
+ <linearGradient
+ id="SVGID_15_"
+ gradientUnits="userSpaceOnUse"
+ x1="176.7603"
+ y1="103.061"
+ x2="150.40691"
+ y2="21.9536">
+ <stop
+ offset="0"
+ style="stop-color:#14B2DA"
+ id="stop10120" />
+ <stop
+ offset="0.4028"
+ style="stop-color:#297CCC"
+ id="stop10122" />
+ <stop
+ offset="0.5077"
+ style="stop-color:#256FC5"
+ id="stop10124" />
+ <stop
+ offset="0.6492"
+ style="stop-color:#2164BF"
+ id="stop10126" />
+ <stop
+ offset="0.8162"
+ style="stop-color:#2061BD"
+ id="stop10128" />
+ <stop
+ offset="0.9835"
+ style="stop-color:#2061BD"
+ id="stop10130" />
+ </linearGradient>
+ <path
+ class="st25"
+ d="m 211.282,46.158 c -4.631,-8.63 -12.803,-14.13 -19.986,-18.582 -17.909,-11.105 -29.427,-12.665 -29.427,-12.665 0,0 -16.528,3.074 -13.689,7.672 0.146,0.236 0.487,0.535 0.968,0.877 -14.498,-6.678 -22.722,8.677 -22.722,8.677 -8.284,-0.503 -18.371,3.575 -21.312,14.499 -0.305,1.134 3.711,0.496 5.777,0.945 12.079,2.626 23.45,8.32 28.675,11.134 12.154,6.548 19.365,17.451 23.528,25.629 5.037,9.894 7.094,27.304 7.094,27.304 0,0 13.253,-18.205 10.086,-27.552 5.249,3.26 6.285,14.891 6.285,14.891 0,0 8.835,-13.838 6.223,-25.891 6.815,4.153 7.042,12.601 7.042,12.601 0,0 6.939,-9.631 3.803,-25.427 6.858,5.453 8.293,12.517 8.293,12.517 0,0 5.606,-14.993 -0.638,-26.629 z"
+ id="path10133"
+ style="fill:url(#SVGID_15_);stroke-width:1.94381" />
+</g><image
+ width="45.539223"
+ height="26.901003"
+ preserveAspectRatio="none"
+ xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAYEBAUEBAYFBQUGBgYHCQ4JCQgICRINDQoOFRIWFhUS FBQXGiEcFxgfGRQUHScdHyIjJSUlFhwpLCgkKyEkJST/2wBDAQYGBgkICREJCREkGBQYJCQkJCQk JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCT/wAARCAI9A8oDASIA AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3 ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEA AwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSEx BhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElK U1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3 uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDP8c+K Nbg8W6iIdQlijMgwgVf7o9qyX8Va/IuF1WUv9F4/SrnjxVHi/VFwA6SAA9f4RXN7DEzuPmJHOOa+ shCKifNzleRqnxdr0ahf7Sm/2vlXr+VM/wCEv13eVOpz59lX/CskyZAOMsRyO9KpLL8oI47jmtHC PQiM3sjXHizxAXCf2nKU/wB1f8K734ffFu80yaPTNYuWktZHCpOQPkJPfpxyfyry8LsjO/qvWu++ G3w5m8QSw6pqcUiaejhlR1KmXDcjt6EZFYV4UuW8jajKfN7p7smpSzIkkVwWjcBlYY5B5FTC8nJ/ 17/kKrLBHDFHDEmyONQqr/dAHHNOAA78147V9j07tbk/2ydGJMzYAz0Fc94usb3VLF7i01Bre4t1 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 "
+ id="image11884"
+ x="123.94752"
+ y="77.886711"
+ style="stroke-width:5.63571" /><path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-3)"
+ d="m 48.686201,95.267324 50.820238,0.392631"
+ id="path12300" /><path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-3-6)"
+ d="M 48.686201,140.25119 99.506439,113.14441"
+ id="path12300-9"
+ sodipodi:nodetypes="cc" /><path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-3-1)"
+ d="M 48.686201,52.965491 99.506439,76.696018"
+ id="path12300-0"
+ sodipodi:nodetypes="cc" /><path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-3-1-6)"
+ d="M 192.19253,78.231345 234.18084,48.465927"
+ id="path12300-0-6"
+ sodipodi:nodetypes="cc" /><text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:7.76111px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="59.602123"
+ y="92.486649"
+ id="text12479"><tspan
+ sodipodi:role="line"
+ id="tspan12477"
+ style="font-size:7.76111px;stroke-width:0.264583px"
+ x="59.602123"
+ y="92.486649">IMAP</tspan></text><text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:7.76111px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="-8.8944416"
+ y="143.93439"
+ id="text12479-9"
+ transform="rotate(-29.79443)"><tspan
+ sodipodi:role="line"
+ id="tspan12477-3"
+ style="font-size:7.76111px;stroke-width:0.264583px"
+ x="-8.8944416"
+ y="143.93439">IMAP</tspan></text><text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:7.76111px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="85.542168"
+ y="17.383308"
+ id="text12479-6"
+ transform="rotate(30.05974)"><tspan
+ sodipodi:role="line"
+ id="tspan12477-0"
+ style="font-size:7.76111px;stroke-width:0.264583px"
+ x="85.542168"
+ y="17.383308">IMAP</tspan></text><path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-3-1-6-9)"
+ d="m 191.24295,103.43423 42.93789,35.147"
+ id="path12300-0-6-0"
+ sodipodi:nodetypes="cc" /><text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:8.46667px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="187.43295"
+ y="52.618786"
+ id="text15221"><tspan
+ sodipodi:role="line"
+ id="tspan15219"
+ style="font-size:8.46667px;stroke-width:0.264583px"
+ x="187.43295"
+ y="52.618786">Message</tspan><tspan
+ sodipodi:role="line"
+ style="font-size:8.46667px;stroke-width:0.264583px"
+ x="187.43295"
+ y="63.202122"
+ id="tspan15223">index</tspan></text><text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:8.46667px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="242.57494"
+ y="110.62234"
+ id="text15221-2"><tspan
+ sodipodi:role="line"
+ id="tspan15219-3"
+ style="font-size:8.46667px;text-align:end;text-anchor:end;stroke-width:0.264583px"
+ x="242.57494"
+ y="110.62234">Message</tspan><tspan
+ sodipodi:role="line"
+ style="font-size:8.46667px;text-align:end;text-anchor:end;stroke-width:0.264583px"
+ x="242.57494"
+ y="121.20567"
+ id="tspan15223-7">bodies</tspan></text></g><style
+ type="text/css"
+ id="style9941">
+ .st0{fill:#363959;}
+ .st1{fill:url(#SVGID_1_);}
+ .st2{fill:#FBFBFB;}
+ .st3{fill:#999999;}
+ .st4{fill:#F8F8F8;}
+ .st5{fill:url(#SVGID_2_);}
+ .st6{fill:url(#SVGID_3_);}
+ .st7{fill:url(#SVGID_4_);}
+ .st8{fill:#3F6499;}
+ .st9{fill:url(#SVGID_5_);}
+ .st10{fill:url(#SVGID_6_);}
+ .st11{fill:url(#SVGID_7_);}
+ .st12{fill:url(#SVGID_8_);}
+ .st13{filter:url(#Adobe_OpacityMaskFilter);}
+ .st14{fill:url(#SVGID_10_);}
+ .st15{mask:url(#SVGID_9_);}
+ .st16{opacity:0.6;}
+ .st17{opacity:0.2;}
+ .st18{fill:url(#SVGID_11_);}
+ .st19{fill:url(#SVGID_12_);}
+ .st20{opacity:0.1;fill:#F2F2F2;}
+ .st21{fill:#2F4282;}
+ .st22{fill:url(#SVGID_13_);}
+ .st23{fill:url(#SVGID_14_);}
+ .st24{fill:#FFFFFF;}
+ .st25{fill:url(#SVGID_15_);}
+ .st26{fill:url(#SVGID_16_);}
+ .st27{fill:url(#SVGID_17_);}
+ .st28{fill:url(#SVGID_18_);}
+ .st29{fill:url(#SVGID_19_);}
+ .st30{fill:url(#SVGID_20_);}
+ .st31{fill:url(#SVGID_21_);}
+ .st32{fill:url(#SVGID_22_);}
+ .st33{fill:url(#SVGID_23_);}
+ .st34{fill:url(#SVGID_24_);}
+ .st35{filter:url(#Adobe_OpacityMaskFilter_1_);}
+ .st36{fill:url(#SVGID_26_);}
+ .st37{mask:url(#SVGID_25_);}
+ .st38{fill:url(#SVGID_27_);}
+ .st39{fill:url(#SVGID_28_);}
+ .st40{fill:url(#SVGID_29_);}
+ .st41{fill:url(#SVGID_30_);}
+ .st42{fill:url(#SVGID_31_);}
+ .st43{fill:url(#SVGID_32_);}
+ .st44{fill:url(#SVGID_33_);}
+ .st45{fill:url(#SVGID_34_);}
+ .st46{fill:url(#SVGID_35_);}
+ .st47{fill:url(#SVGID_36_);}
+ .st48{fill:url(#SVGID_37_);}
+ .st49{fill:url(#SVGID_38_);}
+ .st50{fill:url(#SVGID_39_);}
+ .st51{fill:url(#SVGID_40_);}
+ .st52{filter:url(#Adobe_OpacityMaskFilter_2_);}
+ .st53{fill:url(#SVGID_42_);}
+ .st54{mask:url(#SVGID_41_);}
+ .st55{fill:url(#SVGID_43_);}
+ .st56{fill:url(#SVGID_44_);}
+ .st57{fill:url(#SVGID_45_);}
+ .st58{fill:url(#SVGID_46_);}
+ .st59{fill:url(#SVGID_47_);}
+ .st60{fill:url(#SVGID_48_);}
+</style></svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.drawio.pdf b/doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.drawio.pdf
new file mode 100644
index 00000000..71a90f26
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.drawio.pdf
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.png b/doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.png
new file mode 100644
index 00000000..fb81b460
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme_components1.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.drawio.pdf b/doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.drawio.pdf
new file mode 100644
index 00000000..87e42eed
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.drawio.pdf
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.png b/doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.png
new file mode 100644
index 00000000..f9e2df14
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme_components2.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.drawio.pdf b/doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.drawio.pdf
new file mode 100644
index 00000000..0606e059
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.drawio.pdf
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.png b/doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.png
new file mode 100644
index 00000000..c3b015a1
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme_datatype.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.drawio.pdf b/doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.drawio.pdf
new file mode 100644
index 00000000..8fea81c7
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.drawio.pdf
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.png b/doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.png
new file mode 100644
index 00000000..ed2077d9
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/aerogramme_keys.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/alex.jpg b/doc/talks/2023-01-18-tocatta/assets/alex.jpg
new file mode 100644
index 00000000..eac0f0a9
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/alex.jpg
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/atuin.jpg b/doc/talks/2023-01-18-tocatta/assets/atuin.jpg
new file mode 100644
index 00000000..f2fbd61d
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/atuin.jpg
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/compatibility.png b/doc/talks/2023-01-18-tocatta/assets/compatibility.png
new file mode 100644
index 00000000..ce364a9b
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/compatibility.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/consensus.svg b/doc/talks/2023-01-18-tocatta/assets/consensus.svg
new file mode 100644
index 00000000..8321e383
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/consensus.svg
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="800"
+ height="300"
+ viewBox="0 0 211.66666 79.374999"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="consensus.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.4734708"
+ inkscape:cx="310.49139"
+ inkscape:cy="179.1688"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g1218"
+ transform="translate(-8.9161476,-12.502301)">
+ <circle
+ style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-dasharray:none;stroke-opacity:1"
+ id="path111"
+ cx="38.904896"
+ cy="37.936272"
+ r="13.474442" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="38.879501"
+ y="40.908073"
+ id="text1105"><tspan
+ sodipodi:role="line"
+ id="tspan1103"
+ style="stroke-width:0.264583;fill:#000000"
+ x="38.879501"
+ y="40.908073">$\bot$</tspan></text>
+ </g>
+ <g
+ id="g1218-3"
+ transform="translate(127.41938,-12.502301)">
+ <circle
+ style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-dasharray:none;stroke-opacity:1"
+ id="path111-5"
+ cx="38.904896"
+ cy="37.936272"
+ r="13.474442" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="38.879501"
+ y="40.908073"
+ id="text1105-6"><tspan
+ sodipodi:role="line"
+ id="tspan1103-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="38.879501"
+ y="40.908073">$x$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 44.289635,25.433971 H 145.90576"
+ id="path1414"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="92.729836"
+ y="21.781803"
+ id="text2092"><tspan
+ sodipodi:role="line"
+ id="tspan2090"
+ style="stroke-width:0.264583;fill:#000000"
+ x="92.729836"
+ y="21.781803">$propose(x) / x$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="166.29887"
+ y="69.89299"
+ id="text2092-9"><tspan
+ sodipodi:role="line"
+ id="tspan2090-1"
+ style="stroke-width:0.264583;fill:#000000"
+ x="166.29887"
+ y="69.89299">$propose(y) / x$</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="m 155.82329,35.899857 c -8.35129,12.319651 0.54055,24.640898 11.72797,24.072085 8.65403,-0.440005 18.59818,-11.705963 11.8146,-20.570891"
+ id="path2150"
+ sodipodi:nodetypes="csc" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_1.svg b/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_1.svg
new file mode 100644
index 00000000..f8d24fd8
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_1.svg
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="648"
+ height="480"
+ viewBox="0 0 171.45 127"
+ version="1.1"
+ id="svg2147"
+ inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+ sodipodi:docname="consistent_hashing_1.svg">
+ <defs
+ id="defs2141">
+ <marker
+ style="overflow:visible;"
+ id="marker3465"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3463" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="marker3455"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3453" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="marker3445"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3443" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="Arrow1Lend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3144" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="297.97441"
+ inkscape:cy="245.37211"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1404"
+ inkscape:window-height="1016"
+ inkscape:window-x="281"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <metadata
+ id="metadata2144">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2851"
+ transform="matrix(0.84882735,0,0,0.84882735,-5.4514578,9.7344105)">
+ <circle
+ style="fill:none;stroke:#000000;stroke-width:1"
+ id="path2710"
+ cx="89.153343"
+ cy="63.810429"
+ r="51.14566" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 118.92887,33.710015 131.54406,21.284558"
+ id="path2736"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 130.3168,71.515 17.36133,3.481276"
+ id="path2736-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 104.71157,102.41933 6.56219,16.44605"
+ id="path2736-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 51.073764,81.65523 35.108111,89.312443"
+ id="path2736-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 54.233873,39.571826 39.643162,29.539572"
+ id="path2736-3"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 69.962563,25.77499 61.999798,9.959512"
+ id="path2736-7"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ id="g2992"
+ transform="translate(-19.258685)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987"><tspan
+ sodipodi:role="line"
+ id="tspan2985"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">1</tspan></text>
+ </g>
+ <g
+ id="g2992-5"
+ transform="translate(-5.5636458,61.815287)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-0"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-4"><tspan
+ sodipodi:role="line"
+ id="tspan2985-8"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">2</tspan></text>
+ </g>
+ <g
+ id="g2992-7"
+ transform="translate(-36.464671,99.052583)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-1"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-7"><tspan
+ sodipodi:role="line"
+ id="tspan2985-2"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">3</tspan></text>
+ </g>
+ <g
+ id="g2992-72"
+ transform="translate(-117.33947,73.967241)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAHECAYAAACnX1ofAAAABmJLR0QA/wD/AP+gvaeTAAAULklE QVR4nO3de7B1d0Hf4U94X0LIBRJRiQyYGJAkiAItYtGAUBAaBLFNIXJxqjQ4VYQpWOnQC1Pb2qk3 phWRq1AVBBEj94sKxaLlVgoiSBIgRkIqF7kmGCAJ6R/rQF4hmPCetfdv772eZ2ZPhkyy1veQs8/n 3WtfzhGxy46pzqjuWN2hum31ddXx1QkDd8Gmu7r6ZHVZ9Ynqgur86h3V66u/HjeNVTli9ABmd5Pq wdUDq3tXR42dAzvnC01hfEn17OqDY+cwF0HcHbepHl39SFMUgdW7qnp19V+q/z14CyzeidXTqyua LvO4ubmNub2kul1srQOjB3DYDlSPr15U3bW6wdg5sHinVudUn63e1BRJtohLptvp1OrXq+8aPQS4 Vv+zelD1sdFDuP4Ecfs8tHpmdfToIcDf6bzqzOqi0UO4flxm2x4Hql+qnpcYwjY4remFNrcZPYTr xyPE7XBkUwj/6eghwNfswuq7qw+PHsLfzSPEzXdM9YrEELbVKdXv5D3BG08QN9uRTTG89+ghwL7c rXpBfuZuNG+72Gy/Wp01egQwi9Oa/pD72tFDuHaCuLl+onri6BHArO5Wvb965+ghfCUvqtlM31O9 rulPk8Bu+Wx1z6Y377NBBHHzfHP11uobRw8BVuZD1V2qi0cP4Rqe4N0sRzV9FJsYwm47semzT48Z PYRrCOJmeWr1naNHAGtxp+o3cqVuY3hRzeb46b0bsByn7/319UNXUPmTyaa4T/XKVvsHlPdWz6ne 0vSJGR9p+pVRwFc6qukN9d9f/WjTJc5Vubo6u+nN+7Bot2n6RPxV/Y62zzX9miiXx+Hw3LDpF29f 0urup5+p/v66viDYRMdV72p1d7IPVHdc21cDu+3Y6oWt7v56cfVNa/tqYIMcUZ3b6u5cF1Qnre2r gWW4QdMrwVd1v31TPvOUBXpiq7tTvaa6+fq+FFiUY5s+aWZV99/n5vUdLMgDq6tazZ3pT6obre9L gUU6ufpoq4viE9b3pcA4p1WfbDV3okuqW6zvS4FFu1fTK7VXcV++qukPzrCzTmh6bm8Vd6DL86Z+ WLfHtrpHiZdW37G+LwXW5wZNv9twVXeeh67vSwEO8axWd7++KB/luDaeuF2fn2t6P+AqXNn0Fgtg /Y6sbrnC4/9x0+XZz6/wHCSI63JW06dQ+P8bOBy/3vThAKyQzzJdvTtWL8/vNgQO3x2bnlN84+gh u8wjltW6WdPvNvyW0UOArfeFpleevnz0kF0liKtzfPX7eeUnMJ9PNf1Mee/oIbvIBz6vxo2a/hQn hsCcbtr0eoRjRw/ZRZ5DXI1n5E21wGqc2HR177Wjh+wal0zn96PVs0ePAHbaldUZ1ZtHD9klgjiv 45o+iWaVv0wUoOr9Ta8+vWz0kF3hOcR5/dvEEFiPW1f/YvSIXeIR4nxObPoT29GjhwCL8cHqlKYP GWefPEKcz6MSQ2C9bln90OgRu0IQ5+MtFsAIZ48esCtcMp3HkdXHq2NGDwEW59KmT8Vy2XSfPEKc x10SQ2CM45p+BrFPgjiP240eACzat48esAsEcR43Hz0AWDS/RHgGgjgPQQRGEsQZHBw9YEfcdKbj PKn6rZmOBWy+h1aPm+E4c/0MWjRB3CwfrN42egSwNncfPYBruGQKAAkiAFSCCACVIAJAJYgAUAki AFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgA UAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFR1cPQAtsrB 6g57t1Oqb6huXB01chTs+Wx1efXR6sLqHdU7qytHjmJ7CCLX5UD1A9VDqjOrY8fOga/JZdUrq+dX L6uuGjuHTeaSKV/Ngeqc6v3VudWDEkO2z7HVg6vfq95XPSI/9/gqfGNwbU6v3lI9szpp8BaYy8nV r1Vvrk4bvIUNJIh8uQdVb6v+3ughsCJ3bvoeP2v0EDaLIHKoc6oXNL1QBnbZ0dULm77noRJErvHA 6mn5nmA5btD0Pf+A0UPYDH74UXWr6jlNL6SBJTlQ/WaeKydBZPKc6oTRI2CQm1bPGD2C8QSRB1T3 Gj0CBrtPdb/RIxhLEPk3owfAhnjC6AGMJYjLdqfqH4weARvijKaPJWShBHHZzh49ADbMg0cPYBxB XLYzRw+ADeN5xAUTxOW6SXX70SNgw3x7ddzoEYwhiMt1ev77w5c7UJ06egRj+IG4XCePHgAb6ltG D2AMQVyu40cPgA3lvrFQfkHwcs31W+7fXv32TMeC/Ti76a1E+3X0DMdgCwnics11deDd1c/NdCzY j9s3TxBdOVso/+EBIEEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEA KkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACo BBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaCq g6MHMMzVMx3npOpBMx0L9uOkmY4z132DLSOIy3XpTMe5294NdsWnRw9gDJdMl+tTowfAhvrk6AGM IYjL9RejB8CGunD0AMYQxOV6V3XF6BGwYa6o3jN6BGMI4nJ9rvrT0SNgw7y96b7BAgnisr1k9ADY MC8ePYBxBHHZXpSXmMMXXV2dO3oE4wjisp1XvWb0CNgQr6rOHz2CcQSRp40eABvi6aMHMJYgco/R A2BDfO/oAYwliMt2fPXPR4+ADXFOddPRIxhHEJftH1fHjR4BG+Im1QNHj2AcQVy2Hxw9ADaM+8SC CeJyHZHnD+HL3bPpvsECCeJy3brpEhFwjeOrk0ePYAxBXK7TRg+ADXX66AGMIYjLdbPRA2BDuW8s lF8QvFxzXS79UNNvzoDRbl+dOMNxvPVioQRxueb6b/+H1Q/PdCzYj9+sHj7DcW44wzHYQi6ZAkCC CACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAki AFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgA UAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAVQdHD2DrHVmdMHoENH0v zuHqmY7DlhHE5fr8TMd58N4NdsVc9w22jEumy3XZ6AGwoS4dPYAxBHG5Pjh6AGyoi0cPYAxBXK4L Rg+ADfXe0QMYQxCX6+LqktEjYMNckvvFYgnisr1+9ADYMK8dPYBxBHHZfnf0ANgw544ewDiCuGwv z+Uh+KL/V71q9AjGEcRlu6J66ugRsCF+Oe9BXDRB5El5mTlcUj159AjGEkQurx4zegQM9hPV34we wViCSNWLc+mU5fqV6qWjRzCeIPJFj6leMXoErNkrqseOHsFmEES+6MrqrOoFo4fAmpxbPajpex8E kb/lc9XDqic0vQIVdtHnq3/dFMPLB29hgwgiX+4L1X+t7pxP7WD3/EHT9/bPN32vw5cIIl/NO6t7 V3evfqf67Ng5cNgur15YnVHdp/qzsXPYVH5BMNflDXu3Y6vva/qhcofqlOqE6vhx0+ArfLL6RHVh 9Y7qj6s/zO//5HoQRK6vy6rf27sB7ByXTAEgQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAq QQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgE EQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJE AKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShAB oBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAqg6OHgALdEp1RnV6dVJ1zN7f/0z1l9V7qjdUfzFk HSyUIMJ63KJ6ZPWw6luv579zQfXc6lnVX61oF7DHJVNYra+vfrW6sPoPXf8YVt22+o9NjxR/pfq6 2dcBXyKIsDoPrs6rfry60T6Oc6PqUdX51Vkz7AKuhSDC/G5Q/ffqt6ubzXjcr69eVP1S7rswO3cq mNfB6reqx6zwHI9rem7xwArPAYsjiDCfI6qnV2ev4VwPqZ66hvPAYggizOfR1SPWeL5HNj0/CcxA EGEet6t+fsB5n1SdOuC8sHMEEebxlPb3StLDdVT15AHnhZ0jiLB/967uMfD83zf4/LATBBH276dG D6h+evQA2HaCCPtzi6ZHaKPdpzpx9AjYZoII+/OANuP9gAer+48eAdtMEGF/Num5u3uOHgDbTBBh f+4wesAhvmP0ANhmggj7c8roAYe4zegBsM0EEQ7f0Y157+FXc9TeDTgMggiHb5Ni+EWCCIdJEOHw fWb0gGuxiZtgKwgiHL7PV58aPeIQn6iuGD0CtpUgwv5cMHrAIc4fPQC2mSDC/rx19IBDbNIW2DqC CPvz2tEDDrFJW2DrCCLsz6vajOcRP139/ugRsM0EEfbn8ur5o0dUz23aAhwmQYT9+8XqyoHnv6L6 hYHnh50giLB/76+eOvD8v1xdNPD8sBMEEebx76sPDDjvRdXPDDgv7BxBhHl8qvqh1vvG+M9XZ1eX rvGcsLMEEebzxuqfVV9Yw7murh5ZvWUN54JFEESY1/ObQnXVCs9xZfWI6jdWeA5YHEGE+T27+oHq 4ys49l9X96/+xwqODYsmiLAar6zutPfXubxs75ivmfGYwB5BhNX5QPX9TY/o9vNc35uq+zU96vzg DLuAa3Fw9ABYgFfs3e5SPay6b3Xqdfw751Wvrp5X/Z+VrgMqQYR1ekvXPFL8hup21a2q4/b+3qXV xdW7m54rBNZIEGGMj1Z/NHoEcA3PIQJAgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggA lSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBU dXD0AFiob6y+rbpVdcze3/tM9YHqz6uPDNoFiyWIsD7fVT28um/1rdfxz55fvaZ6XvWWFe8CcskU 1uGB1VurN1U/2XXHsOrU6jHVm/du91/ZOqASRFilk6pXVy+u7ryP49yleln1iuqbZ9gFXAtBhNW4 f/X2psujc7lf9X+rM2c8JrBHEGF+5zQ9KjxhBce+WfXS6hErODYsmiDCvB5WPb06sMJzHKyeVf3I Cs8BiyOIMJ8zque0nvvVEdUzqruu4VywCIII8zi+en51wzWe84Z757zJGs8JO0sQYR4/W91ywHlP qn5mwHlh5wgi7N+tqx8beP5HV7cZeH7YCYII+/f4xn7q04HqcQPPDztBEGF/jq4eMnpE06tbjx49 AraZIML+nFkdN3pE0wtr7jN6BGwzQYT9udfoAYfYpC2wdQQR9mc/n1E6t+8cPQC2mSDC/tx29IBD bNIW2DqCCIfvyOqmo0cc4oTW+8EAsFMEEQ7fMdf9j6zdJm6CrSCIcPg+N3rAtfjs6AGwrQQRDt/f tFlRvDxBhMMmiLA/7x894BDvGz0Atpkgwv786egBh3jn6AGwzQQR9uf1owcc4nWjB8A2E0TYn5dU V44e0bThlaNHwDYTRNifD1d/MHpE9erqQ6NHwDYTRNi/Xxw9oPqF0QNg2wki7N/rqtcOPP9rqv81 8PywEwQR5vGTjXkP4OXVowecF3aOIMI8zqv+1YDz/svqvQPOCztHEGE+T6meucbzPa16xhrPBztN EGFeP149fw3neV7TZVpgJoII87qqenj1pBUd/+qmV5T+8N65gJkIIszvC9VPVWdVH53xuB+u/kn1 +KYwAjMSRFidc6vTqie3v1egXl79t71jvXiGXcC1EERYrY9Xj6lOqZ5Ynf81/Lvvqf7d3r/72OqT s68DvuTg6AGwEH9V/ae928nVGdXp1UnVsXv/zKXVB5pC+IbqL9c/E5ZLEGH9Ltq7ARvEJVMASBAB oBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSA ShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAq QQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKjq4OgB/C03rk4YPQJYmxuP HsA1BHEeV8x0nJ/duwF8LT43esAucMl0HpeOHgAs2mWjB+wCQZzHJaMHAIt28egBu0AQ53HB6AHA or139IBdcMToATvi5tWHRo8AFuub8jNo3zxCnMeHq/NGjwAW6d2J4SwEcT6/O3oAsEjnjh6wK1wy nc/J1fuqA6OHAItxVXXb6sLRQ3aBR4jzuah66egRwKKcmxjOxiPEeZ1a/Vl1w9FDgJ13RfVteYXp bFzem9fHqiOru48eAuy8/5znD2flEeL8Dlavr75n9BBgZ72h+ofVlaOH7BJBXI2bVX/SdAkVYE7n VWc0XZFiRl5Usxofq763etvoIcBOeWd178RwJQRxdT5c3aP6tdFDgJ3wzOq789nJKyOIq3VZdU51 ZvXng7cA2+ld1T+qfqz6zOAtO81ziOtzoPrB6lFNr0L1Cl/gq7mq+qPqKdVL9v43KyaIY9y8um91 1+r21SnVTapjR44Chris+nTTG+zfVb2xenX1kZGjluj/A7eiP6AtHfmzAAAAAElFTkSuQmCC "
+ id="image2981-2"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-6"><tspan
+ sodipodi:role="line"
+ id="tspan2985-1"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">4</tspan></text>
+ </g>
+ <g
+ id="g2992-0"
+ transform="translate(-118.04937,17.044482)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-6"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-1"><tspan
+ sodipodi:role="line"
+ id="tspan2985-5"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">5</tspan></text>
+ </g>
+ <g
+ id="g2992-9"
+ transform="translate(-94.51307,-9.6130091)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-4"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-9"><tspan
+ sodipodi:role="line"
+ id="tspan2985-0"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">6</tspan></text>
+ </g>
+ <rect
+ style="fill:none;stroke:#000040;stroke-width:0.799999;stroke-dasharray:2.4, 0.79999900000000002;stroke-opacity:0.01249951"
+ id="rect894"
+ width="171.26611"
+ height="127.22334"
+ x="0.13010304"
+ y="0.24505959" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_2.svg b/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_2.svg
new file mode 100644
index 00000000..5ac8faf6
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_2.svg
@@ -0,0 +1,334 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="648"
+ height="480"
+ viewBox="0 0 171.45 127"
+ version="1.1"
+ id="svg2147"
+ inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+ sodipodi:docname="consistent_hashing_2.svg">
+ <defs
+ id="defs2141">
+ <marker
+ style="overflow:visible;"
+ id="marker3465"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3463" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="marker3455"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3453" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="marker3445"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3443" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="Arrow1Lend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3144" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.7"
+ inkscape:cx="166.38273"
+ inkscape:cy="269.80211"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1404"
+ inkscape:window-height="1016"
+ inkscape:window-x="281"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <metadata
+ id="metadata2144">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2851"
+ transform="matrix(0.84882735,0,0,0.84882735,-5.4514578,9.7344105)">
+ <circle
+ style="fill:none;stroke:#000000;stroke-width:1"
+ id="path2710"
+ cx="89.153343"
+ cy="63.810429"
+ r="51.14566" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 118.92887,33.710015 131.54406,21.284558"
+ id="path2736"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 130.3168,71.515 17.36133,3.481276"
+ id="path2736-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 104.71157,102.41933 6.56219,16.44605"
+ id="path2736-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 51.073764,81.65523 35.108111,89.312443"
+ id="path2736-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 54.233873,39.571826 39.643162,29.539572"
+ id="path2736-3"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 69.962563,25.77499 61.999798,9.959512"
+ id="path2736-7"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ id="g2992"
+ transform="translate(-19.258685)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987"><tspan
+ sodipodi:role="line"
+ id="tspan2985"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">1</tspan></text>
+ </g>
+ <g
+ id="g2992-5"
+ transform="translate(-5.5636458,61.815287)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-0"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-4"><tspan
+ sodipodi:role="line"
+ id="tspan2985-8"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">2</tspan></text>
+ </g>
+ <g
+ id="g2992-7"
+ transform="translate(-36.464671,99.052583)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-1"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-7"><tspan
+ sodipodi:role="line"
+ id="tspan2985-2"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">3</tspan></text>
+ </g>
+ <g
+ id="g2992-72"
+ transform="translate(-117.33947,73.967241)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-2"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-6"><tspan
+ sodipodi:role="line"
+ id="tspan2985-1"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">4</tspan></text>
+ </g>
+ <g
+ id="g2992-0"
+ transform="translate(-118.04937,17.044482)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAHECAYAAACnX1ofAAAABmJLR0QA/wD/AP+gvaeTAAAULklE QVR4nO3de7B1d0Hf4U94X0LIBRJRiQyYGJAkiAItYtGAUBAaBLFNIXJxqjQ4VYQpWOnQC1Pb2qk3 phWRq1AVBBEj94sKxaLlVgoiSBIgRkIqF7kmGCAJ6R/rQF4hmPCetfdv772eZ2ZPhkyy1veQs8/n 3WtfzhGxy46pzqjuWN2hum31ddXx1QkDd8Gmu7r6ZHVZ9Ynqgur86h3V66u/HjeNVTli9ABmd5Pq wdUDq3tXR42dAzvnC01hfEn17OqDY+cwF0HcHbepHl39SFMUgdW7qnp19V+q/z14CyzeidXTqyua LvO4ubmNub2kul1srQOjB3DYDlSPr15U3bW6wdg5sHinVudUn63e1BRJtohLptvp1OrXq+8aPQS4 Vv+zelD1sdFDuP4Ecfs8tHpmdfToIcDf6bzqzOqi0UO4flxm2x4Hql+qnpcYwjY4remFNrcZPYTr xyPE7XBkUwj/6eghwNfswuq7qw+PHsLfzSPEzXdM9YrEELbVKdXv5D3BG08QN9uRTTG89+ghwL7c rXpBfuZuNG+72Gy/Wp01egQwi9Oa/pD72tFDuHaCuLl+onri6BHArO5Wvb965+ghfCUvqtlM31O9 rulPk8Bu+Wx1z6Y377NBBHHzfHP11uobRw8BVuZD1V2qi0cP4Rqe4N0sRzV9FJsYwm47semzT48Z PYRrCOJmeWr1naNHAGtxp+o3cqVuY3hRzeb46b0bsByn7/319UNXUPmTyaa4T/XKVvsHlPdWz6ne 0vSJGR9p+pVRwFc6qukN9d9f/WjTJc5Vubo6u+nN+7Bot2n6RPxV/Y62zzX9miiXx+Hw3LDpF29f 0urup5+p/v66viDYRMdV72p1d7IPVHdc21cDu+3Y6oWt7v56cfVNa/tqYIMcUZ3b6u5cF1Qnre2r gWW4QdMrwVd1v31TPvOUBXpiq7tTvaa6+fq+FFiUY5s+aWZV99/n5vUdLMgDq6tazZ3pT6obre9L gUU6ufpoq4viE9b3pcA4p1WfbDV3okuqW6zvS4FFu1fTK7VXcV++qukPzrCzTmh6bm8Vd6DL86Z+ WLfHtrpHiZdW37G+LwXW5wZNv9twVXeeh67vSwEO8axWd7++KB/luDaeuF2fn2t6P+AqXNn0Fgtg /Y6sbrnC4/9x0+XZz6/wHCSI63JW06dQ+P8bOBy/3vThAKyQzzJdvTtWL8/vNgQO3x2bnlN84+gh u8wjltW6WdPvNvyW0UOArfeFpleevnz0kF0liKtzfPX7eeUnMJ9PNf1Mee/oIbvIBz6vxo2a/hQn hsCcbtr0eoRjRw/ZRZ5DXI1n5E21wGqc2HR177Wjh+wal0zn96PVs0ePAHbaldUZ1ZtHD9klgjiv 45o+iWaVv0wUoOr9Ta8+vWz0kF3hOcR5/dvEEFiPW1f/YvSIXeIR4nxObPoT29GjhwCL8cHqlKYP GWefPEKcz6MSQ2C9bln90OgRu0IQ5+MtFsAIZ48esCtcMp3HkdXHq2NGDwEW59KmT8Vy2XSfPEKc x10SQ2CM45p+BrFPgjiP240eACzat48esAsEcR43Hz0AWDS/RHgGgjgPQQRGEsQZHBw9YEfcdKbj PKn6rZmOBWy+h1aPm+E4c/0MWjRB3CwfrN42egSwNncfPYBruGQKAAkiAFSCCACVIAJAJYgAUAki AFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgA UAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFR1cPQAtsrB 6g57t1Oqb6huXB01chTs+Wx1efXR6sLqHdU7qytHjmJ7CCLX5UD1A9VDqjOrY8fOga/JZdUrq+dX L6uuGjuHTeaSKV/Ngeqc6v3VudWDEkO2z7HVg6vfq95XPSI/9/gqfGNwbU6v3lI9szpp8BaYy8nV r1Vvrk4bvIUNJIh8uQdVb6v+3ughsCJ3bvoeP2v0EDaLIHKoc6oXNL1QBnbZ0dULm77noRJErvHA 6mn5nmA5btD0Pf+A0UPYDH74UXWr6jlNL6SBJTlQ/WaeKydBZPKc6oTRI2CQm1bPGD2C8QSRB1T3 Gj0CBrtPdb/RIxhLEPk3owfAhnjC6AGMJYjLdqfqH4weARvijKaPJWShBHHZzh49ADbMg0cPYBxB XLYzRw+ADeN5xAUTxOW6SXX70SNgw3x7ddzoEYwhiMt1ev77w5c7UJ06egRj+IG4XCePHgAb6ltG D2AMQVyu40cPgA3lvrFQfkHwcs31W+7fXv32TMeC/Ti76a1E+3X0DMdgCwnics11deDd1c/NdCzY j9s3TxBdOVso/+EBIEEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEA KkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACo BBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaCq g6MHMMzVMx3npOpBMx0L9uOkmY4z132DLSOIy3XpTMe5294NdsWnRw9gDJdMl+tTowfAhvrk6AGM IYjL9RejB8CGunD0AMYQxOV6V3XF6BGwYa6o3jN6BGMI4nJ9rvrT0SNgw7y96b7BAgnisr1k9ADY MC8ePYBxBHHZXpSXmMMXXV2dO3oE4wjisp1XvWb0CNgQr6rOHz2CcQSRp40eABvi6aMHMJYgco/R A2BDfO/oAYwliMt2fPXPR4+ADXFOddPRIxhHEJftH1fHjR4BG+Im1QNHj2AcQVy2Hxw9ADaM+8SC CeJyHZHnD+HL3bPpvsECCeJy3brpEhFwjeOrk0ePYAxBXK7TRg+ADXX66AGMIYjLdbPRA2BDuW8s lF8QvFxzXS79UNNvzoDRbl+dOMNxvPVioQRxueb6b/+H1Q/PdCzYj9+sHj7DcW44wzHYQi6ZAkCC CACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAki AFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgA UAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAVQdHD2DrHVmdMHoENH0v zuHqmY7DlhHE5fr8TMd58N4NdsVc9w22jEumy3XZ6AGwoS4dPYAxBHG5Pjh6AGyoi0cPYAxBXK4L Rg+ADfXe0QMYQxCX6+LqktEjYMNckvvFYgnisr1+9ADYMK8dPYBxBHHZfnf0ANgw544ewDiCuGwv z+Uh+KL/V71q9AjGEcRlu6J66ugRsCF+Oe9BXDRB5El5mTlcUj159AjGEkQurx4zegQM9hPV34we wViCSNWLc+mU5fqV6qWjRzCeIPJFj6leMXoErNkrqseOHsFmEES+6MrqrOoFo4fAmpxbPajpex8E kb/lc9XDqic0vQIVdtHnq3/dFMPLB29hgwgiX+4L1X+t7pxP7WD3/EHT9/bPN32vw5cIIl/NO6t7 V3evfqf67Ng5cNgur15YnVHdp/qzsXPYVH5BMNflDXu3Y6vva/qhcofqlOqE6vhx0+ArfLL6RHVh 9Y7qj6s/zO//5HoQRK6vy6rf27sB7ByXTAEgQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAq QQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgE EQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJE AKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShAB oBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAqg6OHgALdEp1RnV6dVJ1zN7f/0z1l9V7qjdUfzFk HSyUIMJ63KJ6ZPWw6luv579zQfXc6lnVX61oF7DHJVNYra+vfrW6sPoPXf8YVt22+o9NjxR/pfq6 2dcBXyKIsDoPrs6rfry60T6Oc6PqUdX51Vkz7AKuhSDC/G5Q/ffqt6ubzXjcr69eVP1S7rswO3cq mNfB6reqx6zwHI9rem7xwArPAYsjiDCfI6qnV2ev4VwPqZ66hvPAYggizOfR1SPWeL5HNj0/CcxA EGEet6t+fsB5n1SdOuC8sHMEEebxlPb3StLDdVT15AHnhZ0jiLB/967uMfD83zf4/LATBBH276dG D6h+evQA2HaCCPtzi6ZHaKPdpzpx9AjYZoII+/OANuP9gAer+48eAdtMEGF/Num5u3uOHgDbTBBh f+4wesAhvmP0ANhmggj7c8roAYe4zegBsM0EEQ7f0Y157+FXc9TeDTgMggiHb5Ni+EWCCIdJEOHw fWb0gGuxiZtgKwgiHL7PV58aPeIQn6iuGD0CtpUgwv5cMHrAIc4fPQC2mSDC/rx19IBDbNIW2DqC CPvz2tEDDrFJW2DrCCLsz6vajOcRP139/ugRsM0EEfbn8ur5o0dUz23aAhwmQYT9+8XqyoHnv6L6 hYHnh50giLB/76+eOvD8v1xdNPD8sBMEEebx76sPDDjvRdXPDDgv7BxBhHl8qvqh1vvG+M9XZ1eX rvGcsLMEEebzxuqfVV9Yw7murh5ZvWUN54JFEESY1/ObQnXVCs9xZfWI6jdWeA5YHEGE+T27+oHq 4ys49l9X96/+xwqODYsmiLAar6zutPfXubxs75ivmfGYwB5BhNX5QPX9TY/o9vNc35uq+zU96vzg DLuAa3Fw9ABYgFfs3e5SPay6b3Xqdfw751Wvrp5X/Z+VrgMqQYR1ekvXPFL8hup21a2q4/b+3qXV xdW7m54rBNZIEGGMj1Z/NHoEcA3PIQJAgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggA lSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBU dXD0AFiob6y+rbpVdcze3/tM9YHqz6uPDNoFiyWIsD7fVT28um/1rdfxz55fvaZ6XvWWFe8CcskU 1uGB1VurN1U/2XXHsOrU6jHVm/du91/ZOqASRFilk6pXVy+u7ryP49yleln1iuqbZ9gFXAtBhNW4 f/X2psujc7lf9X+rM2c8JrBHEGF+5zQ9KjxhBce+WfXS6hErODYsmiDCvB5WPb06sMJzHKyeVf3I Cs8BiyOIMJ8zque0nvvVEdUzqruu4VywCIII8zi+en51wzWe84Z757zJGs8JO0sQYR4/W91ywHlP qn5mwHlh5wgi7N+tqx8beP5HV7cZeH7YCYII+/f4xn7q04HqcQPPDztBEGF/jq4eMnpE06tbjx49 AraZIML+nFkdN3pE0wtr7jN6BGwzQYT9udfoAYfYpC2wdQQR9mc/n1E6t+8cPQC2mSDC/tx29IBD bNIW2DqCCIfvyOqmo0cc4oTW+8EAsFMEEQ7fMdf9j6zdJm6CrSCIcPg+N3rAtfjs6AGwrQQRDt/f tFlRvDxBhMMmiLA/7x894BDvGz0Atpkgwv786egBh3jn6AGwzQQR9uf1owcc4nWjB8A2E0TYn5dU V44e0bThlaNHwDYTRNifD1d/MHpE9erqQ6NHwDYTRNi/Xxw9oPqF0QNg2wki7N/rqtcOPP9rqv81 8PywEwQR5vGTjXkP4OXVowecF3aOIMI8zqv+1YDz/svqvQPOCztHEGE+T6meucbzPa16xhrPBztN EGFeP149fw3neV7TZVpgJoII87qqenj1pBUd/+qmV5T+8N65gJkIIszvC9VPVWdVH53xuB+u/kn1 +KYwAjMSRFidc6vTqie3v1egXl79t71jvXiGXcC1EERYrY9Xj6lOqZ5Ynf81/Lvvqf7d3r/72OqT s68DvuTg6AGwEH9V/ae928nVGdXp1UnVsXv/zKXVB5pC+IbqL9c/E5ZLEGH9Ltq7ARvEJVMASBAB oBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSA ShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAq QQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKjq4OgB/C03rk4YPQJYmxuP HsA1BHEeV8x0nJ/duwF8LT43esAucMl0HpeOHgAs2mWjB+wCQZzHJaMHAIt28egBu0AQ53HB6AHA or139IBdcMToATvi5tWHRo8AFuub8jNo3zxCnMeHq/NGjwAW6d2J4SwEcT6/O3oAsEjnjh6wK1wy nc/J1fuqA6OHAItxVXXb6sLRQ3aBR4jzuah66egRwKKcmxjOxiPEeZ1a/Vl1w9FDgJ13RfVteYXp bFzem9fHqiOru48eAuy8/5znD2flEeL8Dlavr75n9BBgZ72h+ofVlaOH7BJBXI2bVX/SdAkVYE7n VWc0XZFiRl5Usxofq763etvoIcBOeWd178RwJQRxdT5c3aP6tdFDgJ3wzOq789nJKyOIq3VZdU51 ZvXng7cA2+ld1T+qfqz6zOAtO81ziOtzoPrB6lFNr0L1Cl/gq7mq+qPqKdVL9v43KyaIY9y8um91 1+r21SnVTapjR44Chris+nTTG+zfVb2xenX1kZGjluj/A7eiP6AtHfmzAAAAAElFTkSuQmCC "
+ id="image2981-6"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-1"><tspan
+ sodipodi:role="line"
+ id="tspan2985-5"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">5</tspan></text>
+ </g>
+ <g
+ id="g2992-9"
+ transform="translate(-94.51307,-9.6130091)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-4"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-9"><tspan
+ sodipodi:role="line"
+ id="tspan2985-0"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">6</tspan></text>
+ </g>
+ <g
+ id="g3137"
+ transform="translate(6.1449507,10.235717)"
+ style="stroke:#0000ff;stroke-opacity:1">
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 161.12836,39.73877 V 54.647494 L 146.163,54.488794 V 33.300302 h 8.7615 l 5.86826,6.195557 h -5.87342 v -6.047936"
+ id="path3085"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,37.39937 h 4.21162"
+ id="path3087" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,40.644703 h 4.21162"
+ id="path3087-7" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,43.555576 h 9.81264"
+ id="path3087-1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,46.646723 h 9.81264"
+ id="path3087-1-1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,50.449131 h 9.81264"
+ id="path3087-1-5"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <rect
+ style="fill:none;stroke:#000040;stroke-width:0.799999;stroke-dasharray:2.4, 0.799999;stroke-opacity:0.0124995"
+ id="rect894"
+ width="171.26611"
+ height="127.22335"
+ x="0.13010304"
+ y="0.24505216" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_3.svg b/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_3.svg
new file mode 100644
index 00000000..fdfd3efc
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_3.svg
@@ -0,0 +1,358 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="648"
+ height="480"
+ viewBox="0 0 171.45 127"
+ version="1.1"
+ id="svg2147"
+ inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+ sodipodi:docname="consistent_hashing_3.svg">
+ <defs
+ id="defs2141">
+ <marker
+ style="overflow:visible;"
+ id="marker3465"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3463" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="marker3455"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3453" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="marker3445"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3443" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="Arrow1Mend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3150" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="Arrow1Lend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3144" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.7"
+ inkscape:cx="166.38273"
+ inkscape:cy="269.80211"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1404"
+ inkscape:window-height="1016"
+ inkscape:window-x="281"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <metadata
+ id="metadata2144">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2851"
+ transform="matrix(0.84882735,0,0,0.84882735,-5.4514578,9.7344105)">
+ <circle
+ style="fill:none;stroke:#000000;stroke-width:1"
+ id="path2710"
+ cx="89.153343"
+ cy="63.810429"
+ r="51.14566" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 118.92887,33.710015 131.54406,21.284558"
+ id="path2736"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 130.3168,71.515 17.36133,3.481276"
+ id="path2736-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 104.71157,102.41933 6.56219,16.44605"
+ id="path2736-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 51.073764,81.65523 35.108111,89.312443"
+ id="path2736-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 54.233873,39.571826 39.643162,29.539572"
+ id="path2736-3"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 69.962563,25.77499 61.999798,9.959512"
+ id="path2736-7"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ id="g2992"
+ transform="translate(-19.258685)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987"><tspan
+ sodipodi:role="line"
+ id="tspan2985"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">1</tspan></text>
+ </g>
+ <g
+ id="g2992-5"
+ transform="translate(-5.5636458,61.815287)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-0"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-4"><tspan
+ sodipodi:role="line"
+ id="tspan2985-8"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">2</tspan></text>
+ </g>
+ <g
+ id="g2992-7"
+ transform="translate(-36.464671,99.052583)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-1"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-7"><tspan
+ sodipodi:role="line"
+ id="tspan2985-2"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">3</tspan></text>
+ </g>
+ <g
+ id="g2992-72"
+ transform="translate(-117.33947,73.967241)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-2"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-6"><tspan
+ sodipodi:role="line"
+ id="tspan2985-1"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">4</tspan></text>
+ </g>
+ <g
+ id="g2992-0"
+ transform="translate(-118.04937,17.044482)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-6"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-1"><tspan
+ sodipodi:role="line"
+ id="tspan2985-5"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">5</tspan></text>
+ </g>
+ <g
+ id="g2992-9"
+ transform="translate(-94.51307,-9.6130091)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-4"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-9"><tspan
+ sodipodi:role="line"
+ id="tspan2985-0"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">6</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:0.848828;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 104.64946,54.902986 119.22518,51.23513"
+ id="path2736-1"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g3137"
+ transform="translate(6.1449507,10.235717)"
+ style="stroke:#0000ff;stroke-opacity:1">
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 161.12836,39.73877 V 54.647494 L 146.163,54.488794 V 33.300302 h 8.7615 l 5.86826,6.195557 h -5.87342 v -6.047936"
+ id="path3085"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,37.39937 h 4.21162"
+ id="path3087" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,40.644703 h 4.21162"
+ id="path3087-7" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,43.555576 h 9.81264"
+ id="path3087-1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,46.646723 h 9.81264"
+ id="path3087-1-1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,50.449131 h 9.81264"
+ id="path3087-1-5"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)"
+ d="m 147.85661,51.721464 c -6.70172,-3.912196 -23.39473,-1.178632 -23.39473,-1.178632"
+ id="path3139" />
+ <rect
+ style="fill:none;stroke:#000040;stroke-width:0.799999;stroke-dasharray:2.4, 0.799999;stroke-opacity:0.0124995"
+ id="rect894"
+ width="171.26611"
+ height="127.22335"
+ x="0.13010304"
+ y="0.24505216" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_4.svg b/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_4.svg
new file mode 100644
index 00000000..95ed0e02
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/consistent_hashing_4.svg
@@ -0,0 +1,377 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="648"
+ height="480"
+ viewBox="0 0 171.45 127"
+ version="1.1"
+ id="svg2147"
+ inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+ sodipodi:docname="consistent_hashing_4.svg">
+ <defs
+ id="defs2141">
+ <marker
+ style="overflow:visible;"
+ id="marker3465"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3463" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="marker3455"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3453" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="marker3445"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3443" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="Arrow1Mend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;stroke:#0000ff;stroke-width:1pt;stroke-opacity:1;fill:#0000ff;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3150" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="Arrow1Lend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path3144" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.7"
+ inkscape:cx="166.38273"
+ inkscape:cy="269.80211"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1404"
+ inkscape:window-height="1016"
+ inkscape:window-x="281"
+ inkscape:window-y="27"
+ inkscape:window-maximized="0"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <metadata
+ id="metadata2144">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2851"
+ transform="matrix(0.84882735,0,0,0.84882735,-5.4514578,9.7344105)">
+ <circle
+ style="fill:none;stroke:#000000;stroke-width:1"
+ id="path2710"
+ cx="89.153343"
+ cy="63.810429"
+ r="51.14566" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 118.92887,33.710015 131.54406,21.284558"
+ id="path2736"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 130.3168,71.515 17.36133,3.481276"
+ id="path2736-5"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 104.71157,102.41933 6.56219,16.44605"
+ id="path2736-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 51.073764,81.65523 35.108111,89.312443"
+ id="path2736-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 54.233873,39.571826 39.643162,29.539572"
+ id="path2736-3"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 69.962563,25.77499 61.999798,9.959512"
+ id="path2736-7"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ id="g2992"
+ transform="translate(-19.258685)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987"><tspan
+ sodipodi:role="line"
+ id="tspan2985"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">1</tspan></text>
+ </g>
+ <g
+ id="g2992-5"
+ transform="translate(-5.5636458,61.815287)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-0"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-4"><tspan
+ sodipodi:role="line"
+ id="tspan2985-8"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">2</tspan></text>
+ </g>
+ <g
+ id="g2992-7"
+ transform="translate(-36.464671,99.052583)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-1"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-7"><tspan
+ sodipodi:role="line"
+ id="tspan2985-2"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">3</tspan></text>
+ </g>
+ <g
+ id="g2992-72"
+ transform="translate(-117.33947,73.967241)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-2"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-6"><tspan
+ sodipodi:role="line"
+ id="tspan2985-1"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">4</tspan></text>
+ </g>
+ <g
+ id="g2992-0"
+ transform="translate(-118.04937,17.044482)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image2981-6"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-1"><tspan
+ sodipodi:role="line"
+ id="tspan2985-5"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">5</tspan></text>
+ </g>
+ <g
+ id="g2992-9"
+ transform="translate(-94.51307,-9.6130091)">
+ <image
+ width="16.223312"
+ height="16.223312"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcQAAAHECAYAAACnX1ofAAAABmJLR0QA/wD/AP+gvaeTAAAULklE QVR4nO3de7B1d0Hf4U94X0LIBRJRiQyYGJAkiAItYtGAUBAaBLFNIXJxqjQ4VYQpWOnQC1Pb2qk3 phWRq1AVBBEj94sKxaLlVgoiSBIgRkIqF7kmGCAJ6R/rQF4hmPCetfdv772eZ2ZPhkyy1veQs8/n 3WtfzhGxy46pzqjuWN2hum31ddXx1QkDd8Gmu7r6ZHVZ9Ynqgur86h3V66u/HjeNVTli9ABmd5Pq wdUDq3tXR42dAzvnC01hfEn17OqDY+cwF0HcHbepHl39SFMUgdW7qnp19V+q/z14CyzeidXTqyua LvO4ubmNub2kul1srQOjB3DYDlSPr15U3bW6wdg5sHinVudUn63e1BRJtohLptvp1OrXq+8aPQS4 Vv+zelD1sdFDuP4Ecfs8tHpmdfToIcDf6bzqzOqi0UO4flxm2x4Hql+qnpcYwjY4remFNrcZPYTr xyPE7XBkUwj/6eghwNfswuq7qw+PHsLfzSPEzXdM9YrEELbVKdXv5D3BG08QN9uRTTG89+ghwL7c rXpBfuZuNG+72Gy/Wp01egQwi9Oa/pD72tFDuHaCuLl+onri6BHArO5Wvb965+ghfCUvqtlM31O9 rulPk8Bu+Wx1z6Y377NBBHHzfHP11uobRw8BVuZD1V2qi0cP4Rqe4N0sRzV9FJsYwm47semzT48Z PYRrCOJmeWr1naNHAGtxp+o3cqVuY3hRzeb46b0bsByn7/319UNXUPmTyaa4T/XKVvsHlPdWz6ne 0vSJGR9p+pVRwFc6qukN9d9f/WjTJc5Vubo6u+nN+7Bot2n6RPxV/Y62zzX9miiXx+Hw3LDpF29f 0urup5+p/v66viDYRMdV72p1d7IPVHdc21cDu+3Y6oWt7v56cfVNa/tqYIMcUZ3b6u5cF1Qnre2r gWW4QdMrwVd1v31TPvOUBXpiq7tTvaa6+fq+FFiUY5s+aWZV99/n5vUdLMgDq6tazZ3pT6obre9L gUU6ufpoq4viE9b3pcA4p1WfbDV3okuqW6zvS4FFu1fTK7VXcV++qukPzrCzTmh6bm8Vd6DL86Z+ WLfHtrpHiZdW37G+LwXW5wZNv9twVXeeh67vSwEO8axWd7++KB/luDaeuF2fn2t6P+AqXNn0Fgtg /Y6sbrnC4/9x0+XZz6/wHCSI63JW06dQ+P8bOBy/3vThAKyQzzJdvTtWL8/vNgQO3x2bnlN84+gh u8wjltW6WdPvNvyW0UOArfeFpleevnz0kF0liKtzfPX7eeUnMJ9PNf1Mee/oIbvIBz6vxo2a/hQn hsCcbtr0eoRjRw/ZRZ5DXI1n5E21wGqc2HR177Wjh+wal0zn96PVs0ePAHbaldUZ1ZtHD9klgjiv 45o+iWaVv0wUoOr9Ta8+vWz0kF3hOcR5/dvEEFiPW1f/YvSIXeIR4nxObPoT29GjhwCL8cHqlKYP GWefPEKcz6MSQ2C9bln90OgRu0IQ5+MtFsAIZ48esCtcMp3HkdXHq2NGDwEW59KmT8Vy2XSfPEKc x10SQ2CM45p+BrFPgjiP240eACzat48esAsEcR43Hz0AWDS/RHgGgjgPQQRGEsQZHBw9YEfcdKbj PKn6rZmOBWy+h1aPm+E4c/0MWjRB3CwfrN42egSwNncfPYBruGQKAAkiAFSCCACVIAJAJYgAUAki AFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgA UAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFR1cPQAtsrB 6g57t1Oqb6huXB01chTs+Wx1efXR6sLqHdU7qytHjmJ7CCLX5UD1A9VDqjOrY8fOga/JZdUrq+dX L6uuGjuHTeaSKV/Ngeqc6v3VudWDEkO2z7HVg6vfq95XPSI/9/gqfGNwbU6v3lI9szpp8BaYy8nV r1Vvrk4bvIUNJIh8uQdVb6v+3ughsCJ3bvoeP2v0EDaLIHKoc6oXNL1QBnbZ0dULm77noRJErvHA 6mn5nmA5btD0Pf+A0UPYDH74UXWr6jlNL6SBJTlQ/WaeKydBZPKc6oTRI2CQm1bPGD2C8QSRB1T3 Gj0CBrtPdb/RIxhLEPk3owfAhnjC6AGMJYjLdqfqH4weARvijKaPJWShBHHZzh49ADbMg0cPYBxB XLYzRw+ADeN5xAUTxOW6SXX70SNgw3x7ddzoEYwhiMt1ev77w5c7UJ06egRj+IG4XCePHgAb6ltG D2AMQVyu40cPgA3lvrFQfkHwcs31W+7fXv32TMeC/Ti76a1E+3X0DMdgCwnics11deDd1c/NdCzY j9s3TxBdOVso/+EBIEEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEA KkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACo BBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaASRACoBBEAKkEEgEoQAaCq g6MHMMzVMx3npOpBMx0L9uOkmY4z132DLSOIy3XpTMe5294NdsWnRw9gDJdMl+tTowfAhvrk6AGM IYjL9RejB8CGunD0AMYQxOV6V3XF6BGwYa6o3jN6BGMI4nJ9rvrT0SNgw7y96b7BAgnisr1k9ADY MC8ePYBxBHHZXpSXmMMXXV2dO3oE4wjisp1XvWb0CNgQr6rOHz2CcQSRp40eABvi6aMHMJYgco/R A2BDfO/oAYwliMt2fPXPR4+ADXFOddPRIxhHEJftH1fHjR4BG+Im1QNHj2AcQVy2Hxw9ADaM+8SC CeJyHZHnD+HL3bPpvsECCeJy3brpEhFwjeOrk0ePYAxBXK7TRg+ADXX66AGMIYjLdbPRA2BDuW8s lF8QvFxzXS79UNNvzoDRbl+dOMNxvPVioQRxueb6b/+H1Q/PdCzYj9+sHj7DcW44wzHYQi6ZAkCC CACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAki AFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgA UAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAJYgAUAkiAFSCCACVIAJAVQdHD2DrHVmdMHoENH0v zuHqmY7DlhHE5fr8TMd58N4NdsVc9w22jEumy3XZ6AGwoS4dPYAxBHG5Pjh6AGyoi0cPYAxBXK4L Rg+ADfXe0QMYQxCX6+LqktEjYMNckvvFYgnisr1+9ADYMK8dPYBxBHHZfnf0ANgw544ewDiCuGwv z+Uh+KL/V71q9AjGEcRlu6J66ugRsCF+Oe9BXDRB5El5mTlcUj159AjGEkQurx4zegQM9hPV34we wViCSNWLc+mU5fqV6qWjRzCeIPJFj6leMXoErNkrqseOHsFmEES+6MrqrOoFo4fAmpxbPajpex8E kb/lc9XDqic0vQIVdtHnq3/dFMPLB29hgwgiX+4L1X+t7pxP7WD3/EHT9/bPN32vw5cIIl/NO6t7 V3evfqf67Ng5cNgur15YnVHdp/qzsXPYVH5BMNflDXu3Y6vva/qhcofqlOqE6vhx0+ArfLL6RHVh 9Y7qj6s/zO//5HoQRK6vy6rf27sB7ByXTAEgQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAq QQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgE EQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJE AKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShAB oBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAqg6OHgALdEp1RnV6dVJ1zN7f/0z1l9V7qjdUfzFk HSyUIMJ63KJ6ZPWw6luv579zQfXc6lnVX61oF7DHJVNYra+vfrW6sPoPXf8YVt22+o9NjxR/pfq6 2dcBXyKIsDoPrs6rfry60T6Oc6PqUdX51Vkz7AKuhSDC/G5Q/ffqt6ubzXjcr69eVP1S7rswO3cq mNfB6reqx6zwHI9rem7xwArPAYsjiDCfI6qnV2ev4VwPqZ66hvPAYggizOfR1SPWeL5HNj0/CcxA EGEet6t+fsB5n1SdOuC8sHMEEebxlPb3StLDdVT15AHnhZ0jiLB/967uMfD83zf4/LATBBH276dG D6h+evQA2HaCCPtzi6ZHaKPdpzpx9AjYZoII+/OANuP9gAer+48eAdtMEGF/Num5u3uOHgDbTBBh f+4wesAhvmP0ANhmggj7c8roAYe4zegBsM0EEQ7f0Y157+FXc9TeDTgMggiHb5Ni+EWCCIdJEOHw fWb0gGuxiZtgKwgiHL7PV58aPeIQn6iuGD0CtpUgwv5cMHrAIc4fPQC2mSDC/rx19IBDbNIW2DqC CPvz2tEDDrFJW2DrCCLsz6vajOcRP139/ugRsM0EEfbn8ur5o0dUz23aAhwmQYT9+8XqyoHnv6L6 hYHnh50giLB/76+eOvD8v1xdNPD8sBMEEebx76sPDDjvRdXPDDgv7BxBhHl8qvqh1vvG+M9XZ1eX rvGcsLMEEebzxuqfVV9Yw7murh5ZvWUN54JFEESY1/ObQnXVCs9xZfWI6jdWeA5YHEGE+T27+oHq 4ys49l9X96/+xwqODYsmiLAar6zutPfXubxs75ivmfGYwB5BhNX5QPX9TY/o9vNc35uq+zU96vzg DLuAa3Fw9ABYgFfs3e5SPay6b3Xqdfw751Wvrp5X/Z+VrgMqQYR1ekvXPFL8hup21a2q4/b+3qXV xdW7m54rBNZIEGGMj1Z/NHoEcA3PIQJAgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggA lSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBUgggAlSACQCWIAFAJIgBU dXD0AFiob6y+rbpVdcze3/tM9YHqz6uPDNoFiyWIsD7fVT28um/1rdfxz55fvaZ6XvWWFe8CcskU 1uGB1VurN1U/2XXHsOrU6jHVm/du91/ZOqASRFilk6pXVy+u7ryP49yleln1iuqbZ9gFXAtBhNW4 f/X2psujc7lf9X+rM2c8JrBHEGF+5zQ9KjxhBce+WfXS6hErODYsmiDCvB5WPb06sMJzHKyeVf3I Cs8BiyOIMJ8zque0nvvVEdUzqruu4VywCIII8zi+en51wzWe84Z757zJGs8JO0sQYR4/W91ywHlP qn5mwHlh5wgi7N+tqx8beP5HV7cZeH7YCYII+/f4xn7q04HqcQPPDztBEGF/jq4eMnpE06tbjx49 AraZIML+nFkdN3pE0wtr7jN6BGwzQYT9udfoAYfYpC2wdQQR9mc/n1E6t+8cPQC2mSDC/tx29IBD bNIW2DqCCIfvyOqmo0cc4oTW+8EAsFMEEQ7fMdf9j6zdJm6CrSCIcPg+N3rAtfjs6AGwrQQRDt/f tFlRvDxBhMMmiLA/7x894BDvGz0Atpkgwv786egBh3jn6AGwzQQR9uf1owcc4nWjB8A2E0TYn5dU V44e0bThlaNHwDYTRNifD1d/MHpE9erqQ6NHwDYTRNi/Xxw9oPqF0QNg2wki7N/rqtcOPP9rqv81 8PywEwQR5vGTjXkP4OXVowecF3aOIMI8zqv+1YDz/svqvQPOCztHEGE+T6meucbzPa16xhrPBztN EGFeP149fw3neV7TZVpgJoII87qqenj1pBUd/+qmV5T+8N65gJkIIszvC9VPVWdVH53xuB+u/kn1 +KYwAjMSRFidc6vTqie3v1egXl79t71jvXiGXcC1EERYrY9Xj6lOqZ5Ynf81/Lvvqf7d3r/72OqT s68DvuTg6AGwEH9V/ae928nVGdXp1UnVsXv/zKXVB5pC+IbqL9c/E5ZLEGH9Ltq7ARvEJVMASBAB oBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSA ShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAq QQSAShABoBJEAKgEEQAqQQSAShABoBJEAKgEEQAqQQSAShABoBJEAKjq4OgB/C03rk4YPQJYmxuP HsA1BHEeV8x0nJ/duwF8LT43esAucMl0HpeOHgAs2mWjB+wCQZzHJaMHAIt28egBu0AQ53HB6AHA or139IBdcMToATvi5tWHRo8AFuub8jNo3zxCnMeHq/NGjwAW6d2J4SwEcT6/O3oAsEjnjh6wK1wy nc/J1fuqA6OHAItxVXXb6sLRQ3aBR4jzuah66egRwKKcmxjOxiPEeZ1a/Vl1w9FDgJ13RfVteYXp bFzem9fHqiOru48eAuy8/5znD2flEeL8Dlavr75n9BBgZ72h+ofVlaOH7BJBXI2bVX/SdAkVYE7n VWc0XZFiRl5Usxofq763etvoIcBOeWd178RwJQRxdT5c3aP6tdFDgJ3wzOq789nJKyOIq3VZdU51 ZvXng7cA2+ld1T+qfqz6zOAtO81ziOtzoPrB6lFNr0L1Cl/gq7mq+qPqKdVL9v43KyaIY9y8um91 1+r21SnVTapjR44Chris+nTTG+zfVb2xenX1kZGjluj/A7eiP6AtHfmzAAAAAElFTkSuQmCC "
+ id="image2981-4"
+ x="125.46542"
+ y="11.578013" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="140.23157"
+ y="26.731647"
+ id="text2987-9"><tspan
+ sodipodi:role="line"
+ id="tspan2985-0"
+ x="140.23157"
+ y="26.731647"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono';stroke-width:0.264583">6</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:0.848828;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 104.64946,54.902986 119.22518,51.23513"
+ id="path2736-1"
+ sodipodi:nodetypes="cc" />
+ <g
+ id="g3137"
+ transform="translate(6.1449507,10.235717)"
+ style="stroke:#0000ff;stroke-opacity:1">
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 161.12836,39.73877 V 54.647494 L 146.163,54.488794 V 33.300302 h 8.7615 l 5.86826,6.195557 h -5.87342 v -6.047936"
+ id="path3085"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,37.39937 h 4.21162"
+ id="path3087" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,40.644703 h 4.21162"
+ id="path3087-7" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,43.555576 h 9.81264"
+ id="path3087-1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,46.646723 h 9.81264"
+ id="path3087-1-1"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 148.46975,50.449131 h 9.81264"
+ id="path3087-1-5"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)"
+ d="m 147.85661,51.721464 c -6.70172,-3.912196 -23.39473,-1.178632 -23.39473,-1.178632"
+ id="path3139" />
+ <g
+ id="g3602"
+ style="stroke:#0000ff;stroke-opacity:1">
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3465);stroke-miterlimit:4;stroke-dasharray:2.4, 0.80000000000000004;stroke-dashoffset:0"
+ d="m 99.774673,58.026576 c -5.092676,4.046769 -2.589217,10.390276 3.295517,11.307367"
+ id="path3437"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3455);stroke-miterlimit:4;stroke-dasharray:2.4, 0.80000000000000004;stroke-dashoffset:0"
+ d="M 98.854842,57.027565 C 87.49604,65.49508 80.412608,80.588074 82.926734,90.302514"
+ id="path3439"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#0000ff;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3445);stroke-miterlimit:4;stroke-dasharray:2.4, 0.80000000000000004;stroke-dashoffset:0"
+ d="M 98.611748,55.797585 C 83.469402,57.101491 46.01116,75.338227 43.693127,76.144807"
+ id="path3441"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <rect
+ style="fill:none;stroke:#000040;stroke-width:0.799999;stroke-dasharray:2.4, 0.799999;stroke-opacity:0.0124995"
+ id="rect894"
+ width="171.26611"
+ height="127.22335"
+ x="0.13010304"
+ y="0.24505216" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/deuxfleurs.svg b/doc/talks/2023-01-18-tocatta/assets/deuxfleurs.svg
new file mode 100644
index 00000000..c298c22b
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/deuxfleurs.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ viewBox="0 0 70.424515 70.300102"
+ version="1.1"
+ id="svg8"
+ sodipodi:docname="logo.svg"
+ inkscape:version="1.1 (c68e22c387, 2021-05-23)"
+ inkscape:export-filename="/home/quentin/Documents/dev/deuxfleurs/site/src/img/logo.png"
+ inkscape:export-xdpi="699.30194"
+ inkscape:export-ydpi="699.30194"
+ width="70.424515"
+ height="70.300102"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <defs
+ id="defs12" />
+ <sodipodi:namedview
+ id="namedview10"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ showgrid="false"
+ inkscape:zoom="12.125"
+ inkscape:cx="43.092783"
+ inkscape:cy="48.082474"
+ inkscape:window-width="3072"
+ inkscape:window-height="1659"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg8" />
+ <g
+ id="g79969"
+ transform="translate(-0.827,34.992103)">
+ <path
+ fill="#ffffff"
+ d="m 15.632,34.661 c -0.799,-0.597 -1.498,-1.484 -2.035,-2.592 l -0.228,-0.47 -0.46,0.249 c -0.975,0.528 -1.913,0.858 -2.744,0.969 L 9.963,29.061 6.327,30.029 C 6.17,29.175 6.202,28.142 6.423,27.007 L 6.526,26.482 5.994,26.416 C 4.752,26.262 3.688,25.891 2.89,25.336 L 4.411,22.419 1.423,20.896 C 1.742,19.952 2.371,19.014 3.257,18.161 L 3.634,17.798 3.255,17.438 C 2.452,16.674 1.847,15.884 1.485,15.127 L 4.995,13.774 2.95,10.615 C 3.69,10.213 4.643,9.929 5.739,9.783 L 6.258,9.715 6.167,9.201 C 5.952,7.99 5.995,6.863 6.291,5.913 l 3.308,0.523 0.524,-3.308 c 0.988,0.013 2.08,0.326 3.164,0.907 L 13.749,4.283 13.975,3.81 C 14.454,2.807 15.019,1.986 15.628,1.406 L 18,4.326 20.372,1.406 c 0.609,0.58 1.175,1.401 1.653,2.404 l 0.226,0.473 0.462,-0.247 C 23.798,3.455 24.891,3.142 25.877,3.13 L 26.4,6.438 29.71,5.913 c 0.296,0.951 0.34,2.078 0.124,3.288 l -0.092,0.515 0.518,0.069 c 1.095,0.145 2.048,0.43 2.788,0.832 l -2.046,3.156 3.511,1.355 c -0.361,0.757 -0.966,1.547 -1.77,2.311 l -0.379,0.36 0.377,0.363 c 0.888,0.854 1.516,1.793 1.835,2.736 l -2.984,1.52 1.521,2.984 c -0.812,0.574 -1.871,0.964 -3.094,1.134 l -0.518,0.072 0.096,0.514 c 0.201,1.089 0.226,2.083 0.073,2.909 l -3.634,-0.97 -0.204,3.757 c -0.83,-0.11 -1.768,-0.44 -2.742,-0.968 l -0.459,-0.249 -0.228,0.47 c -0.539,1.107 -1.237,1.994 -2.036,2.591 L 18,32.293 Z"
+ id="path2" />
+ <path
+ d="M 7.092,10.678 C 6.562,9.189 6.394,7.708 6.66,6.478 l 2.368,0.375 0.987,0.156 0.157,-0.988 0.375,-2.368 C 11.808,3.78 13.16,4.396 14.409,5.359 14.527,5.022 14.653,4.696 14.791,4.392 13.24,3.257 11.568,2.629 10.061,2.629 9.938,2.629 9.816,2.633 9.695,2.642 L 9.184,5.865 5.96,5.354 C 5.36,6.841 5.395,8.769 6.045,10.747 6.38,10.71 6.729,10.686 7.092,10.678 Z M 21.593,5.359 c 1.248,-0.962 2.6,-1.578 3.86,-1.705 l 0.376,2.368 0.156,0.988 0.987,-0.157 2.369,-0.376 c 0.266,1.23 0.098,2.71 -0.432,4.2 0.361,0.009 0.711,0.032 1.046,0.07 C 30.606,8.769 30.64,6.841 30.04,5.353 L 26.815,5.865 26.304,2.641 c -0.12,-0.008 -0.242,-0.012 -0.365,-0.012 -1.507,0 -3.179,0.628 -4.73,1.762 0.14,0.306 0.266,0.631 0.384,0.968 z M 7.368,27 h 0.035 c 0.067,0 0.157,-0.604 0.26,-0.947 -0.098,0.004 -0.197,0.046 -0.294,0.046 -1.496,0 -2.826,-0.303 -3.83,-0.89 L 4.628,23.081 5.082,22.194 4.191,21.742 2.055,20.654 C 2.563,19.503 3.57,18.404 4.873,17.511 4.586,17.292 4.312,17.07 4.063,16.842 2.376,18.059 1.217,19.597 0.828,21.152 l 2.908,1.483 -1.482,2.843 C 3.475,26.501 5.303,27 7.368,27 Z m 27.806,-5.846 c -0.39,-1.555 -1.548,-3.093 -3.234,-4.311 -0.25,0.228 -0.523,0.451 -0.81,0.669 1.304,0.893 2.31,1.992 2.817,3.145 l -2.136,1.088 -0.891,0.453 0.454,0.892 1.089,2.137 c -1.004,0.587 -2.332,0.904 -3.828,0.904 -0.099,0 -0.199,-0.01 -0.299,-0.013 0.103,0.344 0.192,0.683 0.26,1.011 l 0.039,0.002 c 2.066,0 3.892,-0.563 5.112,-1.587 l -1.482,-2.908 z m -12.653,9.182 c -0.447,1.517 -1.181,2.812 -2.119,3.651 L 18.707,32.293 18,31.586 l -0.707,0.707 -1.695,1.694 c -0.938,-0.839 -1.673,-2.136 -2.12,-3.652 -0.296,0.206 -0.593,0.397 -0.886,0.563 0.636,1.98 1.741,3.559 3.1,4.409 L 18,33 l 2.308,2.308 c 1.358,-0.851 2.464,-2.428 3.101,-4.408 -0.295,-0.168 -0.591,-0.359 -0.888,-0.564 z"
+ fill="#ea596e"
+ id="path4" />
+ <path
+ fill="#ea596e"
+ d="m 20.118,5.683 c 0.426,1.146 0.748,2.596 0.841,4.284 l 0.2,3.683 3.564,-0.946 c 1.32,-0.351 2.655,-0.536 3.86,-0.536 0.16,0 0.318,0.003 0.474,0.01 l -1.827,2.819 3.139,1.211 c -0.958,0.759 -2.237,1.514 -3.814,2.123 l -3.441,1.328 2.001,3.099 c 0.918,1.42 1.509,2.782 1.838,3.96 L 23.709,25.853 23.527,29.21 C 22.508,28.533 21.395,27.55 20.329,26.237 L 18,23.374 15.672,26.236 c -1.066,1.312 -2.179,2.295 -3.198,2.972 l -0.18,-3.354 -3.248,0.864 c 0.329,-1.178 0.921,-2.54 1.839,-3.961 L 12.889,19.658 9.447,18.33 C 7.87,17.721 6.591,16.967 5.633,16.208 L 8.768,15 6.941,12.177 c 0.155,-0.006 0.313,-0.01 0.473,-0.01 1.206,0 2.541,0.185 3.861,0.536 l 3.564,0.947 0.202,-3.683 c 0.092,-1.688 0.415,-3.138 0.84,-4.284 L 18,8.292 20.118,5.683 M 20.308,0.692 18,3.533 15.692,0.692 C 13.703,2.224 12.271,5.684 12.046,9.804 10.429,9.374 8.854,9.167 7.414,9.167 c -2.11,0 -3.929,0.445 -5.161,1.289 l 1.989,3.073 -3.415,1.316 c 0.842,2.366 3.69,4.797 7.54,6.283 -2.241,3.465 -3.116,7.106 -2.407,9.516 l 3.537,-0.941 0.196,3.654 c 2.512,-0.07 5.703,-2.027 8.307,-5.228 2.603,3.201 5.796,5.158 8.306,5.228 l 0.198,-3.655 3.535,0.943 c 0.71,-2.411 -0.165,-6.05 -2.404,-9.517 3.849,-1.485 6.696,-3.918 7.538,-6.283 l -3.415,-1.318 1.99,-3.07 c -1.233,-0.844 -3.053,-1.29 -5.164,-1.29 -1.438,0 -3.013,0.207 -4.63,0.636 C 23.729,5.684 22.297,2.224 20.308,0.692 Z"
+ id="path6" />
+ </g>
+ <g
+ id="g79964"
+ transform="translate(-1.043816,35.993714)">
+ <path
+ fill="#ffffff"
+ d="m 51.92633,-2.0247139 c -0.799,-0.597 -1.498,-1.484 -2.035,-2.592 l -0.228,-0.47 -0.46,0.249 c -0.975,0.528 -1.913,0.858 -2.744,0.969 l -0.202,-3.7560001 -3.636,0.968 c -0.157,-0.854 -0.125,-1.887 0.096,-3.022 l 0.103,-0.525 -0.532,-0.066 c -1.242,-0.154 -2.306,-0.525 -3.104,-1.08 l 1.521,-2.917 -2.988,-1.523 c 0.319,-0.944 0.948,-1.882 1.834,-2.735 l 0.377,-0.363 -0.379,-0.36 c -0.803,-0.764 -1.408,-1.554 -1.77,-2.311 l 3.51,-1.353 -2.045,-3.159 c 0.74,-0.402 1.693,-0.686 2.789,-0.832 l 0.519,-0.068 -0.091,-0.514 c -0.215,-1.211 -0.172,-2.338 0.124,-3.288 l 3.308,0.523 0.524,-3.308 c 0.988,0.013 2.08,0.326 3.164,0.907 l 0.462,0.248 0.226,-0.473 c 0.479,-1.003 1.044,-1.824 1.653,-2.404 l 2.372,2.92 2.372,-2.92 c 0.609,0.58 1.175,1.401 1.653,2.404 l 0.226,0.473 0.462,-0.247 c 1.085,-0.581 2.178,-0.894 3.164,-0.906 l 0.523,3.308 3.31,-0.525 c 0.296,0.951 0.34,2.078 0.124,3.288 l -0.092,0.515 0.518,0.069 c 1.095,0.145 2.048,0.43 2.788,0.832 l -2.046,3.156 3.511,1.355 c -0.361,0.757 -0.966,1.547 -1.77,2.311 l -0.379,0.36 0.377,0.363 c 0.888,0.854 1.516,1.793 1.835,2.736 l -2.984,1.52 1.521,2.984 c -0.812,0.574 -1.871,0.964 -3.094,1.134 l -0.518,0.072 0.096,0.514 c 0.201,1.089 0.226,2.083 0.073,2.909 l -3.634,-0.97 -0.204,3.7570001 c -0.83,-0.11 -1.768,-0.44 -2.742,-0.968 l -0.459,-0.249 -0.228,0.47 c -0.539,1.107 -1.237,1.994 -2.036,2.591 l -2.367,-2.369 z"
+ id="path2-9" />
+ <path
+ d="m 43.38633,-26.007714 c -0.53,-1.489 -0.698,-2.97 -0.432,-4.2 l 2.368,0.375 0.987,0.156 0.157,-0.988 0.375,-2.368 c 1.261,0.127 2.613,0.743 3.862,1.706 0.118,-0.337 0.244,-0.663 0.382,-0.967 -1.551,-1.135 -3.223,-1.763 -4.73,-1.763 -0.123,0 -0.245,0.004 -0.366,0.013 l -0.511,3.223 -3.224,-0.511 c -0.6,1.487 -0.565,3.415 0.085,5.393 0.335,-0.037 0.684,-0.061 1.047,-0.069 z m 14.501,-5.319 c 1.248,-0.962 2.6,-1.578 3.86,-1.705 l 0.376,2.368 0.156,0.988 0.987,-0.157 2.369,-0.376 c 0.266,1.23 0.098,2.71 -0.432,4.2 0.361,0.009 0.711,0.032 1.046,0.07 0.651,-1.978 0.685,-3.906 0.085,-5.394 l -3.225,0.512 -0.511,-3.224 c -0.12,-0.008 -0.242,-0.012 -0.365,-0.012 -1.507,0 -3.179,0.628 -4.73,1.762 0.14,0.306 0.266,0.631 0.384,0.968 z m -14.225,21.641 h 0.035 c 0.067,0 0.157,-0.604 0.26,-0.947 -0.098,0.004 -0.197,0.046 -0.294,0.046 -1.496,0 -2.826,-0.303 -3.83,-0.89 l 1.089,-2.128 0.454,-0.887 -0.891,-0.452 -2.136,-1.088 c 0.508,-1.151 1.515,-2.25 2.818,-3.143 -0.287,-0.219 -0.561,-0.441 -0.81,-0.669 -1.687,1.217 -2.846,2.755 -3.235,4.31 l 2.908,1.483 -1.482,2.843 c 1.221,1.023 3.049,1.522 5.114,1.522 z m 27.806,-5.846 c -0.39,-1.555 -1.548,-3.093 -3.234,-4.311 -0.25,0.228 -0.523,0.451 -0.81,0.669 1.304,0.893 2.31,1.992 2.817,3.145 l -2.136,1.088 -0.891,0.453 0.454,0.892 1.089,2.137 c -1.004,0.587 -2.332,0.904 -3.828,0.904 -0.099,0 -0.199,-0.01 -0.299,-0.013 0.103,0.344 0.192,0.683 0.26,1.011 l 0.039,0.002 c 2.066,0 3.892,-0.563 5.112,-1.587 l -1.482,-2.908 z m -12.653,9.182 c -0.447,1.5170001 -1.181,2.8120001 -2.119,3.6510001 l -1.695,-1.694 -0.707,-0.707 -0.707,0.707 -1.695,1.694 c -0.938,-0.839 -1.673,-2.136 -2.12,-3.6520001 -0.296,0.2060001 -0.593,0.3970001 -0.886,0.5630001 0.636,1.98 1.741,3.559 3.1,4.409 l 2.308,-2.307 2.308,2.308 c 1.358,-0.851 2.464,-2.428 3.101,-4.408 -0.295,-0.168 -0.591,-0.359 -0.888,-0.5640001 z"
+ fill="#ea596e"
+ id="path4-3" />
+ <path
+ fill="#ea596e"
+ d="m 56.41233,-31.002714 c 0.426,1.146 0.748,2.596 0.841,4.284 l 0.2,3.683 3.564,-0.946 c 1.32,-0.351 2.655,-0.536 3.86,-0.536 0.16,0 0.318,0.003 0.474,0.01 l -1.827,2.819 3.139,1.211 c -0.958,0.759 -2.237,1.514 -3.814,2.123 l -3.441,1.328 2.001,3.099 c 0.918,1.42 1.509,2.782 1.838,3.96 l -3.244,-0.865 -0.182,3.357 c -1.019,-0.677 -2.132,-1.66 -3.198,-2.973 l -2.329,-2.863 -2.328,2.862 c -1.066,1.312 -2.179,2.295 -3.198,2.972 l -0.18,-3.354 -3.248,0.864 c 0.329,-1.178 0.921,-2.54 1.839,-3.961 l 2.004,-3.099 -3.442,-1.328 c -1.577,-0.609 -2.856,-1.363 -3.814,-2.122 l 3.135,-1.208 -1.827,-2.823 c 0.155,-0.006 0.313,-0.01 0.473,-0.01 1.206,0 2.541,0.185 3.861,0.536 l 3.564,0.947 0.202,-3.683 c 0.092,-1.688 0.415,-3.138 0.84,-4.284 l 2.119,2.609 2.118,-2.609 m 0.19,-4.991 -2.308,2.841 -2.308,-2.841 c -1.989,1.532 -3.421,4.992 -3.646,9.112 -1.617,-0.43 -3.192,-0.637 -4.632,-0.637 -2.11,0 -3.929,0.445 -5.161,1.289 l 1.989,3.073 -3.415,1.316 c 0.842,2.366 3.69,4.797 7.54,6.283 -2.241,3.465 -3.116,7.106 -2.407,9.5160001 l 3.537,-0.9410001 0.196,3.6540001 c 2.512,-0.07 5.703,-2.027 8.307,-5.2280001 2.603,3.2010001 5.796,5.1580001 8.306,5.2280001 l 0.198,-3.6550001 3.535,0.9430001 c 0.71,-2.4110001 -0.165,-6.0500001 -2.404,-9.5170001 3.849,-1.485 6.696,-3.918 7.538,-6.283 l -3.415,-1.318 1.99,-3.07 c -1.233,-0.844 -3.053,-1.29 -5.164,-1.29 -1.438,0 -3.013,0.207 -4.63,0.636 -0.225,-4.119 -1.657,-7.579 -3.646,-9.111 z"
+ id="path6-6" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:42.6667px;line-height:1.25;font-family:sans-serif;fill:#ea596e;fill-opacity:1;stroke:none"
+ x="2.2188232"
+ y="31.430677"
+ id="text46212"><tspan
+ sodipodi:role="line"
+ id="tspan46210"
+ x="2.2188232"
+ y="31.430677"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.6667px;font-family:'TeX Gyre Termes';-inkscape-font-specification:'TeX Gyre Termes'">D</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:42.6667px;line-height:1.25;font-family:sans-serif;fill:#ea596e;fill-opacity:1;stroke:none"
+ x="41.347008"
+ y="67.114784"
+ id="text46212-1"><tspan
+ sodipodi:role="line"
+ id="tspan46210-5"
+ x="41.347008"
+ y="67.114784"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:42.6667px;font-family:'TeX Gyre Termes';-inkscape-font-specification:'TeX Gyre Termes'">F</tspan></text>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/endpoint-latency-dc.png b/doc/talks/2023-01-18-tocatta/assets/endpoint-latency-dc.png
new file mode 100644
index 00000000..7c7411cd
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/endpoint-latency-dc.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/garage.drawio.pdf b/doc/talks/2023-01-18-tocatta/assets/garage.drawio.pdf
new file mode 100644
index 00000000..a54a163c
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/garage.drawio.pdf
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/garage.drawio.png b/doc/talks/2023-01-18-tocatta/assets/garage.drawio.png
new file mode 100644
index 00000000..386dd862
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/garage.drawio.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/garage2.drawio.png b/doc/talks/2023-01-18-tocatta/assets/garage2.drawio.png
new file mode 100644
index 00000000..8562fbcf
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/garage2.drawio.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/garage2a.drawio.pdf b/doc/talks/2023-01-18-tocatta/assets/garage2a.drawio.pdf
new file mode 100644
index 00000000..422c9343
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/garage2a.drawio.pdf
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/garage2b.drawio.pdf b/doc/talks/2023-01-18-tocatta/assets/garage2b.drawio.pdf
new file mode 100644
index 00000000..05a9710e
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/garage2b.drawio.pdf
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/garage_tables.svg b/doc/talks/2023-01-18-tocatta/assets/garage_tables.svg
new file mode 100644
index 00000000..c7172713
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/garage_tables.svg
@@ -0,0 +1,537 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ width="850"
+ height="480"
+ viewBox="0 0 224.89584 127"
+ version="1.1"
+ id="svg8"
+ inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
+ sodipodi:docname="garage_tables.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="marker1262"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path1260" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow1Mend"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path965" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow1Lend"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path959" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="429.31483"
+ inkscape:cy="289.40871"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ inkscape:document-rotation="0"
+ showgrid="false"
+ units="px"
+ inkscape:window-width="1678"
+ inkscape:window-height="993"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:showpageshadow="2"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="39.570904"
+ y="38.452755"
+ id="text2025"><tspan
+ sodipodi:role="line"
+ id="tspan2023"
+ x="39.570904"
+ y="38.452755"
+ style="font-size:5.64444px;stroke-width:0.264583" /></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="101.95796"
+ y="92.835831"
+ id="text2139"><tspan
+ sodipodi:role="line"
+ id="tspan2137"
+ x="101.95796"
+ y="92.835831"
+ style="stroke-width:0.264583"> </tspan></text>
+ <g
+ id="g2316"
+ transform="translate(-11.455511,1.5722486)">
+ <g
+ id="g2277">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.8;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833"
+ width="47.419891"
+ height="95.353409"
+ x="18.534418"
+ y="24.42766" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-3"
+ width="47.419891"
+ height="86.973076"
+ x="18.534418"
+ y="32.807987" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="32.250839"
+ y="29.894743"
+ id="text852"><tspan
+ sodipodi:role="line"
+ id="tspan850"
+ x="32.250839"
+ y="29.894743"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Object</tspan></text>
+ </g>
+ <g
+ id="g2066"
+ transform="translate(-2.1807817,-3.0621439)">
+ <g
+ id="g1969"
+ transform="matrix(0.12763631,0,0,0.12763631,0.7215051,24.717273)"
+ style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-opacity:1">
+ <path
+ style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
+ d="m 203.71837,154.80038 c -1.11451,3.75057 -2.45288,5.84095 -5.11132,7.98327 -2.2735,1.83211 -4.66721,2.65982 -8.09339,2.79857 -2.59227,0.10498 -2.92868,0.0577 -5.02863,-0.70611 -3.99215,-1.45212 -7.1627,-4.65496 -8.48408,-8.57046 -1.28374,-3.80398 -0.61478,-8.68216 1.64793,-12.01698 0.87317,-1.28689 3.15089,-3.48326 4.18771,-4.03815 l 0.53332,-28.51234 5.78454,-5.09197 6.95158,6.16704 -3.21112,3.49026 3.17616,3.45499 -3.17616,3.40822 2.98973,3.28645 -3.24843,3.3829 4.49203,4.58395 0.0516,5.69106 c 1.06874,0.64848 3.81974,3.24046 4.69548,4.56257 0.452,0.68241 1.06834,2.0197 1.36962,2.97176 0.62932,1.98864 0.88051,5.785 0.47342,7.15497 z m -10.0406,2.32604 c -0.88184,-3.17515 -4.92402,-3.78864 -6.75297,-1.02492 -0.58328,0.8814 -0.6898,1.28852 -0.58362,2.23056 0.26492,2.35041 2.45434,3.95262 4.60856,3.37255 1.19644,-0.32217 2.39435,-1.44872 2.72875,-2.56621 0.30682,-1.02529 0.30686,-0.9045 -7.9e-4,-2.01198 z"
+ id="path1971"
+ sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="28.809687"
+ y="44.070885"
+ id="text852-9"><tspan
+ sodipodi:role="line"
+ id="tspan850-4"
+ x="28.809687"
+ y="44.070885"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">bucket </tspan></text>
+ </g>
+ <g
+ id="g2066-7"
+ transform="translate(-2.1807817,6.2627616)">
+ <g
+ id="g1969-8"
+ transform="matrix(0.12763631,0,0,0.12763631,0.7215051,24.717273)"
+ style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-opacity:1">
+ <path
+ style="fill:#4040ff;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-opacity:1"
+ d="m 203.71837,154.80038 c -1.11451,3.75057 -2.45288,5.84095 -5.11132,7.98327 -2.2735,1.83211 -4.66721,2.65982 -8.09339,2.79857 -2.59227,0.10498 -2.92868,0.0577 -5.02863,-0.70611 -3.99215,-1.45212 -7.1627,-4.65496 -8.48408,-8.57046 -1.28374,-3.80398 -0.61478,-8.68216 1.64793,-12.01698 0.87317,-1.28689 3.15089,-3.48326 4.18771,-4.03815 l 0.53332,-28.51234 5.78454,-5.09197 6.95158,6.16704 -3.21112,3.49026 3.17616,3.45499 -3.17616,3.40822 2.98973,3.28645 -3.24843,3.3829 4.49203,4.58395 0.0516,5.69106 c 1.06874,0.64848 3.81974,3.24046 4.69548,4.56257 0.452,0.68241 1.06834,2.0197 1.36962,2.97176 0.62932,1.98864 0.88051,5.785 0.47342,7.15497 z m -10.0406,2.32604 c -0.88184,-3.17515 -4.92402,-3.78864 -6.75297,-1.02492 -0.58328,0.8814 -0.6898,1.28852 -0.58362,2.23056 0.26492,2.35041 2.45434,3.95262 4.60856,3.37255 1.19644,-0.32217 2.39435,-1.44872 2.72875,-2.56621 0.30682,-1.02529 0.30686,-0.9045 -7.9e-4,-2.01198 z"
+ id="path1971-4"
+ sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="28.809687"
+ y="44.070885"
+ id="text852-9-5"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-0"
+ x="28.809687"
+ y="44.070885"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">file path </tspan></text>
+ <path
+ style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0337704;stroke-opacity:1"
+ d="m 174.20027,104.45585 c -0.14225,0.47871 -0.31308,0.74552 -0.65239,1.01896 -0.29018,0.23384 -0.5957,0.33949 -1.03301,0.3572 -0.33087,0.0134 -0.37381,0.007 -0.64184,-0.0901 -0.50954,-0.18534 -0.91422,-0.59414 -1.08287,-1.0939 -0.16385,-0.48552 -0.0785,-1.10816 0.21033,-1.5338 0.11145,-0.16426 0.40217,-0.44459 0.53451,-0.51542 l 0.0681,-3.639207 0.73832,-0.64992 0.88727,0.787138 -0.40986,0.445484 0.4054,0.440982 -0.4054,0.435013 0.3816,0.41947 -0.41461,0.43178 0.57334,0.58508 0.007,0.72639 c 0.13641,0.0828 0.48753,0.4136 0.59931,0.58235 0.0577,0.0871 0.13636,0.25778 0.17481,0.3793 0.0803,0.25382 0.11239,0.73838 0.0604,0.91323 z m -1.28154,0.29689 c -0.11256,-0.40526 -0.62849,-0.48357 -0.86193,-0.13082 -0.0745,0.1125 -0.088,0.16447 -0.0745,0.2847 0.0338,0.3 0.31326,0.5045 0.58822,0.43046 0.15271,-0.0411 0.30561,-0.1849 0.34829,-0.32754 0.0392,-0.13086 0.0392,-0.11544 -1e-4,-0.2568 z"
+ id="path1971-3"
+ sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="177.8474"
+ y="104.05132"
+ id="text852-9-6"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-7"
+ x="177.8474"
+ y="104.05132"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">= partition key </tspan></text>
+ <path
+ style="fill:#4040ff;fill-opacity:1;stroke:none;stroke-width:0.0337704;stroke-opacity:1"
+ d="m 174.20027,113.78076 c -0.14225,0.47871 -0.31308,0.74552 -0.65239,1.01895 -0.29018,0.23385 -0.5957,0.33949 -1.03301,0.3572 -0.33087,0.0134 -0.37381,0.007 -0.64184,-0.0901 -0.50954,-0.18534 -0.91422,-0.59414 -1.08287,-1.0939 -0.16385,-0.48553 -0.0785,-1.10816 0.21033,-1.53381 0.11145,-0.16425 0.40217,-0.44459 0.53451,-0.51541 l 0.0681,-3.63921 0.73832,-0.64992 0.88727,0.78714 -0.40986,0.44548 0.4054,0.44098 -0.4054,0.43502 0.3816,0.41947 -0.41461,0.43178 0.57334,0.58508 0.007,0.72638 c 0.13641,0.0828 0.48753,0.4136 0.59931,0.58235 0.0577,0.0871 0.13636,0.25779 0.17481,0.37931 0.0803,0.25382 0.11239,0.73837 0.0604,0.91323 z m -1.28154,0.29689 c -0.11256,-0.40527 -0.62849,-0.48357 -0.86193,-0.13082 -0.0745,0.1125 -0.088,0.16446 -0.0745,0.2847 0.0338,0.3 0.31326,0.5045 0.58822,0.43046 0.15271,-0.0411 0.30561,-0.18491 0.34829,-0.32754 0.0392,-0.13087 0.0392,-0.11545 -1e-4,-0.2568 z"
+ id="path1971-4-5"
+ sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="177.8474"
+ y="113.37622"
+ id="text852-9-5-3"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-0-5"
+ x="177.8474"
+ y="113.37622"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">= sort key </tspan></text>
+ </g>
+ <g
+ id="g2161"
+ transform="translate(-62.264403,-59.333115)">
+ <g
+ id="g2271"
+ transform="translate(0,67.042823)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-6"
+ width="39.008453"
+ height="16.775949"
+ x="84.896881"
+ y="90.266838" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-3-1"
+ width="39.008453"
+ height="8.673645"
+ x="84.896881"
+ y="98.369141" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="89.826942"
+ y="96.212921"
+ id="text852-0"><tspan
+ sodipodi:role="line"
+ id="tspan850-6"
+ x="89.826942"
+ y="96.212921"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Version 1</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="89.826942"
+ y="104.71013"
+ id="text852-0-3"><tspan
+ sodipodi:role="line"
+ id="tspan850-6-2"
+ x="89.826942"
+ y="104.71013"
+ style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#4d4d4d;stroke-width:0.264583">deleted</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g2263"
+ transform="translate(0,-22.791204)">
+ <g
+ id="g2161-1"
+ transform="translate(-62.264403,-10.910843)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-6-5"
+ width="39.008453"
+ height="36.749603"
+ x="84.896881"
+ y="90.266838" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-3-1-5"
+ width="39.008453"
+ height="28.647301"
+ x="84.896881"
+ y="98.369141" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="89.826942"
+ y="96.212921"
+ id="text852-0-4"><tspan
+ sodipodi:role="line"
+ id="tspan850-6-7"
+ x="89.826942"
+ y="96.212921"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Version 2</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="89.826942"
+ y="104.71013"
+ id="text852-0-3-6"><tspan
+ sodipodi:role="line"
+ id="tspan850-6-2-5"
+ x="89.826942"
+ y="104.71013"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#000000;stroke-width:0.264583">id</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="27.56254"
+ y="100.34132"
+ id="text852-0-3-6-6"><tspan
+ sodipodi:role="line"
+ id="tspan850-6-2-5-9"
+ x="27.56254"
+ y="100.34132"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#000000;stroke-width:0.264583">size</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="27.56254"
+ y="106.90263"
+ id="text852-0-3-6-6-3"><tspan
+ sodipodi:role="line"
+ id="tspan850-6-2-5-9-7"
+ x="27.56254"
+ y="106.90263"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#000000;stroke-width:0.264583">MIME type</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="27.56254"
+ y="111.92816"
+ id="text852-0-3-6-6-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan850-6-2-5-9-7-5"
+ x="27.56254"
+ y="111.92816"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';fill:#000000;stroke-width:0.264583">...</tspan></text>
+ </g>
+ </g>
+ <g
+ id="g898"
+ transform="translate(-6.2484318,29.95006)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-7"
+ width="47.419891"
+ height="44.007515"
+ x="95.443573"
+ y="24.42766" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-3-4"
+ width="47.419891"
+ height="35.627186"
+ x="95.443573"
+ y="32.807987" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="107.46638"
+ y="29.894743"
+ id="text852-4"><tspan
+ sodipodi:role="line"
+ id="tspan850-3"
+ x="107.46638"
+ y="29.894743"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Version</tspan></text>
+ <path
+ style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0337704;stroke-opacity:1"
+ d="m 102.90563,41.413279 c -0.14226,0.478709 -0.31308,0.745518 -0.65239,1.018956 -0.29019,0.233843 -0.59571,0.339489 -1.03301,0.357199 -0.33087,0.0134 -0.37381,0.0074 -0.64184,-0.09013 -0.50954,-0.185343 -0.914221,-0.594142 -1.082877,-1.093901 -0.163852,-0.485526 -0.07847,-1.108159 0.210335,-1.533803 0.111448,-0.164254 0.402172,-0.444591 0.534502,-0.515415 l 0.0681,-3.63921 0.73832,-0.64992 0.88727,0.787138 -0.40985,0.445484 0.40539,0.440982 -0.40539,0.435013 0.3816,0.41947 -0.41462,0.431781 0.57335,0.585078 0.007,0.726386 c 0.13641,0.08277 0.48753,0.413601 0.59931,0.58235 0.0577,0.0871 0.13636,0.257787 0.17481,0.379304 0.0803,0.253823 0.11239,0.738377 0.0604,0.913234 z m -1.28155,0.296888 c -0.11255,-0.405265 -0.62848,-0.483569 -0.86192,-0.130817 -0.0744,0.112498 -0.088,0.164461 -0.0745,0.2847 0.0338,0.299998 0.31326,0.504498 0.58822,0.43046 0.15271,-0.04112 0.3056,-0.184909 0.34828,-0.327542 0.0392,-0.130864 0.0392,-0.115447 -1e-4,-0.256801 z"
+ id="path1971-0"
+ sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="104.99195"
+ y="41.008743"
+ id="text852-9-7"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-8"
+ x="104.99195"
+ y="41.008743"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">id </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="104.99195"
+ y="49.168018"
+ id="text852-9-7-6"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-8-8"
+ x="104.99195"
+ y="49.168018"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">h(block 1)</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="104.99195"
+ y="56.583336"
+ id="text852-9-7-6-8"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-8-8-4"
+ x="104.99195"
+ y="56.583336"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">h(block 2)</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="104.99195"
+ y="64.265732"
+ id="text852-9-7-6-3"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-8-8-1"
+ x="104.99195"
+ y="64.265732"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">...</tspan></text>
+ </g>
+ <g
+ id="g898-3"
+ transform="translate(75.777779,38.888663)">
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-7-6"
+ width="47.419891"
+ height="29.989157"
+ x="95.443573"
+ y="24.42766" />
+ <rect
+ style="fill:none;stroke:#000000;stroke-width:0.799999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect833-3-4-7"
+ width="47.419891"
+ height="21.608831"
+ x="95.443573"
+ y="32.807987" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="102.11134"
+ y="29.894743"
+ id="text852-4-5"><tspan
+ sodipodi:role="line"
+ id="tspan850-3-3"
+ x="102.11134"
+ y="29.894743"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Data block</tspan></text>
+ <path
+ style="fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.0337704;stroke-opacity:1"
+ d="m 102.90563,41.413279 c -0.14226,0.478709 -0.31308,0.745518 -0.65239,1.018956 -0.29019,0.233843 -0.59571,0.339489 -1.03301,0.357199 -0.33087,0.0134 -0.37381,0.0074 -0.64184,-0.09013 -0.50954,-0.185343 -0.914221,-0.594142 -1.082877,-1.093901 -0.163852,-0.485526 -0.07847,-1.108159 0.210335,-1.533803 0.111448,-0.164254 0.402172,-0.444591 0.534502,-0.515415 l 0.0681,-3.63921 0.73832,-0.64992 0.88727,0.787138 -0.40985,0.445484 0.40539,0.440982 -0.40539,0.435013 0.3816,0.41947 -0.41462,0.431781 0.57335,0.585078 0.007,0.726386 c 0.13641,0.08277 0.48753,0.413601 0.59931,0.58235 0.0577,0.0871 0.13636,0.257787 0.17481,0.379304 0.0803,0.253823 0.11239,0.738377 0.0604,0.913234 z m -1.28155,0.296888 c -0.11255,-0.405265 -0.62848,-0.483569 -0.86192,-0.130817 -0.0744,0.112498 -0.088,0.164461 -0.0745,0.2847 0.0338,0.299998 0.31326,0.504498 0.58822,0.43046 0.15271,-0.04112 0.3056,-0.184909 0.34828,-0.327542 0.0392,-0.130864 0.0392,-0.115447 -1e-4,-0.256801 z"
+ id="path1971-0-5"
+ sodipodi:nodetypes="ssscsscccccccccccssscsssscc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="104.99195"
+ y="41.008743"
+ id="text852-9-7-62"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-8-9"
+ x="104.99195"
+ y="41.008743"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">hash </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="104.99195"
+ y="49.168018"
+ id="text852-9-7-6-1"><tspan
+ sodipodi:role="line"
+ id="tspan850-4-8-8-2"
+ x="104.99195"
+ y="49.168018"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">data</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+ d="M 42.105292,69.455903 89.563703,69.317144"
+ id="path954"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker1262)"
+ d="m 134.32612,77.363197 38.12618,0.260865"
+ id="path1258"
+ sodipodi:nodetypes="cc" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="8.6727352"
+ y="16.687063"
+ id="text852-3"><tspan
+ sodipodi:role="line"
+ id="tspan850-67"
+ x="8.6727352"
+ y="16.687063"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Objects table </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="89.190445"
+ y="16.687063"
+ id="text852-3-5"><tspan
+ sodipodi:role="line"
+ id="tspan850-67-3"
+ x="89.190445"
+ y="16.687063"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Versions table </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
+ x="174.55702"
+ y="16.687063"
+ id="text852-3-56"><tspan
+ sodipodi:role="line"
+ id="tspan850-67-2"
+ x="174.55702"
+ y="16.687063"
+ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:'Liberation Mono';-inkscape-font-specification:'Liberation Mono Bold';stroke-width:0.264583">Blocks table</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/inframap.jpg b/doc/talks/2023-01-18-tocatta/assets/inframap.jpg
new file mode 100644
index 00000000..19905a99
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/inframap.jpg
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice1.svg b/doc/talks/2023-01-18-tocatta/assets/lattice1.svg
new file mode 100644
index 00000000..8bfa5aa7
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/lattice1.svg
@@ -0,0 +1,433 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="400"
+ viewBox="0 0 264.58333 105.83333"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="lattice1.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="445.81962"
+ inkscape:cy="222.66987"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1;stop-color:#000000"
+ id="rect288"
+ width="209.84705"
+ height="104.42732"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice2.svg b/doc/talks/2023-01-18-tocatta/assets/lattice2.svg
new file mode 100644
index 00000000..adcd92cb
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/lattice2.svg
@@ -0,0 +1,514 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="400"
+ viewBox="0 0 264.58333 105.83333"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="lattice2.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="384.39345"
+ inkscape:cy="227.46879"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1;stop-color:#000000"
+ id="rect288"
+ width="209.84705"
+ height="104.42732"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="139.48744"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="131.61919"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice3.svg b/doc/talks/2023-01-18-tocatta/assets/lattice3.svg
new file mode 100644
index 00000000..640dc468
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/lattice3.svg
@@ -0,0 +1,515 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="400"
+ viewBox="0 0 264.58333 105.83333"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="lattice3.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.4734708"
+ inkscape:cx="324.06479"
+ inkscape:cy="168.98876"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1;stop-color:#000000"
+ id="rect288"
+ width="209.84705"
+ height="104.42732"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="139.48744"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="119.58919"
+ cy="67.645035"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice4.svg b/doc/talks/2023-01-18-tocatta/assets/lattice4.svg
new file mode 100644
index 00000000..b2a99e28
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/lattice4.svg
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="400"
+ viewBox="0 0 264.58333 105.83333"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="lattice4.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="0.73673541"
+ inkscape:cx="287.07728"
+ inkscape:cy="294.54265"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1;stop-color:#000000"
+ id="rect288"
+ width="209.84705"
+ height="104.42732"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="126.08154"
+ cy="67.968384"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="119.58919"
+ cy="67.645035"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549"
+ id="text4280"><tspan
+ sodipodi:role="line"
+ id="tspan4278"
+ style="fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549">return OK</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice5.svg b/doc/talks/2023-01-18-tocatta/assets/lattice5.svg
new file mode 100644
index 00000000..bc6b7195
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/lattice5.svg
@@ -0,0 +1,536 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="400"
+ viewBox="0 0 264.58333 105.83333"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="lattice5.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="276.89766"
+ inkscape:cy="254.34273"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1;stop-color:#000000"
+ id="rect288"
+ width="209.84705"
+ height="104.42732"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="126.08154"
+ cy="67.968384"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="119.58919"
+ cy="67.645035"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.261436"
+ id="text3707-1"><tspan
+ sodipodi:role="line"
+ id="tspan3705-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.261436">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549"
+ id="text4280"><tspan
+ sodipodi:role="line"
+ id="tspan4278"
+ style="fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549">return OK</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice6.svg b/doc/talks/2023-01-18-tocatta/assets/lattice6.svg
new file mode 100644
index 00000000..176b1715
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/lattice6.svg
@@ -0,0 +1,553 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="400"
+ viewBox="0 0 264.58333 105.83333"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="lattice6.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="277.85744"
+ inkscape:cy="254.34273"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1;stop-color:#000000"
+ id="rect288"
+ width="209.84705"
+ height="104.42732"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="126.08154"
+ cy="67.968384"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="119.58919"
+ cy="67.645035"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.261436"
+ id="text3707-1"><tspan
+ sodipodi:role="line"
+ id="tspan3705-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.261436">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-4"
+ cx="18.004833"
+ cy="70.942116"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="73.643356"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-65"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="73.643356">$\to \{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549"
+ id="text4280"><tspan
+ sodipodi:role="line"
+ id="tspan4278"
+ style="fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549">return OK</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice7.svg b/doc/talks/2023-01-18-tocatta/assets/lattice7.svg
new file mode 100644
index 00000000..7ce8bda8
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/lattice7.svg
@@ -0,0 +1,581 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="400"
+ viewBox="0 0 264.58333 105.83333"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="lattice7.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="276.89766"
+ inkscape:cy="254.34273"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1;stop-color:#000000"
+ id="rect288"
+ width="209.84705"
+ height="104.42732"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="126.08154"
+ cy="67.968384"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="119.58919"
+ cy="67.645035"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.261436"
+ id="text3707-1"><tspan
+ sodipodi:role="line"
+ id="tspan3705-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.261436">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-4"
+ cx="18.004833"
+ cy="70.942116"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="73.643356"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-65"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="73.643356">$\to \{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549"
+ id="text4280"><tspan
+ sodipodi:role="line"
+ id="tspan4278"
+ style="fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549">return OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="92.005798"
+ id="text4280-3"><tspan
+ sodipodi:role="line"
+ id="tspan4278-7"
+ style="fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="92.005798">return $\{\}\sqcup\{a\}=\{a\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-5"
+ cx="18.004833"
+ cy="81.007744"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="83.577797"
+ id="text3750-0-6"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-9"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="83.577797">$\to \{a\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/lattice8.svg b/doc/talks/2023-01-18-tocatta/assets/lattice8.svg
new file mode 100644
index 00000000..c94a69b2
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/lattice8.svg
@@ -0,0 +1,581 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="400"
+ viewBox="0 0 264.58333 105.83333"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="lattice8.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.4734708"
+ inkscape:cx="399.39712"
+ inkscape:cy="248.39311"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1;stop-color:#000000"
+ id="rect288"
+ width="209.84705"
+ height="104.42732"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="stroke-width:0.264583;fill:#000000"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="stroke-width:0.264583;fill:#000000"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="stroke-width:0.264583;fill:#000000"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="stroke-width:0.264583;fill:#000000"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="132.33408"
+ cy="68.007973"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="126.08154"
+ cy="67.968384"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="119.58919"
+ cy="67.645035"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="stroke-width:0.264583;fill:#000000"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.261436"
+ id="text3707-1"><tspan
+ sodipodi:role="line"
+ id="tspan3705-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.261436">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-4"
+ cx="18.004833"
+ cy="70.942116"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="73.643356"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-65"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="73.643356">$\to \{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549"
+ id="text4280"><tspan
+ sodipodi:role="line"
+ id="tspan4278"
+ style="fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="52.022549">return OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="92.005798"
+ id="text4280-3"><tspan
+ sodipodi:role="line"
+ id="tspan4278-7"
+ style="fill:#000000;stroke-width:0.264583"
+ x="14.395845"
+ y="92.005798">return $\{\}\sqcup\{a\}=\{a\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-5"
+ cx="18.004833"
+ cy="81.007744"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="83.577797"
+ id="text3750-0-6"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-9"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="83.577797">$\to \{a\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_1.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_1.svg
new file mode 100644
index 00000000..92232a1b
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_1.svg
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_1.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="469.81422"
+ inkscape:cy="257.22209"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="141.05479"
+ cy="95.316383"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="134.56244"
+ cy="94.993034"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_10.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_10.svg
new file mode 100644
index 00000000..34c24e0d
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_10.svg
@@ -0,0 +1,715 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_10.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="664.65036"
+ inkscape:cy="366.63745"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="176.97627"
+ cy="68.155472"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403"
+ id="text3707-5-3"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\sqsupseteq \{b\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0"
+ cx="67.201363"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125"
+ id="text3750-9"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125">$\to \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="text4280-6"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="tspan2630">return $\{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-7"
+ cx="67.201363"
+ cy="133.94179"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073"
+ id="text3750-3-6"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-0"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073">$\to \{\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0-6"
+ cx="174.36296"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="127.6125"
+ id="text3750-9-1"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3-8"
+ style="fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="127.6125">$\to \{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="162.7999"
+ y="118.94403"
+ id="text3707-5-3-7"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="162.7999"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
+ x="134.97845"
+ y="132.58472"
+ id="text3899"><tspan
+ sodipodi:role="line"
+ id="tspan3897"
+ style="stroke-width:0.264583"
+ x="134.97845"
+ y="132.58472">;</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="169.92604"
+ y="146.3129"
+ id="text4280-6-7"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="169.92604"
+ y="146.3129"
+ id="tspan2630-9">return $\{b\}$</tspan></text>
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-7-2"
+ cx="174.36296"
+ cy="133.94179"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="136.59073"
+ id="text3750-3-6-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-0-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="136.59073">$\to \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:end;text-anchor:end;fill:#ff0000;stroke-width:0.264583"
+ x="259.75"
+ y="135.53111"
+ id="text9043"><tspan
+ sodipodi:role="line"
+ id="tspan9041"
+ style="fill:#ff0000;stroke-width:0.264583"
+ x="259.75"
+ y="135.53111">${\Large\textbf{??!}}$~~~~~</tspan><tspan
+ sodipodi:role="line"
+ style="fill:#ff0000;stroke-width:0.264583"
+ x="259.75"
+ y="146.11446"
+ id="tspan9372">$\{a\} \not\sqsubseteq \{b\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_2.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_2.svg
new file mode 100644
index 00000000..c07cba2b
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_2.svg
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_2.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.4734708"
+ inkscape:cx="586.70996"
+ inkscape:cy="321.01077"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="141.05479"
+ cy="95.316383"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_3.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_3.svg
new file mode 100644
index 00000000..198d1f5d
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_3.svg
@@ -0,0 +1,576 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_3.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="2.0838024"
+ inkscape:cx="465.25525"
+ inkscape:cy="269.21938"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="176.97627"
+ cy="68.155472"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\sqsupseteq \{b\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_4.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_4.svg
new file mode 100644
index 00000000..c5f6148d
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_4.svg
@@ -0,0 +1,587 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_4.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="505.32622"
+ inkscape:cy="316.72869"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="176.97627"
+ cy="68.155472"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403"
+ id="text3707-5-3"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\sqsupseteq \{b\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_5.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_5.svg
new file mode 100644
index 00000000..c2b668be
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_5.svg
@@ -0,0 +1,604 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_5.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.4734708"
+ inkscape:cx="408.21983"
+ inkscape:cy="319.65343"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="176.97627"
+ cy="68.155472"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403"
+ id="text3707-5-3"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\sqsupseteq \{b\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0"
+ cx="67.201363"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125"
+ id="text3750-9"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125">$\to \{a\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_6.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_6.svg
new file mode 100644
index 00000000..980823fc
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_6.svg
@@ -0,0 +1,632 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_6.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.4734708"
+ inkscape:cx="408.21983"
+ inkscape:cy="319.65343"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="176.97627"
+ cy="68.155472"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403"
+ id="text3707-5-3"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\sqsupseteq \{b\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0"
+ cx="67.201363"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125"
+ id="text3750-9"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125">$\to \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="text4280-6"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="tspan2630">return $\{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-7"
+ cx="67.201363"
+ cy="133.94179"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073"
+ id="text3750-3-6"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-0"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073">$\to \{\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_7.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_7.svg
new file mode 100644
index 00000000..154c0b7d
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_7.svg
@@ -0,0 +1,654 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_7.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.4734708"
+ inkscape:cx="553.45515"
+ inkscape:cy="346.80022"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="176.97627"
+ cy="68.155472"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403"
+ id="text3707-5-3"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\sqsupseteq \{b\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0"
+ cx="67.201363"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125"
+ id="text3750-9"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125">$\to \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="text4280-6"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="tspan2630">return $\{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-7"
+ cx="67.201363"
+ cy="133.94179"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073"
+ id="text3750-3-6"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-0"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073">$\to \{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="162.7999"
+ y="118.94403"
+ id="text3707-5-3-7"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="162.7999"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
+ x="134.97845"
+ y="132.58472"
+ id="text3899"><tspan
+ sodipodi:role="line"
+ id="tspan3897"
+ style="stroke-width:0.264583"
+ x="134.97845"
+ y="132.58472">;</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_8.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_8.svg
new file mode 100644
index 00000000..21766415
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_8.svg
@@ -0,0 +1,671 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_8.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.4734708"
+ inkscape:cx="448.94001"
+ inkscape:cy="322.36811"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="176.97627"
+ cy="68.155472"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403"
+ id="text3707-5-3"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\sqsupseteq \{b\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0"
+ cx="67.201363"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125"
+ id="text3750-9"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125">$\to \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="text4280-6"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="tspan2630">return $\{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-7"
+ cx="67.201363"
+ cy="133.94179"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073"
+ id="text3750-3-6"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-0"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073">$\to \{\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0-6"
+ cx="174.36296"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="127.6125"
+ id="text3750-9-1"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3-8"
+ style="fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="127.6125">$\to \{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="162.7999"
+ y="118.94403"
+ id="text3707-5-3-7"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="162.7999"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
+ x="134.97845"
+ y="132.58472"
+ id="text3899"><tspan
+ sodipodi:role="line"
+ id="tspan3897"
+ style="stroke-width:0.264583"
+ x="134.97845"
+ y="132.58472">;</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/latticeB_9.svg b/doc/talks/2023-01-18-tocatta/assets/latticeB_9.svg
new file mode 100644
index 00000000..b60f8afe
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/latticeB_9.svg
@@ -0,0 +1,699 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1000"
+ height="600"
+ viewBox="0 0 264.58333 158.75"
+ version="1.1"
+ id="svg5"
+ inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
+ sodipodi:docname="latticeB_9.svg"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:showpageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1"
+ inkscape:document-units="mm"
+ showgrid="false"
+ inkscape:zoom="1.0419012"
+ inkscape:cx="664.65036"
+ inkscape:cy="366.63745"
+ inkscape:window-width="1920"
+ inkscape:window-height="999"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible"
+ id="Arrow2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-2"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-8" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-75-7-1"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-9-3-2" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-93-1-4"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-6-8-7" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow2-9-7-2-8"
+ refX="0"
+ refY="0"
+ orient="auto-start-reverse"
+ inkscape:stockid="Arrow2"
+ markerWidth="7.6999998"
+ markerHeight="5.5999999"
+ viewBox="0 0 7.7 5.6"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ preserveAspectRatio="xMidYMid">
+ <path
+ transform="scale(0.7)"
+ d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+ id="arrow2L-1-0-6-4" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true">
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:0.999998;stop-color:#000000"
+ id="rect288"
+ width="262.58151"
+ height="156.82782"
+ x="0.77790999"
+ y="0.93738818" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442"
+ id="text951"><tspan
+ sodipodi:role="line"
+ id="tspan949"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="99.307442">$\{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893"
+ id="text1005"><tspan
+ sodipodi:role="line"
+ id="tspan1003"
+ style="fill:#000000;stroke-width:0.264583"
+ x="164.56372"
+ y="13.151893">$\{a,b,c\}$</tspan></text>
+ <g
+ id="g1175"
+ transform="translate(51.996784,3.5774043)">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698"
+ id="text1009"><tspan
+ sodipodi:role="line"
+ id="tspan1007"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="67.008698">$\{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166"
+ id="text1009-3"><tspan
+ sodipodi:role="line"
+ id="tspan1007-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="67.017166">$\{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698"
+ id="text1009-7"><tspan
+ sodipodi:role="line"
+ id="tspan1007-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="67.008698">$\{c\}$</tspan></text>
+ </g>
+ <g
+ id="g1183"
+ transform="translate(51.996784,1.0317046)"
+ style="fill:#000000">
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526"
+ id="text1117"><tspan
+ sodipodi:role="line"
+ id="tspan1115"
+ style="fill:#000000;stroke-width:0.264583"
+ x="112.90984"
+ y="40.841526">$\{a,c\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526"
+ id="text1117-3"><tspan
+ sodipodi:role="line"
+ id="tspan1115-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="49.27084"
+ y="40.841526">$\{a,b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526"
+ id="text1117-6"><tspan
+ sodipodi:role="line"
+ id="tspan1115-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="176.20593"
+ y="40.841526">$\{b,c\}$</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2)"
+ d="M 153.33622,90.367682 118.34198,73.428915"
+ id="path1300" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9)"
+ d="M 177.46016,90.367682 212.4544,73.428915"
+ id="path1300-2" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93)"
+ d="M 153.33622,61.655656 118.34198,44.716889"
+ id="path1300-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7)"
+ d="M 177.46016,61.655656 212.4544,44.716889"
+ id="path1300-2-6" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1)"
+ d="M 118.34198,61.655656 153.33622,44.716889"
+ id="path1300-0-7" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2)"
+ d="M 212.4544,61.655656 177.46016,44.716889"
+ id="path1300-2-6-9" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-93-1-4)"
+ d="M 118.34198,34.227412 153.33622,17.288645"
+ id="path1300-0-7-5" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-7-2-8)"
+ d="M 212.4544,34.227412 177.46016,17.288645"
+ id="path1300-2-6-9-0" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75)"
+ d="m 228.52843,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-2)"
+ d="m 101.90418,61.091809 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-9"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7)"
+ d="m 165.29305,89.571762 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2-9-75-7-1)"
+ d="m 165.29305,32.445235 0.33313,-12.554874 m -0.33313,12.554874 0.33313,-12.554874"
+ id="path1300-2-2-6-9"
+ sodipodi:nodetypes="cc" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663"
+ cx="147.35568"
+ cy="95.24971"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3"
+ cx="176.97627"
+ cy="68.155472"
+ r="2.7302806" />
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1"
+ cx="18.004833"
+ cy="39.402473"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0"
+ cx="18.004833"
+ cy="30.371933"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6"
+ cx="18.004833"
+ cy="21.341394"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217"
+ id="text3707"><tspan
+ sodipodi:role="line"
+ id="tspan3705"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="13.702217">$write(\{a\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637"
+ id="text3750"><tspan
+ sodipodi:role="line"
+ id="tspan3748"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="24.042637">$\sqsupseteq \{a\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087"
+ id="text3750-3"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="33.02087">$\not\sqsupseteq \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523"
+ id="text3750-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="41.972523">$\not\sqsupseteq \{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-1-4"
+ cx="18.004833"
+ cy="90.979645"
+ r="2.7302806" />
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-5"
+ cx="18.004833"
+ cy="81.949104"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-2"
+ cx="18.004833"
+ cy="72.918564"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381"
+ id="text3707-5"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4"
+ style="fill:#000000;stroke-width:0.264583"
+ x="6.9525447"
+ y="65.279381">$write(\{b\})$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403"
+ id="text3707-5-3"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6"
+ style="fill:#000000;stroke-width:0.264583"
+ x="59.340172"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804"
+ id="text3750-7"><tspan
+ sodipodi:role="line"
+ id="tspan3748-4"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="75.619804">$\not\sqsupseteq \{b\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038"
+ id="text3750-3-4"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="23.457415"
+ y="84.598038">$\sqsupseteq \{b\} \to$ OK</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969"
+ id="text3750-0-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-6-7"
+ style="fill:#999999;stroke-width:0.264583"
+ x="23.457415"
+ y="93.54969">$\not\sqsupseteq \{b\}$</tspan></text>
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6"
+ cx="118.63729"
+ cy="67.630196"
+ r="2.7302806" />
+ <circle
+ style="fill:#800080;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0"
+ cx="67.201363"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125"
+ id="text3750-9"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="127.6125">$\to \{a\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="text4280-6"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="62.764446"
+ y="146.3129"
+ id="tspan2630">return $\{a\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-7"
+ cx="67.201363"
+ cy="133.94179"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073"
+ id="text3750-3-6"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-0"
+ style="fill:#000000;stroke-width:0.264583"
+ x="72.653946"
+ y="136.59073">$\to \{\}$</tspan></text>
+ <circle
+ style="fill:#ff0000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-6-6-0-6"
+ cx="174.36296"
+ cy="124.91125"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="127.6125"
+ id="text3750-9-1"><tspan
+ sodipodi:role="line"
+ id="tspan3748-3-8"
+ style="fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="127.6125">$\to \{\}$</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="162.7999"
+ y="118.94403"
+ id="text3707-5-3-7"><tspan
+ sodipodi:role="line"
+ id="tspan3705-4-6-5"
+ style="fill:#000000;stroke-width:0.264583"
+ x="162.7999"
+ y="118.94403">$read()$:</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;stroke-width:0.264583"
+ x="134.97845"
+ y="132.58472"
+ id="text3899"><tspan
+ sodipodi:role="line"
+ id="tspan3897"
+ style="stroke-width:0.264583"
+ x="134.97845"
+ y="132.58472">;</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="169.92604"
+ y="146.3129"
+ id="text4280-6-7"><tspan
+ sodipodi:role="line"
+ style="fill:#000000;stroke-width:0.264583"
+ x="169.92604"
+ y="146.3129"
+ id="tspan2630-9">return $\{b\}$</tspan></text>
+ <circle
+ style="fill:#008000;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stop-color:#000000"
+ id="path3663-3-0-7-2"
+ cx="174.36296"
+ cy="133.94179"
+ r="2.7302806" />
+ <text
+ xml:space="preserve"
+ style="font-size:8.46667px;line-height:1.25;font-family:sans-serif;fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="136.59073"
+ id="text3750-3-6-0"><tspan
+ sodipodi:role="line"
+ id="tspan3748-2-0-2"
+ style="fill:#000000;stroke-width:0.264583"
+ x="179.81555"
+ y="136.59073">$\to \{b\}$</tspan></text>
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/location-aware.png b/doc/talks/2023-01-18-tocatta/assets/location-aware.png
new file mode 100644
index 00000000..f5966865
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/location-aware.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/logo_chatons.png b/doc/talks/2023-01-18-tocatta/assets/logo_chatons.png
new file mode 100644
index 00000000..890cf17e
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/logo_chatons.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/map.png b/doc/talks/2023-01-18-tocatta/assets/map.png
new file mode 100644
index 00000000..1dff3ab6
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/map.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/minio.png b/doc/talks/2023-01-18-tocatta/assets/minio.png
new file mode 100644
index 00000000..a71e9ccc
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/minio.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/neptune.jpg b/doc/talks/2023-01-18-tocatta/assets/neptune.jpg
new file mode 100644
index 00000000..e59f0bfa
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/neptune.jpg
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/quentin.jpg b/doc/talks/2023-01-18-tocatta/assets/quentin.jpg
new file mode 100644
index 00000000..d9a7b1e7
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/quentin.jpg
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/rust_logo.png b/doc/talks/2023-01-18-tocatta/assets/rust_logo.png
new file mode 100644
index 00000000..0e4809ec
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/rust_logo.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/slide1.png b/doc/talks/2023-01-18-tocatta/assets/slide1.png
new file mode 100644
index 00000000..eb2e67a0
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/slide1.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/slide2.png b/doc/talks/2023-01-18-tocatta/assets/slide2.png
new file mode 100644
index 00000000..126a39b8
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/slide2.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/slide3.png b/doc/talks/2023-01-18-tocatta/assets/slide3.png
new file mode 100644
index 00000000..a39f96bf
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/slide3.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/slideB1.png b/doc/talks/2023-01-18-tocatta/assets/slideB1.png
new file mode 100644
index 00000000..b14b6070
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/slideB1.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/slideB2.png b/doc/talks/2023-01-18-tocatta/assets/slideB2.png
new file mode 100644
index 00000000..a881a796
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/slideB2.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/slideB3.png b/doc/talks/2023-01-18-tocatta/assets/slideB3.png
new file mode 100644
index 00000000..830709d2
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/slideB3.png
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/assets/slides.svg b/doc/talks/2023-01-18-tocatta/assets/slides.svg
new file mode 100644
index 00000000..9946c6fb
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/slides.svg
@@ -0,0 +1,4326 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1280"
+ height="720"
+ viewBox="0 0 338.66667 190.5"
+ version="1.1"
+ id="svg5"
+ inkscape:export-filename="/home/lx/Deuxfleurs/garage/doc/talks/2022-02-06-fosdem/assets/slide1.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ sodipodi:docname="slides.svg"
+ inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20, custom)"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ units="px"
+ inkscape:snap-global="false"
+ inkscape:zoom="0.77058782"
+ inkscape:cx="609.27514"
+ inkscape:cy="365.95439"
+ inkscape:window-width="1918"
+ inkscape:window-height="1033"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer1" />
+ <defs
+ id="defs2">
+ <marker
+ style="overflow:visible;"
+ id="Arrow1Mend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path12266" />
+ </marker>
+ <marker
+ style="overflow:visible;"
+ id="Arrow1Lend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true">
+ <path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path12260" />
+ </marker>
+ <marker
+ style="overflow:visible"
+ id="Arrow1Mend-3"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path12266-5" />
+ </marker>
+ </defs>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <image
+ width="26.416821"
+ height="26.416821"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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
+AAAAAElFTkSuQmCC
+"
+ id="image1263"
+ x="134.51895"
+ y="20.857262"
+ style="stroke-width:2.00314" />
+ <image
+ width="23.48313"
+ height="25.232662"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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
+gg==
+"
+ id="image1275"
+ x="220.0013"
+ y="21.449341"
+ style="stroke-width:10.7374" />
+ <image
+ width="30.300915"
+ height="29.702868"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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
+NXb+cQHjSzf2DwNl/pKGHoE0T2E7UXwO7KpBFexX8dF/KEhI/zT0KtpIW/TITz+A5UHeVOSJ9ROb
+6uncafKBMBwlW++6qYWi4fQlRmSSbkpMhJjpWQIt9yPCWa09JrOhrOn8L8mwl1d43y+bf+UvB7eB
+YnH6PwwE8Za0Qn3QcVm4cKB1qmpJ6iqemvooqXlVym3K5jbnv/67n/ntgQj5rNTS/wEy4kxsAPkh
+XQAAAYVpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfW8UPWhzsUMQhQ3WyICpFcNEqFKFCqBVa
+dTC59AuaNCQpLo6Ca8HBj8Wqg4uzrg6ugiD4AeLm5qToIiX+Lym0iPHguB/v7j3u3gH+RoWpZtc4
+oGqWkU4mhGxuVeh5RR8iCGEGcYmZ+pwopuA5vu7h4+tdjGd5n/tzhJS8yQCfQDzLdMMi3iCOb1o6
+533iMCtJCvE58ZhBFyR+5Lrs8hvnosN+nhk2Mul54jCxUOxguYNZyVCJp4ijiqpRvj/rssJ5i7Na
+qbHWPfkLg3ltZZnrNIeRxCKWIEKAjBrKqMBCjFaNFBNp2k94+Iccv0gumVxlMHIsoAoVkuMH/4Pf
+3ZqFyQk3KZgAul9s+2ME6NkFmnXb/j627eYJEHgGrrS2v9oApj9Jr7e16BEwsA1cXLc1eQ+43AEi
+T7pkSI4UoOkvFID3M/qmHDB4C/Svub219nH6AGSoq9QNcHAIjBYpe93j3b2dvf17ptXfD/nLct0c
+jlvtAAANGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlk
+PSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpu
+czptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6
+cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRm
+OkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9i
+ZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94
+YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9y
+Zy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94
+bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4
+bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50
+SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDozYmZlYzk3MS01ODI1LTRlMTEtODk3YS00ODBjOGUzY2ZlODci
+CiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Y2E4N2VhMzAtNTY2NC00ZDU4LThmZGItODZi
+NWI3YmJiMWI4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YWYxNmU4Mjct
+MDJjYS00YjQ3LTkxYzEtYmJiOGY4NmMyYTI4IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAg
+R0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1w
+PSIxNjMyNDkyMDU0NzQwNTU2IgogICBHSU1QOlZlcnNpb249IjIuMTAuMjQiCiAgIHRpZmY6T3Jp
+ZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhp
+c3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2
+ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5p
+aWQ6Y2MzMmRmN2ItYjQ2YS00NTM0LTlhYjgtMmRhOTRjOTYwY2NmIgogICAgICBzdEV2dDpzb2Z0
+d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0wOS0y
+NFQxNjowMDo1NCswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAg
+PC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
+ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9Inci
+Pz55r0WaAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5QkY
+DgA218SFAwAAIABJREFUeNrtndl3Glfert8qqjQgNFvzBAjZElAMshPHAo1MstP/57k5w+rO3N9a
+5+ac7tjxEOc76+vEkkAzAqHBEZoioOpcFGC7MycequB9bnKRrJWlAh5efnvvdwuapmkghBATIvIR
+EEIoMEIIocAIIYQCI4RQYIQQQoERQggFRgghFBghhAIjhBAKjBBCKDBCCAVGCCEUGCGEUGCEEEKB
+EUIoMEIIocDeJMVika80IRSY+SiVSvjuu++Qy+VQKpX4ihNSQ0i1/gcWCgX8x3/8HW2tbbgzMwO7
+3Q6r1cpXnhAKzPioqor19Q3867/+hWfPniEWjyMQCKCrqwsWi4XvAEIoMOP/jNza3MT+fhZbW1tY
+XFzE7NwcHA4Hmpub+S4ghAIzLgIATdOQP8nj8aPH2N3dRSqVQiweh8/nQ3d3N9MYIRSYwUUmCCgW
+i9jd2cXnn32Ozc0tLC0tIjw7yzRGCAVmDokBwMnJCZ48fozM3h6SqRQikQiCwSBnY4RQYOYQWaFQ
+wPb2No6Pj7GeWkckGsHc3BzGxsbQ3NxclR0hhAIzpMQ0TUM+n8d/fvMN9vezSK6tIRaLwx/wczZG
+CAVmDq6urrC9tY2jwyNsbm4iFothJhSC3W5nGiOEAjM+mqbh9PQUTx4/we7uLtaSSUSjUfj9fnR2
+dkKS+LgIocAMTqlUwl56D59+/Am2NrewsLiAcDjMNEYIBWauNPbwq6+ws7ONVCqFaDQKn8+Hrq4u
+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
+"
+ id="image1287"
+ x="175.31808"
+ y="19.214237"
+ style="stroke-width:3.53931" />
+ <image
+ width="29.202602"
+ height="29.202602"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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
+CkvGGFWwV9YDEF1SwgLIYD2Q2SEME02Fgc5Qhu4WKndlxyBtslYOunEW0+Yk/9ACqQf/3LR7saUl
+ZKNI1xbp8kBcEWqJbjm+yoStoaw1zM8eoz15E/rohzi8/X3o8XlQinGsFCJO1NdIGtfv0xcdILdg
+CD42SgZM7RmuoWZPFZ1umEHyeFRt5KYa6V5SuQABhfCX41r628IejAY/rlc9aH+O3EROA+oArbmw
+5Ia3w/oRus4tKWTGD/L+mn/LJIL/lmGFiJtqi/tNE2dt1dFlTZfROswHMKcwCoVkQJl2iE45LXjv
+eRMmAKadx6wOV8jWXdnM14Av//LfxP/8F/4dfAagCy+TfxQUlstftl+F4c/hne//unzwkz+JMk99
+5zIENbJbQ7Rs0tLwgGK4hLmzxK4ewLtmUBw5wWdmUEhPk6iHNozasLPHn3E5kFW2RRuAUnwyTTMp
+atTjO8E7Fen3Vp1Pa7PDiywkaXRV4zuV9B8QB99OG0eft2uvQzseIDdPII/egH3wOuzxO5DFudiC
+eM9WcAkg8QLZVm2I9ZjTAElwjdGSMiLDRYdYSigsQi9cX7CVVpkYjuGGMMQCs7iYn+9jrbkZGa2D
+rjwckNoJ74iEl6CjRj++DfdlYOYyNpk4YOC0XANoRXcJx2lg/bdSt5qiKyzeijEhEvGuhlFBDlad
+jbnp4bPhJtdjd3MFbsHzkRmTFxIbx8S5vDQvaIdBrC22ffgTvPrV/xG//p/9Bv5t+b07J9pnTP7R
+UVhdLvHf268C+Gcg+Ofk8Y9/xW6eP0S93gHwrjfk6XZczwxjA9NVWQiAQMdbJW4HgNriXNbi/eUy
+5cwd2VHF4RYNqPKolKfbgHzHeFwFpkLero13z4F6nKca23dJWgBSJm+IUcoqXp0Koy5+P7HDLxWC
+A0wmyHTp93u4hjz6MfD6t2BPXoftryBVEIyoCQ+wQZmvCHBLty7G8+fnSiosv2xCFaL+M42i7hKm
+Xgl3hy5g6ikoDM3zAGHFxRijjw+A4drDreEVqj/77O9XG2TqCsuM546MXwT4QzEhXo87jutUlsb4
+3EmDaMTqRcVF0DsrDftQuJm189iSYYA7REG1FFdWtoxEpa7sysSg+YIVcJRKN65HrLqy2lw6hff+
+cAPRZ/bq176LX/31P5z+5D/7jeXPye8DuMJZznKWs5zlLGc5y1nOcpaznOUsZznLWc5ylrOc5Sxn
+OctZznKWs5zlLGc5y1nOcpaznOUsZznLWc5ylrOc5SxnOctZznKWs5zlLGc5y1nOcpaznOUsZznL
+Wc5ylrOc5SxnOctZznKWs5zlLGc5y1nOcpaznOUsZznLWc5ylrOc5SxnOctZznKWs5zlLGc5y1nO
+cpaznOUsZznLWc5ylrOc5SxnOctZznKWs5zlLGc5y1nOcpaznOUsZznLWc5ylrOc5SxnOcvnV/5/
+fl07WlwHHbMAAAAASUVORK5CYII=
+"
+ id="image1359"
+ x="90.934036"
+ y="19.464371"
+ style="stroke-width:2.71808" />
+ <text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="169.47803"
+ y="66.103424"
+ id="text4115"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="169.47803"
+ y="66.103424"
+ id="tspan4117">User-facing application</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="73.229004"
+ y="183.68733"
+ id="text4115-3"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="73.229004"
+ y="183.68733"
+ id="tspan4117-6">Database</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="266.38498"
+ y="182.65727"
+ id="text4115-3-7"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="266.38498"
+ y="182.65727"
+ id="tspan4117-6-5">Filesystem</tspan></text>
+ <image
+ width="65.039139"
+ height="65.039139"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABmJLR0QA/wD/AP+gvaeTAAAgAElE
+QVR4nO3debxddX3v/9fnG4aQAYgQhqiAcQASLWIcqqBYxKEK1TpUH3qx2sd1eLS92tbWsbe1va11
+6PWn1qpwb2uLQyveqjU4IbaCwWolCMUEEA2DSoCACZBAmL6f3x9rHziJCRnY53z32ev1fDzWI2ft
+nCw++3D2+r7XWt8BJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS
+JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS
+JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS
+JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS
+JEmSJEmSJEmSJI2iaF2ApKHbG5gzaX8PYP6k/QD23+rfbABy0v6twN2T9m8D7hhijZIaMwBIbc0H
+DgEOBPYb7O8HzAXmllL2Hbw2NzPn0jXc8yb+HlhA19jvPc1130EXCtYDmwbbRmBDREzs31prvXnw
+fZuAm+mCxc3AjcB1g31JDRgApOGaCzyYrkFfOPjzkFLKgcCBmbkQOHjS3013wz1q7qALA+uA6yLi
+RuDGWus64PrB6zcOtp/RBQlJQ2AAkHbNAmAxsAg4tJSyGFicmROvHYKfq6m0GbgWWBMRa2qta4C1
+E68BVwG1XXnSzOGJStrSHODIwfaoUsoRmXkYMLH1/Yp91N0BXANcExHX1FqvAn4IXD7YbmtYmzRS
+DADqq4kr+aWllCV0V/FLgaOA0rQyTaW1wKrB3YPVwCq6OwdXsmUnSGnsGQA07g4AlgHHllKOzMyj
+6a7uF7QtSyNmPXB5RKyutV4OXASsBG5qW5Y0dQwAGif7AY8BlpVSlmXmMuBo/D3X7lsLrMzMlXSB
+4D/pOidKM54nRs1U+wOPxsZe089QoLHgyVIzxcOAp5VSnp6ZT6N7fi+NijURcV6t9ZvAuXSjEaSR
+ZgDQqFoMHF9KOS4zn0kXAKSZYm1ErKi1ngOcD6zGToYaMQYAjYqjgRNKKU/LzBPoxtRL4+LaiPhm
+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
+P2vmuIUtH0lsb+TDgklfz6JrvDVzXJSZH6Obvc/JsbRDBgDtjmWllNdm5ivwKk5qaXNELK+1no4d
++7SLDAB6IBYAL42Il9OtbubvkzT1KrAiMz8NfIb+9iHRA+QJW8PyELqFh04FlrUuRhpDqzPzs8An
+gB+3LkYznwFAU+GXSikvz8yX0g3ZkrR7roqIz9RaPwVc0roYjRcDgKbaUuDkiDgFeAr+zkk7snrw
+XP8s4Hy6KXulofNkrOm0mG5Fwucys9dKl4bpDuBbmfll4AvAlY3rUU8YANTKHOAppZRTMvP5dLO5
+SX1xXUR8vda6HPga3VBNaVoZADQqjgSeVko5ITOfTjftqzQufhoR36y1ngecC/ywdUGSAUCjahFw
+XCnlpMw8nm5BF2mmWBsRK2qt59A9x1/VuiBpawYAzRSHAycM7hA8DXhE64KkSa6IiPNqrefSXeFf
+07ogaUcMAJqp9gMeQzcr4bLMXAYcjb/TmnprgZWZuRJYCXwXuKFtSdKu82SpcbIv8EsYCjQ8Wzf2
+36FbuEma8TwxatwtAB4HHFtKOTIzjwaOoluRTppwE3BZRFxaa70MuIiuwXeaXY0tA4D6agHdvARL
+SylLgMWZuZRuNMKsppVpKq0FVkXEmlrrarrOeWsGm9QrBgBpS/vQhYAjgUeVUg7PzMOAw+g6Is5u
+WZx2aDNwNXBNRFxTa72absjd5YPt9pbFSaPEACDtmgV0QxQPBRaXUhbT3T2YeO0IoLQrb+ytp7uK
+v3ZwFT9x9b4WuBa4im61PEk7YACQhmsfuiBwEHAgsBA4qJRyEHBgZi4cvHbw4O/3aVXoiLgduBG4
+HlgXEeuAG2ut19N1tls36e+vwyt4aWgMAFJb87gvEMwH9h+8NheYW0pZMPE1MC8z96ebRnku3aiH
+fYE96YZFTqebgbvoprC9BdgE3BYRG4CNg/1Ntdb1E18PXt8A3ErXoN8weF1SAwYAafwEXZCYbMEO
+9tfvYH8DrkonSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk
+SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk
+SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk
+SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk
+SZIkSZIkSdKU+/8B8UD79J00AfcAAAAASUVORK5CYII=
+"
+ id="image7444"
+ x="42.921436"
+ y="103.45746"
+ style="stroke-width:2.08285" />
+ <image
+ width="48.37225"
+ height="48.37225"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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
+"
+ id="image7640"
+ x="242.05431"
+ y="112.98055"
+ style="stroke-width:2.62548" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Mend)"
+ d="M 147.15073,80.962811 V 93.477746 H 74.989012 v 12.859624"
+ id="path12236" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-3)"
+ d="m 190.64085,80.962811 v 12.514935 h 72.16171 v 12.859624"
+ id="path12236-6" />
+ <image
+ width="34.06498"
+ height="34.06498"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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
+"
+ id="image13044"
+ x="74.692276"
+ y="130.02034"
+ style="stroke-width:3.97671" />
+ <rect
+ style="fill:#ffffff;stroke:none;stroke-width:1.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill-opacity:0.73301107"
+ id="rect13086"
+ width="130.82137"
+ height="113.0019"
+ x="32.462914"
+ y="73.501602" />
+ <image
+ width="57.52919"
+ height="57.52919"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAMAAABOo35HAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
+bWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp
+bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6
+eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0
+MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJo
+dHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlw
+dGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAv
+IiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RS
+ZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpD
+cmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNS4xIFdpbmRvd3MiIHhtcE1NOkluc3RhbmNl
+SUQ9InhtcC5paWQ6RDJGNjUxMzYzRkI5MTFFQTgxMTFCMzM0MTU3RjA5QjciIHhtcE1NOkRvY3Vt
+ZW50SUQ9InhtcC5kaWQ6RDJGNjUxMzczRkI5MTFFQTgxMTFCMzM0MTU3RjA5QjciPiA8eG1wTU06
+RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEMkY2NTEzNDNGQjkxMUVBODEx
+MUIzMzQxNTdGMDlCNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMkY2NTEzNTNGQjkxMUVB
+ODExMUIzMzQxNTdGMDlCNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1w
+bWV0YT4gPD94cGFja2V0IGVuZD0iciI/PhMrP1wAAAGAUExURWOmTOnp6pCQj1GYO2hLIm1tbfl6
+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
+MNJGE1brA6mS/l65sLZFnYpfQPusDlhpYAWGh5M16oXJPzeXD+sfKdUi3Jnsr5u1Xi+t3A0r2xOW
+hevKPOaka8Kq0LomVIRmJNkyWudZWKpF0e97rpU+qJW0IXqj7bPcSjHXea79RbBaSkKtlHN0M9HU
+7IsQwKq3d/D0xbDkfPhasKDXNjUhuF8x4uzUhectS3LadbIlttXsupl0eDQ211V51fZZXWlSOU+1
+9+aSyrliXVY6uqM9UpFuDItim5Fhh4M/Awtv1vVgNcod3hXPdm9J1x6WFS5eOE+jONqw0vVsl7hp
+Soe0IrcbVxKsHaM6STRZM532JVsqNxalat3dnD8Kn0fYhHVNy4JbauW61Ljcqos/a1lqIxxJXw1W
+t7hp6Sw672y3nLV7VAcPF6ZqWYfY/AwlT9083InozLlcR+pOzdXjpZLcCiiuDashZbpiPbe9XlZ7
+WtalsOT8FWAVuzKlPSYkValStgjNGLj3mSBXg9VUuvauZAYYb87qFNM3hoW7uCppd2eoZyGutYdl
+FdM9Zx4URSbDw3dgcZnuTGnvlGFzgCbf48awLHqPK3SuslQx46ZS9M1hoXPNiJy9PXanI2R+87zP
+qmiJD3eqfmbmIeMkfeq7sKgrZWH0MSfdW2tdDZZa1C/H7ujcLxVvUThiv7llgWulLM6IKNtbs+pE
+4/QYDTd0WJFsrdzdSLbnB8HK2W8NS21kdefiPnfy8q1g6Uon64zE080kEE4GX6yz0rRF6lU+dFNY
+Zx7NpfUE121gVZojN+bhunOzxYth6TU1BbYFa/M8LC2BbqnrXzOCUUrbslrDVjjuvkxe3wiWuhmh
+c1RX+rygp3csN++GoIlKrYoKUiDT+sbhS2DVWL1vNTdbU3Nnu6GeLpb0WVWARXVZVq01j6T5xtOu
+OoR28v8msFS8mVxEU/zkt54VO+XytdvAUlupnwLXNSRaNWXZE1alrn92c2eVsG4/TVgWfdBRcTs8
+/Z5SHZaV7th2Wefsjnfss2QV6GxXpvRasMKYk3Wn4y1RpX97HMfKt4HVkRp32+N03kompDccgpy+
+WGc1x4U0S7Y/ppys/bRTlDpKspDT+5kjpZcZEFg5penvw5YM5mDAEwjNK9HLzaicwKXTrOZdbgBL
+ddj1rB8byedyuQwtF5oxcDas3gYWVjK1g5OUjLGZ3BZJPWE1rM3cG+uw5pyC0i5TAV9E+pqbo3PA
+PZtpxXZ4VVIzdE/HBdYO1tYgA567OSeeyVlzmTr5dwFo3Ww0lNiO6+G4dnBYYDfKN44N9Vaj7ReX
+HPUMpEHkFVpZtQ41pWUdLLrLBvBxPUfs1u+pGu4KpRQnZjQkR8u2C/aUvfnOaZKtuwGsSt19waUU
+exvWdWBJtYjivohVSsj1gCVZlTPPK7hbluVsX3uTo1106pK9K7qBIRBNq9zrbmEZg9qasLhEwZ/v
+hpa6vWf+hr5oWubqsODDwpl4z/xQwS4LTgumSnVrAQ+puSKp2FWCWpC1rlSoo2WJZ5KUbjubb97T
+pq/V1VeGjFhU5OzHu9N4aWp7jk3shtWsKVUyvdaElCNc+lzJpxzJXbT3+XVWWEBPsBRL9kJHjRyZ
+Mk6VhEy2HNZqSgtYSon6otGkVWjNLtvjGdqOU1ukG+J37XgveB/R2U6wWOWO17FODUElD+OJu2uG
+wbFJBtacTObPelgWaT0dPFkspnS84WnzDRu3hwWyqEJZi+1gzk2KocVIJmfRD7kp0wrO6aXqel5d
+xd3siDm40fwyWauAT1AiOOckwXgmayzdhTTHRpyW9nx3xVrXX0fuRViTZZQ1Etfpu9N2TozkN/W7
+JKbs+MZnplQsIu4YbldYZ09RCmLYScf1YgH4hvAd4A0vnA677npDMlFVFESyaAALksiBQFSz8ESy
+5MmpAc72dw5vOgR4NivSGauFgm9XpOmi7hUqlpxDEONxeCeh6Nwsdy5jqVgcdRZ/Ql7XFJ+VMr4C
+H2frtGMjW9PnACvZDH5w8Yy7qcCXLUYixfwFLhuGEvgKNH6Q9h2ytUuW0lx7caaq1TBlrdA2s5Za
+GZNDnaFLmAS37Y/EPKRlE56LZyxJ+hN0Q1TRVsl7ZS3l1txnO99rseqvUztSHa1X1Lpeon/wWbOQ
+wpevJoKvV6FqWe1qzn6H28LSCtgqlYo2u1s5s4URWQMjdT2ID1XIU/VEQ+fPyQ8rPd5I/xztdWrj
+/NuFz9yk5gerje98nx4FU/r1VL6zsfNNt1e5NI12wbMvCPYvzcf1/ol6yw0aLrqaH1JFYzQDlgHL
+gGXAMmAZsIxmwDJgGbAMWAYsA5bRDFgGLAOWAcuAZcAymgHLgGXAMmAZsAxYRjNgGbAMWAYsA5YB
+y2gGLAOWAcuAZcAyYBnNgGXAMmAZsAxYBiyjGbAMWAYsA5YBy4BlNAOWAcuAZcAyYBmwjGbAum77
+/wIMAMjwwmKcHMt1AAAAAElFTkSuQmCC
+"
+ id="image13664"
+ x="181.2438"
+ y="110.06655"
+ style="stroke-width:1.37973" />
+ <image
+ width="30.972841"
+ height="42.781239"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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
+AElFTkSuQmCC
+"
+ id="image13722"
+ x="297.28098"
+ y="115.33748"
+ style="stroke-width:1.45791" />
+ </g>
+</svg>
diff --git a/doc/talks/2023-01-18-tocatta/assets/slidesB.svg b/doc/talks/2023-01-18-tocatta/assets/slidesB.svg
new file mode 100644
index 00000000..c0a6e97c
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/assets/slidesB.svg
@@ -0,0 +1,444 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ width="1280"
+ height="720"
+ viewBox="0 0 338.66667 190.5"
+ version="1.1"
+ id="svg5"
+ inkscape:export-filename="slideB1.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96"
+ sodipodi:docname="slidesB.svg"
+ inkscape:version="1.2 (dc2aedaf03, 2022-05-15)"
+ xml:space="preserve"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
+ id="namedview7"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ inkscape:pagecheckerboard="0"
+ inkscape:document-units="mm"
+ showgrid="false"
+ units="px"
+ inkscape:snap-global="false"
+ inkscape:zoom="0.77058782"
+ inkscape:cx="408.77885"
+ inkscape:cy="376.98494"
+ inkscape:window-width="1678"
+ inkscape:window-height="993"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="layer2"
+ inkscape:showpageshadow="2"
+ inkscape:deskcolor="#d1d1d1" /><defs
+ id="defs2"><marker
+ style="overflow:visible;"
+ id="Arrow1Mend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"><path
+ transform="scale(0.4) rotate(180) translate(10,0)"
+ style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path12266" /></marker><marker
+ style="overflow:visible;"
+ id="Arrow1Lend"
+ refX="0.0"
+ refY="0.0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lend"
+ inkscape:isstock="true"><path
+ transform="scale(0.8) rotate(180) translate(12.5,0)"
+ style="fill-rule:evenodd;fill:context-stroke;stroke:context-stroke;stroke-width:1.0pt;"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ id="path12260" /></marker><marker
+ style="overflow:visible"
+ id="Arrow1Mend-3"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:isstock="true"><path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path12266-5" /></marker><style
+ id="style2">.cls-1{fill:#3b2100;}.cls-2{fill:#ffd952;}.cls-3{fill:#45c8ff;}</style></defs><g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ sodipodi:insensitive="true"><image
+ width="26.416821"
+ height="26.416821"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 AAAAAElFTkSuQmCC "
+ id="image1263"
+ x="134.51895"
+ y="20.857262"
+ style="stroke-width:2.00314" /><image
+ width="23.48313"
+ height="25.232662"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 gg== "
+ id="image1275"
+ x="220.0013"
+ y="21.449341"
+ style="stroke-width:10.7374" /><image
+ width="30.300915"
+ height="29.702868"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 NXb+cQHjSzf2DwNl/pKGHoE0T2E7UXwO7KpBFexX8dF/KEhI/zT0KtpIW/TITz+A5UHeVOSJ9ROb 6uncafKBMBwlW++6qYWi4fQlRmSSbkpMhJjpWQIt9yPCWa09JrOhrOn8L8mwl1d43y+bf+UvB7eB YnH6PwwE8Za0Qn3QcVm4cKB1qmpJ6iqemvooqXlVym3K5jbnv/67n/ntgQj5rNTS/wEy4kxsAPkh XQAAAYVpQ0NQSUNDIHByb2ZpbGUAAHicfZE9SMNAHMVfW8UPWhzsUMQhQ3WyICpFcNEqFKFCqBVa dTC59AuaNCQpLo6Ca8HBj8Wqg4uzrg6ugiD4AeLm5qToIiX+Lym0iPHguB/v7j3u3gH+RoWpZtc4 oGqWkU4mhGxuVeh5RR8iCGEGcYmZ+pwopuA5vu7h4+tdjGd5n/tzhJS8yQCfQDzLdMMi3iCOb1o6 533iMCtJCvE58ZhBFyR+5Lrs8hvnosN+nhk2Mul54jCxUOxguYNZyVCJp4ijiqpRvj/rssJ5i7Na qbHWPfkLg3ltZZnrNIeRxCKWIEKAjBrKqMBCjFaNFBNp2k94+Iccv0gumVxlMHIsoAoVkuMH/4Pf 3ZqFyQk3KZgAul9s+2ME6NkFmnXb/j627eYJEHgGrrS2v9oApj9Jr7e16BEwsA1cXLc1eQ+43AEi T7pkSI4UoOkvFID3M/qmHDB4C/Svub219nH6AGSoq9QNcHAIjBYpe93j3b2dvf17ptXfD/nLct0c jlvtAAANGmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlk PSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpu czptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAtRXhpdjIiPgogPHJkZjpSREYgeG1sbnM6 cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRm OkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9i ZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94 YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9y Zy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94 bXAvIgogICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICB4 bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgIHhtcE1NOkRvY3VtZW50 SUQ9ImdpbXA6ZG9jaWQ6Z2ltcDozYmZlYzk3MS01ODI1LTRlMTEtODk3YS00ODBjOGUzY2ZlODci CiAgIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Y2E4N2VhMzAtNTY2NC00ZDU4LThmZGItODZi NWI3YmJiMWI4IgogICB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YWYxNmU4Mjct MDJjYS00YjQ3LTkxYzEtYmJiOGY4NmMyYTI4IgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAg R0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1w PSIxNjMyNDkyMDU0NzQwNTU2IgogICBHSU1QOlZlcnNpb249IjIuMTAuMjQiCiAgIHRpZmY6T3Jp ZW50YXRpb249IjEiCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPHhtcE1NOkhp c3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2 ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5p aWQ6Y2MzMmRmN2ItYjQ2YS00NTM0LTlhYjgtMmRhOTRjOTYwY2NmIgogICAgICBzdEV2dDpzb2Z0 d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0wOS0y NFQxNjowMDo1NCswMjowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAg PC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9Inci Pz55r0WaAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5QkY DgA218SFAwAAIABJREFUeNrtndl3Glfert8qqjQgNFvzBAjZElAMshPHAo1MstP/57k5w+rO3N9a 5+ac7tjxEOc76+vEkkAzAqHBEZoioOpcFGC7MycequB9bnKRrJWlAh5efnvvdwuapmkghBATIvIR EEIoMEIIocAIIYQCI4RQYIQQQoERQggFRgghFBghhAIjhBAKjBBCKDBCCAVGCCEUGCGEUGCEEEKB EUIoMEIIocDeJMVika80IRSY+SiVSvjuu++Qy+VQKpX4ihNSQ0i1/gcWCgX8x3/8HW2tbbgzMwO7 3Q6r1cpXnhAKzPioqor19Q3867/+hWfPniEWjyMQCKCrqwsWi4XvAEIoMOP/jNza3MT+fhZbW1tY XFzE7NwcHA4Hmpub+S4ghAIzLgIATdOQP8nj8aPH2N3dRSqVQiweh8/nQ3d3N9MYIRSYwUUmCCgW i9jd2cXnn32Ozc0tLC0tIjw7yzRGCAVmDokBwMnJCZ48fozM3h6SqRQikQiCwSBnY4RQYOYQWaFQ wPb2No6Pj7GeWkckGsHc3BzGxsbQ3NxclR0hhAIzpMQ0TUM+n8d/fvMN9vezSK6tIRaLwx/wczZG CAVmDq6urrC9tY2jwyNsbm4iFothJhSC3W5nGiOEAjM+mqbh9PQUTx4/we7uLtaSSUSjUfj9fnR2 dkKS+LgIocAMTqlUwl56D59+/Am2NrewsLiAcDjMNEYIBWauNPbwq6+ws7ONVCqFaDQKn8+Hrq4u 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 "
+ id="image1287"
+ x="175.31808"
+ y="19.214237"
+ style="stroke-width:3.53931" /><image
+ width="29.202602"
+ height="29.202602"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 CkvGGFWwV9YDEF1SwgLIYD2Q2SEME02Fgc5Qhu4WKndlxyBtslYOunEW0+Yk/9ACqQf/3LR7saUl ZKNI1xbp8kBcEWqJbjm+yoStoaw1zM8eoz15E/rohzi8/X3o8XlQinGsFCJO1NdIGtfv0xcdILdg CD42SgZM7RmuoWZPFZ1umEHyeFRt5KYa6V5SuQABhfCX41r628IejAY/rlc9aH+O3EROA+oArbmw 5Ia3w/oRus4tKWTGD/L+mn/LJIL/lmGFiJtqi/tNE2dt1dFlTZfROswHMKcwCoVkQJl2iE45LXjv eRMmAKadx6wOV8jWXdnM14Av//LfxP/8F/4dfAagCy+TfxQUlstftl+F4c/hne//unzwkz+JMk99 5zIENbJbQ7Rs0tLwgGK4hLmzxK4ewLtmUBw5wWdmUEhPk6iHNozasLPHn3E5kFW2RRuAUnwyTTMp atTjO8E7Fen3Vp1Pa7PDiywkaXRV4zuV9B8QB99OG0eft2uvQzseIDdPII/egH3wOuzxO5DFudiC eM9WcAkg8QLZVm2I9ZjTAElwjdGSMiLDRYdYSigsQi9cX7CVVpkYjuGGMMQCs7iYn+9jrbkZGa2D rjwckNoJ74iEl6CjRj++DfdlYOYyNpk4YOC0XANoRXcJx2lg/bdSt5qiKyzeijEhEvGuhlFBDlad jbnp4bPhJtdjd3MFbsHzkRmTFxIbx8S5vDQvaIdBrC22ffgTvPrV/xG//p/9Bv5t+b07J9pnTP7R UVhdLvHf268C+Gcg+Ofk8Y9/xW6eP0S93gHwrjfk6XZczwxjA9NVWQiAQMdbJW4HgNriXNbi/eUy 5cwd2VHF4RYNqPKolKfbgHzHeFwFpkLero13z4F6nKca23dJWgBSJm+IUcoqXp0Koy5+P7HDLxWC A0wmyHTp93u4hjz6MfD6t2BPXoftryBVEIyoCQ+wQZmvCHBLty7G8+fnSiosv2xCFaL+M42i7hKm Xgl3hy5g6ikoDM3zAGHFxRijjw+A4drDreEVqj/77O9XG2TqCsuM546MXwT4QzEhXo87jutUlsb4 3EmDaMTqRcVF0DsrDftQuJm189iSYYA7REG1FFdWtoxEpa7sysSg+YIVcJRKN65HrLqy2lw6hff+ cAPRZ/bq176LX/31P5z+5D/7jeXPye8DuMJZznKWs5zlLGc5y1nOcpaznOUsZznLWc5ylrOc5Sxn OctZznKWs5zlLGc5y1nOcpaznOUsZznLWc5ylrOc5SxnOctZznKWs5zlLGc5y1nOcpaznOUsZznL Wc5ylrOc5SxnOctZznKWs5zlLGc5y1nOcpaznOUsZznLWc5ylrOc5SxnOctZznKWs5zlLGc5y1nO cpaznOUsZznLWc5ylrOc5SxnOctZznKWs5zlLGc5y1nOcpaznOUsZznLWc5ylrOc5SxnOcvnV/5/ fl07WlwHHbMAAAAASUVORK5CYII= "
+ id="image1359"
+ x="90.934036"
+ y="19.464371"
+ style="stroke-width:2.71808" /><text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="169.47803"
+ y="66.103424"
+ id="text4115"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="169.47803"
+ y="66.103424"
+ id="tspan4117">User-facing application</tspan></text><text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="73.229004"
+ y="183.68733"
+ id="text4115-3"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="73.229004"
+ y="183.68733"
+ id="tspan4117-6">Database*</tspan></text><text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="111.25725"
+ y="162.21248"
+ id="text4115-3-6"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="111.25725"
+ y="162.21248"
+ id="tspan4117-6-8">K2V</tspan></text><text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="266.38498"
+ y="182.65727"
+ id="text4115-3-7"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="266.38498"
+ y="182.65727"
+ id="tspan4117-6-5">Object storage</tspan></text><path
+ style="fill:none;stroke:#000000;stroke-width:1.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend)"
+ d="M 147.15073,80.962811 V 93.477746 H 74.989012 v 12.859624"
+ id="path12236" /><path
+ style="fill:none;stroke:#000000;stroke-width:1.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow1Mend-3)"
+ d="m 190.64085,80.962811 v 12.514935 h 75.18482 v 12.859624"
+ id="path12236-6"
+ sodipodi:nodetypes="cccc" /><g
+ id="g329"
+ transform="matrix(0.25773706,0,0,0.25773706,234.20703,108.42714)"
+ style="stroke-width:1.02656"><g
+ id="g1663"
+ transform="matrix(1.7099534,0,0,1.7099534,-88.607712,-87.994557)"
+ style="stroke-width:1.02656"><path
+ d="m 138.33068,100.19817 a 8.327649,8.327649 0 0 1 -2.77589,-0.288688 l -34.78736,-9.388036 a 8.4442361,8.4442361 0 0 1 -2.620433,-1.238044 z"
+ id="path6"
+ style="stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 85.377935,159.27452 5.163143,-0.0333 h 0.06662 q 2.864711,0 2.864711,2.69816 v 8.69407 a 24.849705,24.849705 0 0 1 -8.649651,1.43235 q -4.730105,0 -7.128468,-3.21447 -2.398363,-3.21447 -2.398363,-8.76068 0,-5.55177 2.981299,-8.62745 a 9.7600046,9.7600046 0 0 1 7.29502,-3.08123 13.368653,13.368653 0 0 1 7.811335,2.43167 3.9250986,3.9250986 0 0 1 -0.682867,1.76547 4.7634152,4.7634152 0 0 1 -1.282458,1.33242 9.798867,9.798867 0 0 0 -5.679457,-1.96533 5.3574542,5.3574542 0 0 0 -4.480275,2.04861 q -1.598909,2.03749 -1.598909,6.41229 0,8.22771 6.062529,8.22771 a 16.910679,16.910679 0 0 0 3.697476,-0.43303 v -3.16451 q 0,-1.49898 0.06662,-2.22071 h -2.442777 a 2.2873276,2.2873276 0 0 1 -1.515632,-0.41638 1.6655298,1.6655298 0 0 1 -0.483004,-1.33242 5.7072154,5.7072154 0 0 1 0.333106,-1.79322 z"
+ id="path8"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 111.07151,169.73404 a 4.3137222,4.3137222 0 0 1 -0.55518,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05902,-1.95422 6.7453957,6.7453957 0 0 1 -4.76342,2.13188 q -2.564913,0 -3.886233,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.299113,-3.4643 q 0,-2.77588 1.815427,-4.21379 a 7.3338829,7.3338829 0 0 1 4.669039,-1.3935 q 1.53228,0 2.89802,0.13325 v -0.99932 q 0,-2.63154 -2.53161,-2.63154 -1.79877,0 -5.096518,1.19918 a 4.674587,4.674587 0 0 1 -1.110353,-2.96464 18.581761,18.581761 0 0 1 7.217291,-1.49898 5.8682167,5.8682167 0 0 1 4.0639,1.39905 q 1.56559,1.39904 1.56559,4.23044 v 6.79537 q -0.0111,1.83208 0.9216,2.59822 z m -8.36096,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06525,0.68842 2.3928111,2.3928111 0 0 0 -0.69953,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.55518 z"
+ id="path10"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 113.76966,157.00939 a 3.986168,3.986168 0 0 1 0.55518,-1.21583 3.3310596,3.3310596 0 0 1 0.84942,-0.94935 4.1638245,4.1638245 0 0 1 3.51427,2.96464 q 1.33242,-2.96464 4.29707,-2.96464 a 10.215249,10.215249 0 0 1 1.93201,0.23317 7.4782288,7.4782288 0 0 1 -0.99932,3.88624 8.4497879,8.4497879 0 0 0 -1.49897,-0.19987 q -2.03195,0 -3.26444,2.16519 v 10.64829 a 11.575432,11.575432 0 0 1 -2.03195,0.16655 12.769062,12.769062 0 0 1 -2.09857,-0.16655 v -11.15905 q -0.0222,-2.40947 -1.2547,-3.40879 z"
+ id="path12"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 140.38483,169.73404 a 4.3137222,4.3137222 0 0 1 -0.58293,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05348,-1.95422 6.7453957,6.7453957 0 0 1 -4.76341,2.13188 q -2.56492,0 -3.88624,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.29911,-3.4643 q 0,-2.77588 1.81543,-4.21379 a 7.3338829,7.3338829 0 0 1 4.64682,-1.4157 q 1.53229,0 2.89803,0.13324 v -0.99932 q 0,-2.63153 -2.53161,-2.63153 -1.79877,0 -5.09652,1.19918 a 4.674587,4.674587 0 0 1 -1.11035,-2.96465 18.581761,18.581761 0 0 1 7.21729,-1.49897 5.8682167,5.8682167 0 0 1 4.0639,1.39904 q 1.56559,1.39905 1.56559,4.23045 v 6.81757 q 0.0333,1.83208 0.96601,2.59822 z m -8.37206,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06526,0.69952 2.3928111,2.3928111 0 0 0 -0.69952,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.54408 z"
+ id="path14"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 144.48203,169.6008 q -1.49897,-2.29843 -1.49897,-6.34567 0,-4.04724 1.8987,-6.34567 a 5.740526,5.740526 0 0 1 4.56355,-2.29843 6.4400486,6.4400486 0 0 1 4.49693,1.66553 3.7696491,3.7696491 0 0 1 2.63154,-1.43235 3.1200925,3.1200925 0 0 1 0.88273,0.93269 3.8862362,3.8862362 0 0 1 0.55518,1.16587 q -0.9327,0.79946 -0.9327,2.86472 v 9.438 q 0,5.29638 -1.73215,7.49488 -1.73215,2.1985 -5.69611,2.22071 a 16.100121,16.100121 0 0 1 -5.9626,-1.11036 4.4802752,4.4802752 0 0 1 1.03263,-3.03126 10.892565,10.892565 0 0 0 4.48028,1.03263 q 2.18184,0 3.0146,-1.11035 a 4.9965894,4.9965894 0 0 0 0.83277,-3.06458 v -1.33242 a 6.4011862,6.4011862 0 0 1 -4.16383,1.56559 4.9188647,4.9188647 0 0 1 -4.40255,-2.30953 z m 8.56083,-2.69816 v -7.72806 a 4.2915151,4.2915151 0 0 0 -2.86471,-1.36573 2.4039147,2.4039147 0 0 0 -2.18185,1.43235 8.6885138,8.6885138 0 0 0 -0.7828,4.09721 q 0,2.66485 0.71618,3.93065 a 2.1318781,2.1318781 0 0 0 1.88205,1.2658 4.2304457,4.2304457 0 0 0 3.23113,-1.63222 z"
+ id="path16"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 174.20619,164.67083 h -9.32697 a 5.6405943,5.6405943 0 0 0 0.88273,3.04792 q 0.7828,1.0826 2.74813,1.0826 a 10.120869,10.120869 0 0 0 4.36369,-1.16587 4.3803434,4.3803434 0 0 1 1.19918,2.5316 10.759323,10.759323 0 0 1 -6.41229,1.8987 q -3.74744,0 -5.37966,-2.43167 -1.63222,-2.43167 -1.63222,-6.2957 0,-3.88624 1.79877,-6.2957 a 6.0181143,6.0181143 0 0 1 5.14649,-2.43168 q 3.33106,0 5.14648,2.01529 a 7.3449864,7.3449864 0 0 1 1.79878,5.07987 13.04665,13.04665 0 0 1 -0.33311,2.96464 z m -6.42895,-7.06184 q -2.73146,0 -2.93133,4.13051 h 5.79605 v -0.39973 a 4.7245529,4.7245529 0 0 0 -0.69953,-2.69816 2.4316735,2.4316735 0 0 0 -2.14298,-1.03262 z"
+ id="path18"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ id="path24-3-6"
+ style="fill:#ffd952;fill-opacity:1;stroke-width:0.569924"
+ d="m 124.80273,70.162462 a 11.0036,11.0036 0 0 0 -4.33203,0.935547 L 76.261719,90.656602 a 1.5989086,1.5989086 0 0 0 -0.837891,2.138672 0.77169547,0.77169547 0 0 0 0.06641,0.177735 l 7.09375,14.021481 h 6.15625 l -0.875,-4.88867 c -0.07217,-0.39418 -0.711263,-3.187532 -1.316406,-5.197264 l 20.691398,6.462894 c 0.27198,1.28839 0.63292,2.49204 1.0625,3.62304 h 33.54883 c 0.36964,-1.13128 0.66138,-2.33705 0.85938,-3.62304 l 20.64648,-6.445316 c -0.60514,2.009734 -1.23639,4.785506 -1.30859,5.179686 l -0.875,4.88867 h 6.15429 l 7.02735,-13.894528 0.0664,-0.126953 0.0684,-0.171875 a 0.10548355,0.10548355 0 0 0 0,-0.04492 1.4878733,1.4878733 0 0 0 0.0664,-0.515625 1.5822533,1.5822533 0 0 0 -0.99414,-1.583985 L 129.35352,71.098009 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ id="path24-3"
+ style="fill:#49c8fa;fill-opacity:1;stroke-width:0.569924"
+ d="M 124.80273,79.416133 A 11.0036,11.0036 0 0 0 120.4707,80.35168 L 76.261719,99.910272 a 1.5989086,1.5989086 0 0 0 -0.837891,2.136718 0.77169547,0.77169547 0 0 0 0.06641,0.17773 l 3.847657,7.60352 h 8.175781 c -0.257897,-1.08856 -0.591943,-2.42953 -0.964844,-3.66797 l 11.744141,3.66797 h 53.371087 l 11.69336,-3.65039 c -0.37193,1.23522 -0.70076,2.56719 -0.95703,3.65039 h 8.17383 l 3.78125,-7.47656 0.0664,-0.12696 0.0684,-0.17187 a 0.10548355,0.10548355 0 0 0 0,-0.0449 1.4878733,1.4878733 0 0 0 0.0664,-0.51563 1.5822533,1.5822533 0 0 0 -0.99414,-1.582028 L 129.35352,80.35168 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ class="cls-2"
+ d="m 174.55595,110.92974 a 1.4878733,1.4878733 0 0 1 -0.0666,0.51631 0.10548355,0.10548355 0 0 1 0,0.0444 l -0.0666,0.17211 v 0 l -0.0666,0.12769 -10.69826,21.15223 c -1.48787,2.93688 -4.22489,2.84806 -3.76409,-0.12214 l 2.15408,-12.02512 c 0.0722,-0.39418 0.70508,-3.17006 1.31022,-5.1798 l -20.64702,6.4456 c -3.24223,21.05785 -30.95109,21.40761 -35.47023,0 l -20.691432,-6.46226 c 0.605143,2.00974 1.243596,4.80228 1.315769,5.19646 l 2.154085,12.02512 c 0.460796,2.9702 -2.276224,3.05902 -3.764098,0.12214 L 75.49024,111.66257 a 0.77169547,0.77169547 0 0 1 -0.06662,-0.17766 1.5989086,1.5989086 0 0 1 0.838317,-2.13743 L 120.47065,89.788613 a 11.0036,11.0036 0 0 1 8.88282,0 l 44.20871,19.558867 a 1.5822533,1.5822533 0 0 1 0.99377,1.58226 z"
+ id="path24"
+ style="stroke-width:0.569924" /><path
+ class="cls-3"
+ d="m 139.0413,114.61611 19.11473,-7.69475 a 0.81055784,0.81055784 0 0 0 0,-1.50453 c -2.2207,-0.92714 -4.96328,-1.99308 -7.65033,-3.10899 -0.49411,-0.20541 -5.17425,3.15341 -5.60173,3.49762 l -8.23882,6.58439 c -1.99309,1.67108 -0.26649,3.28665 2.37615,2.22626 z"
+ id="path26"
+ style="stroke-width:0.569924" /><circle
+ class="cls-3"
+ cx="125.18409"
+ cy="122.13319"
+ r="9.9654207"
+ id="circle28"
+ style="stroke-width:0.569924" /><path
+ d="m 138.33068,100.19817 a 8.327649,8.327649 0 0 1 -2.77589,-0.288688 l -34.78736,-9.388036 a 8.4442361,8.4442361 0 0 1 -2.620433,-1.238044 z"
+ id="path6-0"
+ style="stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 85.377935,159.27452 5.163143,-0.0333 h 0.06662 q 2.864711,0 2.864711,2.69816 v 8.69407 a 24.849705,24.849705 0 0 1 -8.649651,1.43235 q -4.730105,0 -7.128468,-3.21447 -2.398363,-3.21447 -2.398363,-8.76068 0,-5.55177 2.981299,-8.62745 a 9.7600046,9.7600046 0 0 1 7.29502,-3.08123 13.368653,13.368653 0 0 1 7.811335,2.43167 3.9250986,3.9250986 0 0 1 -0.682867,1.76547 4.7634152,4.7634152 0 0 1 -1.282458,1.33242 9.798867,9.798867 0 0 0 -5.679457,-1.96533 5.3574542,5.3574542 0 0 0 -4.480275,2.04861 q -1.598909,2.03749 -1.598909,6.41229 0,8.22771 6.062529,8.22771 a 16.910679,16.910679 0 0 0 3.697476,-0.43303 v -3.16451 q 0,-1.49898 0.06662,-2.22071 h -2.442777 a 2.2873276,2.2873276 0 0 1 -1.515632,-0.41638 1.6655298,1.6655298 0 0 1 -0.483004,-1.33242 5.7072154,5.7072154 0 0 1 0.333106,-1.79322 z"
+ id="path8-6"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 111.07151,169.73404 a 4.3137222,4.3137222 0 0 1 -0.55518,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05902,-1.95422 6.7453957,6.7453957 0 0 1 -4.76342,2.13188 q -2.564913,0 -3.886233,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.299113,-3.4643 q 0,-2.77588 1.815427,-4.21379 a 7.3338829,7.3338829 0 0 1 4.669039,-1.3935 q 1.53228,0 2.89802,0.13325 v -0.99932 q 0,-2.63154 -2.53161,-2.63154 -1.79877,0 -5.096518,1.19918 a 4.674587,4.674587 0 0 1 -1.110353,-2.96464 18.581761,18.581761 0 0 1 7.217291,-1.49898 5.8682167,5.8682167 0 0 1 4.0639,1.39905 q 1.56559,1.39904 1.56559,4.23044 v 6.79537 q -0.0111,1.83208 0.9216,2.59822 z m -8.36096,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06525,0.68842 2.3928111,2.3928111 0 0 0 -0.69953,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.55518 z"
+ id="path10-2"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 113.76966,157.00939 a 3.986168,3.986168 0 0 1 0.55518,-1.21583 3.3310596,3.3310596 0 0 1 0.84942,-0.94935 4.1638245,4.1638245 0 0 1 3.51427,2.96464 q 1.33242,-2.96464 4.29707,-2.96464 a 10.215249,10.215249 0 0 1 1.93201,0.23317 7.4782288,7.4782288 0 0 1 -0.99932,3.88624 8.4497879,8.4497879 0 0 0 -1.49897,-0.19987 q -2.03195,0 -3.26444,2.16519 v 10.64829 a 11.575432,11.575432 0 0 1 -2.03195,0.16655 12.769062,12.769062 0 0 1 -2.09857,-0.16655 v -11.15905 q -0.0222,-2.40947 -1.2547,-3.40879 z"
+ id="path12-6"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 140.38483,169.73404 a 4.3137222,4.3137222 0 0 1 -0.58293,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05348,-1.95422 6.7453957,6.7453957 0 0 1 -4.76341,2.13188 q -2.56492,0 -3.88624,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.29911,-3.4643 q 0,-2.77588 1.81543,-4.21379 a 7.3338829,7.3338829 0 0 1 4.64682,-1.4157 q 1.53229,0 2.89803,0.13324 v -0.99932 q 0,-2.63153 -2.53161,-2.63153 -1.79877,0 -5.09652,1.19918 a 4.674587,4.674587 0 0 1 -1.11035,-2.96465 18.581761,18.581761 0 0 1 7.21729,-1.49897 5.8682167,5.8682167 0 0 1 4.0639,1.39904 q 1.56559,1.39905 1.56559,4.23045 v 6.81757 q 0.0333,1.83208 0.96601,2.59822 z m -8.37206,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06526,0.69952 2.3928111,2.3928111 0 0 0 -0.69952,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.54408 z"
+ id="path14-1"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 144.48203,169.6008 q -1.49897,-2.29843 -1.49897,-6.34567 0,-4.04724 1.8987,-6.34567 a 5.740526,5.740526 0 0 1 4.56355,-2.29843 6.4400486,6.4400486 0 0 1 4.49693,1.66553 3.7696491,3.7696491 0 0 1 2.63154,-1.43235 3.1200925,3.1200925 0 0 1 0.88273,0.93269 3.8862362,3.8862362 0 0 1 0.55518,1.16587 q -0.9327,0.79946 -0.9327,2.86472 v 9.438 q 0,5.29638 -1.73215,7.49488 -1.73215,2.1985 -5.69611,2.22071 a 16.100121,16.100121 0 0 1 -5.9626,-1.11036 4.4802752,4.4802752 0 0 1 1.03263,-3.03126 10.892565,10.892565 0 0 0 4.48028,1.03263 q 2.18184,0 3.0146,-1.11035 a 4.9965894,4.9965894 0 0 0 0.83277,-3.06458 v -1.33242 a 6.4011862,6.4011862 0 0 1 -4.16383,1.56559 4.9188647,4.9188647 0 0 1 -4.40255,-2.30953 z m 8.56083,-2.69816 v -7.72806 a 4.2915151,4.2915151 0 0 0 -2.86471,-1.36573 2.4039147,2.4039147 0 0 0 -2.18185,1.43235 8.6885138,8.6885138 0 0 0 -0.7828,4.09721 q 0,2.66485 0.71618,3.93065 a 2.1318781,2.1318781 0 0 0 1.88205,1.2658 4.2304457,4.2304457 0 0 0 3.23113,-1.63222 z"
+ id="path16-8"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 174.20619,164.67083 h -9.32697 a 5.6405943,5.6405943 0 0 0 0.88273,3.04792 q 0.7828,1.0826 2.74813,1.0826 a 10.120869,10.120869 0 0 0 4.36369,-1.16587 4.3803434,4.3803434 0 0 1 1.19918,2.5316 10.759323,10.759323 0 0 1 -6.41229,1.8987 q -3.74744,0 -5.37966,-2.43167 -1.63222,-2.43167 -1.63222,-6.2957 0,-3.88624 1.79877,-6.2957 a 6.0181143,6.0181143 0 0 1 5.14649,-2.43168 q 3.33106,0 5.14648,2.01529 a 7.3449864,7.3449864 0 0 1 1.79878,5.07987 13.04665,13.04665 0 0 1 -0.33311,2.96464 z m -6.42895,-7.06184 q -2.73146,0 -2.93133,4.13051 h 5.79605 v -0.39973 a 4.7245529,4.7245529 0 0 0 -0.69953,-2.69816 2.4316735,2.4316735 0 0 0 -2.14298,-1.03262 z"
+ id="path18-7"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ id="path24-3-6-9"
+ style="fill:#ff9329;fill-opacity:1;stroke-width:0.569924"
+ d="m 124.80273,70.162462 a 11.0036,11.0036 0 0 0 -4.33203,0.935547 L 76.261719,90.656602 a 1.5989086,1.5989086 0 0 0 -0.837891,2.138672 0.77169547,0.77169547 0 0 0 0.06641,0.177735 l 7.09375,14.021481 h 6.15625 l -0.875,-4.88867 c -0.07217,-0.39418 -0.711263,-3.187532 -1.316406,-5.197264 l 20.691398,6.462894 c 0.27198,1.28839 0.63292,2.49204 1.0625,3.62304 h 33.54883 c 0.36964,-1.13128 0.66138,-2.33705 0.85938,-3.62304 l 20.64648,-6.445316 c -0.60514,2.009734 -1.23639,4.785506 -1.30859,5.179686 l -0.875,4.88867 h 6.15429 l 7.02735,-13.894528 0.0664,-0.126953 0.0684,-0.171875 a 0.10548355,0.10548355 0 0 0 0,-0.04492 1.4878733,1.4878733 0 0 0 0.0664,-0.515625 1.5822533,1.5822533 0 0 0 -0.99414,-1.583985 L 129.35352,71.098009 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ id="path24-3-2"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924"
+ d="M 124.80273,79.416133 A 11.0036,11.0036 0 0 0 120.4707,80.35168 L 76.261719,99.910272 a 1.5989086,1.5989086 0 0 0 -0.837891,2.136718 0.77169547,0.77169547 0 0 0 0.06641,0.17773 l 3.847657,7.60352 h 8.175781 c -0.257897,-1.08856 -0.591943,-2.42953 -0.964844,-3.66797 l 11.744141,3.66797 h 53.371087 l 11.69336,-3.65039 c -0.37193,1.23522 -0.70076,2.56719 -0.95703,3.65039 h 8.17383 l 3.78125,-7.47656 0.0664,-0.12696 0.0684,-0.17187 a 0.10548355,0.10548355 0 0 0 0,-0.0449 1.4878733,1.4878733 0 0 0 0.0664,-0.51563 1.5822533,1.5822533 0 0 0 -0.99414,-1.582028 L 129.35352,80.35168 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ class="cls-2"
+ d="m 174.55595,110.92974 a 1.4878733,1.4878733 0 0 1 -0.0666,0.51631 0.10548355,0.10548355 0 0 1 0,0.0444 l -0.0666,0.17211 v 0 l -0.0666,0.12769 -10.69826,21.15223 c -1.48787,2.93688 -4.22489,2.84806 -3.76409,-0.12214 l 2.15408,-12.02512 c 0.0722,-0.39418 0.70508,-3.17006 1.31022,-5.1798 l -20.64702,6.4456 c -3.24223,21.05785 -30.95109,21.40761 -35.47023,0 l -20.691432,-6.46226 c 0.605143,2.00974 1.243596,4.80228 1.315769,5.19646 l 2.154085,12.02512 c 0.460796,2.9702 -2.276224,3.05902 -3.764098,0.12214 L 75.49024,111.66257 a 0.77169547,0.77169547 0 0 1 -0.06662,-0.17766 1.5989086,1.5989086 0 0 1 0.838317,-2.13743 L 120.47065,89.788613 a 11.0036,11.0036 0 0 1 8.88282,0 l 44.20871,19.558867 a 1.5822533,1.5822533 0 0 1 0.99377,1.58226 z"
+ id="path24-0"
+ style="fill:#ff9329;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-3"
+ d="m 139.0413,114.61611 19.11473,-7.69475 a 0.81055784,0.81055784 0 0 0 0,-1.50453 c -2.2207,-0.92714 -4.96328,-1.99308 -7.65033,-3.10899 -0.49411,-0.20541 -5.17425,3.15341 -5.60173,3.49762 l -8.23882,6.58439 c -1.99309,1.67108 -0.26649,3.28665 2.37615,2.22626 z"
+ id="path26-2"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><circle
+ class="cls-3"
+ cx="125.18409"
+ cy="122.13319"
+ r="9.9654207"
+ id="circle28-3"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /></g></g><g
+ id="g329-5"
+ transform="matrix(0.25773706,0,0,0.25773706,41.303976,108.42714)"
+ style="stroke-width:1.02656"><g
+ id="g1663-6"
+ transform="matrix(1.7099534,0,0,1.7099534,-88.607712,-87.994557)"
+ style="stroke-width:1.02656"><path
+ d="m 138.33068,100.19817 a 8.327649,8.327649 0 0 1 -2.77589,-0.288688 l -34.78736,-9.388036 a 8.4442361,8.4442361 0 0 1 -2.620433,-1.238044 z"
+ id="path6-9"
+ style="stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 85.377935,159.27452 5.163143,-0.0333 h 0.06662 q 2.864711,0 2.864711,2.69816 v 8.69407 a 24.849705,24.849705 0 0 1 -8.649651,1.43235 q -4.730105,0 -7.128468,-3.21447 -2.398363,-3.21447 -2.398363,-8.76068 0,-5.55177 2.981299,-8.62745 a 9.7600046,9.7600046 0 0 1 7.29502,-3.08123 13.368653,13.368653 0 0 1 7.811335,2.43167 3.9250986,3.9250986 0 0 1 -0.682867,1.76547 4.7634152,4.7634152 0 0 1 -1.282458,1.33242 9.798867,9.798867 0 0 0 -5.679457,-1.96533 5.3574542,5.3574542 0 0 0 -4.480275,2.04861 q -1.598909,2.03749 -1.598909,6.41229 0,8.22771 6.062529,8.22771 a 16.910679,16.910679 0 0 0 3.697476,-0.43303 v -3.16451 q 0,-1.49898 0.06662,-2.22071 h -2.442777 a 2.2873276,2.2873276 0 0 1 -1.515632,-0.41638 1.6655298,1.6655298 0 0 1 -0.483004,-1.33242 5.7072154,5.7072154 0 0 1 0.333106,-1.79322 z"
+ id="path8-3"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 111.07151,169.73404 a 4.3137222,4.3137222 0 0 1 -0.55518,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05902,-1.95422 6.7453957,6.7453957 0 0 1 -4.76342,2.13188 q -2.564913,0 -3.886233,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.299113,-3.4643 q 0,-2.77588 1.815427,-4.21379 a 7.3338829,7.3338829 0 0 1 4.669039,-1.3935 q 1.53228,0 2.89802,0.13325 v -0.99932 q 0,-2.63154 -2.53161,-2.63154 -1.79877,0 -5.096518,1.19918 a 4.674587,4.674587 0 0 1 -1.110353,-2.96464 18.581761,18.581761 0 0 1 7.217291,-1.49898 5.8682167,5.8682167 0 0 1 4.0639,1.39905 q 1.56559,1.39904 1.56559,4.23044 v 6.79537 q -0.0111,1.83208 0.9216,2.59822 z m -8.36096,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06525,0.68842 2.3928111,2.3928111 0 0 0 -0.69953,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.55518 z"
+ id="path10-7"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 113.76966,157.00939 a 3.986168,3.986168 0 0 1 0.55518,-1.21583 3.3310596,3.3310596 0 0 1 0.84942,-0.94935 4.1638245,4.1638245 0 0 1 3.51427,2.96464 q 1.33242,-2.96464 4.29707,-2.96464 a 10.215249,10.215249 0 0 1 1.93201,0.23317 7.4782288,7.4782288 0 0 1 -0.99932,3.88624 8.4497879,8.4497879 0 0 0 -1.49897,-0.19987 q -2.03195,0 -3.26444,2.16519 v 10.64829 a 11.575432,11.575432 0 0 1 -2.03195,0.16655 12.769062,12.769062 0 0 1 -2.09857,-0.16655 v -11.15905 q -0.0222,-2.40947 -1.2547,-3.40879 z"
+ id="path12-4"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 140.38483,169.73404 a 4.3137222,4.3137222 0 0 1 -0.58293,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05348,-1.95422 6.7453957,6.7453957 0 0 1 -4.76341,2.13188 q -2.56492,0 -3.88624,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.29911,-3.4643 q 0,-2.77588 1.81543,-4.21379 a 7.3338829,7.3338829 0 0 1 4.64682,-1.4157 q 1.53229,0 2.89803,0.13324 v -0.99932 q 0,-2.63153 -2.53161,-2.63153 -1.79877,0 -5.09652,1.19918 a 4.674587,4.674587 0 0 1 -1.11035,-2.96465 18.581761,18.581761 0 0 1 7.21729,-1.49897 5.8682167,5.8682167 0 0 1 4.0639,1.39904 q 1.56559,1.39905 1.56559,4.23045 v 6.81757 q 0.0333,1.83208 0.96601,2.59822 z m -8.37206,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06526,0.69952 2.3928111,2.3928111 0 0 0 -0.69952,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.54408 z"
+ id="path14-5"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 144.48203,169.6008 q -1.49897,-2.29843 -1.49897,-6.34567 0,-4.04724 1.8987,-6.34567 a 5.740526,5.740526 0 0 1 4.56355,-2.29843 6.4400486,6.4400486 0 0 1 4.49693,1.66553 3.7696491,3.7696491 0 0 1 2.63154,-1.43235 3.1200925,3.1200925 0 0 1 0.88273,0.93269 3.8862362,3.8862362 0 0 1 0.55518,1.16587 q -0.9327,0.79946 -0.9327,2.86472 v 9.438 q 0,5.29638 -1.73215,7.49488 -1.73215,2.1985 -5.69611,2.22071 a 16.100121,16.100121 0 0 1 -5.9626,-1.11036 4.4802752,4.4802752 0 0 1 1.03263,-3.03126 10.892565,10.892565 0 0 0 4.48028,1.03263 q 2.18184,0 3.0146,-1.11035 a 4.9965894,4.9965894 0 0 0 0.83277,-3.06458 v -1.33242 a 6.4011862,6.4011862 0 0 1 -4.16383,1.56559 4.9188647,4.9188647 0 0 1 -4.40255,-2.30953 z m 8.56083,-2.69816 v -7.72806 a 4.2915151,4.2915151 0 0 0 -2.86471,-1.36573 2.4039147,2.4039147 0 0 0 -2.18185,1.43235 8.6885138,8.6885138 0 0 0 -0.7828,4.09721 q 0,2.66485 0.71618,3.93065 a 2.1318781,2.1318781 0 0 0 1.88205,1.2658 4.2304457,4.2304457 0 0 0 3.23113,-1.63222 z"
+ id="path16-2"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 174.20619,164.67083 h -9.32697 a 5.6405943,5.6405943 0 0 0 0.88273,3.04792 q 0.7828,1.0826 2.74813,1.0826 a 10.120869,10.120869 0 0 0 4.36369,-1.16587 4.3803434,4.3803434 0 0 1 1.19918,2.5316 10.759323,10.759323 0 0 1 -6.41229,1.8987 q -3.74744,0 -5.37966,-2.43167 -1.63222,-2.43167 -1.63222,-6.2957 0,-3.88624 1.79877,-6.2957 a 6.0181143,6.0181143 0 0 1 5.14649,-2.43168 q 3.33106,0 5.14648,2.01529 a 7.3449864,7.3449864 0 0 1 1.79878,5.07987 13.04665,13.04665 0 0 1 -0.33311,2.96464 z m -6.42895,-7.06184 q -2.73146,0 -2.93133,4.13051 h 5.79605 v -0.39973 a 4.7245529,4.7245529 0 0 0 -0.69953,-2.69816 2.4316735,2.4316735 0 0 0 -2.14298,-1.03262 z"
+ id="path18-5"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ id="path24-3-6-4"
+ style="fill:#ffd952;fill-opacity:1;stroke-width:0.569924"
+ d="m 124.80273,70.162462 a 11.0036,11.0036 0 0 0 -4.33203,0.935547 L 76.261719,90.656602 a 1.5989086,1.5989086 0 0 0 -0.837891,2.138672 0.77169547,0.77169547 0 0 0 0.06641,0.177735 l 7.09375,14.021481 h 6.15625 l -0.875,-4.88867 c -0.07217,-0.39418 -0.711263,-3.187532 -1.316406,-5.197264 l 20.691398,6.462894 c 0.27198,1.28839 0.63292,2.49204 1.0625,3.62304 h 33.54883 c 0.36964,-1.13128 0.66138,-2.33705 0.85938,-3.62304 l 20.64648,-6.445316 c -0.60514,2.009734 -1.23639,4.785506 -1.30859,5.179686 l -0.875,4.88867 h 6.15429 l 7.02735,-13.894528 0.0664,-0.126953 0.0684,-0.171875 a 0.10548355,0.10548355 0 0 0 0,-0.04492 1.4878733,1.4878733 0 0 0 0.0664,-0.515625 1.5822533,1.5822533 0 0 0 -0.99414,-1.583985 L 129.35352,71.098009 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ id="path24-3-7"
+ style="fill:#49c8fa;fill-opacity:1;stroke-width:0.569924"
+ d="M 124.80273,79.416133 A 11.0036,11.0036 0 0 0 120.4707,80.35168 L 76.261719,99.910272 a 1.5989086,1.5989086 0 0 0 -0.837891,2.136718 0.77169547,0.77169547 0 0 0 0.06641,0.17773 l 3.847657,7.60352 h 8.175781 c -0.257897,-1.08856 -0.591943,-2.42953 -0.964844,-3.66797 l 11.744141,3.66797 h 53.371087 l 11.69336,-3.65039 c -0.37193,1.23522 -0.70076,2.56719 -0.95703,3.65039 h 8.17383 l 3.78125,-7.47656 0.0664,-0.12696 0.0684,-0.17187 a 0.10548355,0.10548355 0 0 0 0,-0.0449 1.4878733,1.4878733 0 0 0 0.0664,-0.51563 1.5822533,1.5822533 0 0 0 -0.99414,-1.582028 L 129.35352,80.35168 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ class="cls-2"
+ d="m 174.55595,110.92974 a 1.4878733,1.4878733 0 0 1 -0.0666,0.51631 0.10548355,0.10548355 0 0 1 0,0.0444 l -0.0666,0.17211 v 0 l -0.0666,0.12769 -10.69826,21.15223 c -1.48787,2.93688 -4.22489,2.84806 -3.76409,-0.12214 l 2.15408,-12.02512 c 0.0722,-0.39418 0.70508,-3.17006 1.31022,-5.1798 l -20.64702,6.4456 c -3.24223,21.05785 -30.95109,21.40761 -35.47023,0 l -20.691432,-6.46226 c 0.605143,2.00974 1.243596,4.80228 1.315769,5.19646 l 2.154085,12.02512 c 0.460796,2.9702 -2.276224,3.05902 -3.764098,0.12214 L 75.49024,111.66257 a 0.77169547,0.77169547 0 0 1 -0.06662,-0.17766 1.5989086,1.5989086 0 0 1 0.838317,-2.13743 L 120.47065,89.788613 a 11.0036,11.0036 0 0 1 8.88282,0 l 44.20871,19.558867 a 1.5822533,1.5822533 0 0 1 0.99377,1.58226 z"
+ id="path24-4"
+ style="fill:#ffd952;stroke-width:0.569924" /><path
+ class="cls-3"
+ d="m 139.0413,114.61611 19.11473,-7.69475 a 0.81055784,0.81055784 0 0 0 0,-1.50453 c -2.2207,-0.92714 -4.96328,-1.99308 -7.65033,-3.10899 -0.49411,-0.20541 -5.17425,3.15341 -5.60173,3.49762 l -8.23882,6.58439 c -1.99309,1.67108 -0.26649,3.28665 2.37615,2.22626 z"
+ id="path26-4"
+ style="fill:#45c8ff;stroke-width:0.569924" /><circle
+ class="cls-3"
+ cx="125.18409"
+ cy="122.13319"
+ r="9.9654207"
+ id="circle28-30"
+ style="fill:#45c8ff;stroke-width:0.569924" /><path
+ d="m 138.33068,100.19817 a 8.327649,8.327649 0 0 1 -2.77589,-0.288688 l -34.78736,-9.388036 a 8.4442361,8.4442361 0 0 1 -2.620433,-1.238044 z"
+ id="path6-0-7"
+ style="stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 85.377935,159.27452 5.163143,-0.0333 h 0.06662 q 2.864711,0 2.864711,2.69816 v 8.69407 a 24.849705,24.849705 0 0 1 -8.649651,1.43235 q -4.730105,0 -7.128468,-3.21447 -2.398363,-3.21447 -2.398363,-8.76068 0,-5.55177 2.981299,-8.62745 a 9.7600046,9.7600046 0 0 1 7.29502,-3.08123 13.368653,13.368653 0 0 1 7.811335,2.43167 3.9250986,3.9250986 0 0 1 -0.682867,1.76547 4.7634152,4.7634152 0 0 1 -1.282458,1.33242 9.798867,9.798867 0 0 0 -5.679457,-1.96533 5.3574542,5.3574542 0 0 0 -4.480275,2.04861 q -1.598909,2.03749 -1.598909,6.41229 0,8.22771 6.062529,8.22771 a 16.910679,16.910679 0 0 0 3.697476,-0.43303 v -3.16451 q 0,-1.49898 0.06662,-2.22071 h -2.442777 a 2.2873276,2.2873276 0 0 1 -1.515632,-0.41638 1.6655298,1.6655298 0 0 1 -0.483004,-1.33242 5.7072154,5.7072154 0 0 1 0.333106,-1.79322 z"
+ id="path8-6-8"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 111.07151,169.73404 a 4.3137222,4.3137222 0 0 1 -0.55518,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05902,-1.95422 6.7453957,6.7453957 0 0 1 -4.76342,2.13188 q -2.564913,0 -3.886233,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.299113,-3.4643 q 0,-2.77588 1.815427,-4.21379 a 7.3338829,7.3338829 0 0 1 4.669039,-1.3935 q 1.53228,0 2.89802,0.13325 v -0.99932 q 0,-2.63154 -2.53161,-2.63154 -1.79877,0 -5.096518,1.19918 a 4.674587,4.674587 0 0 1 -1.110353,-2.96464 18.581761,18.581761 0 0 1 7.217291,-1.49898 5.8682167,5.8682167 0 0 1 4.0639,1.39905 q 1.56559,1.39904 1.56559,4.23044 v 6.79537 q -0.0111,1.83208 0.9216,2.59822 z m -8.36096,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06525,0.68842 2.3928111,2.3928111 0 0 0 -0.69953,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.55518 z"
+ id="path10-2-6"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 113.76966,157.00939 a 3.986168,3.986168 0 0 1 0.55518,-1.21583 3.3310596,3.3310596 0 0 1 0.84942,-0.94935 4.1638245,4.1638245 0 0 1 3.51427,2.96464 q 1.33242,-2.96464 4.29707,-2.96464 a 10.215249,10.215249 0 0 1 1.93201,0.23317 7.4782288,7.4782288 0 0 1 -0.99932,3.88624 8.4497879,8.4497879 0 0 0 -1.49897,-0.19987 q -2.03195,0 -3.26444,2.16519 v 10.64829 a 11.575432,11.575432 0 0 1 -2.03195,0.16655 12.769062,12.769062 0 0 1 -2.09857,-0.16655 v -11.15905 q -0.0222,-2.40947 -1.2547,-3.40879 z"
+ id="path12-6-8"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 140.38483,169.73404 a 4.3137222,4.3137222 0 0 1 -0.58293,1.18253 4.0305821,4.0305821 0 0 1 -0.84942,0.94935 3.7640973,3.7640973 0 0 1 -3.05348,-1.95422 6.7453957,6.7453957 0 0 1 -4.76341,2.13188 q -2.56492,0 -3.88624,-1.49898 a 5.1298318,5.1298318 0 0 1 -1.29911,-3.4643 q 0,-2.77588 1.81543,-4.21379 a 7.3338829,7.3338829 0 0 1 4.64682,-1.4157 q 1.53229,0 2.89803,0.13324 v -0.99932 q 0,-2.63153 -2.53161,-2.63153 -1.79877,0 -5.09652,1.19918 a 4.674587,4.674587 0 0 1 -1.11035,-2.96465 18.581761,18.581761 0 0 1 7.21729,-1.49897 5.8682167,5.8682167 0 0 1 4.0639,1.39904 q 1.56559,1.39905 1.56559,4.23045 v 6.81757 q 0.0333,1.83208 0.96601,2.59822 z m -8.37206,-0.83276 a 4.7134493,4.7134493 0 0 0 3.33106,-1.59891 v -2.94244 a 22.368065,22.368065 0 0 0 -2.53161,-0.13324 2.775883,2.775883 0 0 0 -2.06526,0.69952 2.3928111,2.3928111 0 0 0 -0.69952,1.76546 2.3539488,2.3539488 0 0 0 0.55518,1.66553 1.8431863,1.8431863 0 0 0 1.41015,0.54408 z"
+ id="path14-1-8"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 144.48203,169.6008 q -1.49897,-2.29843 -1.49897,-6.34567 0,-4.04724 1.8987,-6.34567 a 5.740526,5.740526 0 0 1 4.56355,-2.29843 6.4400486,6.4400486 0 0 1 4.49693,1.66553 3.7696491,3.7696491 0 0 1 2.63154,-1.43235 3.1200925,3.1200925 0 0 1 0.88273,0.93269 3.8862362,3.8862362 0 0 1 0.55518,1.16587 q -0.9327,0.79946 -0.9327,2.86472 v 9.438 q 0,5.29638 -1.73215,7.49488 -1.73215,2.1985 -5.69611,2.22071 a 16.100121,16.100121 0 0 1 -5.9626,-1.11036 4.4802752,4.4802752 0 0 1 1.03263,-3.03126 10.892565,10.892565 0 0 0 4.48028,1.03263 q 2.18184,0 3.0146,-1.11035 a 4.9965894,4.9965894 0 0 0 0.83277,-3.06458 v -1.33242 a 6.4011862,6.4011862 0 0 1 -4.16383,1.56559 4.9188647,4.9188647 0 0 1 -4.40255,-2.30953 z m 8.56083,-2.69816 v -7.72806 a 4.2915151,4.2915151 0 0 0 -2.86471,-1.36573 2.4039147,2.4039147 0 0 0 -2.18185,1.43235 8.6885138,8.6885138 0 0 0 -0.7828,4.09721 q 0,2.66485 0.71618,3.93065 a 2.1318781,2.1318781 0 0 0 1.88205,1.2658 4.2304457,4.2304457 0 0 0 3.23113,-1.63222 z"
+ id="path16-8-4"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-1"
+ d="m 174.20619,164.67083 h -9.32697 a 5.6405943,5.6405943 0 0 0 0.88273,3.04792 q 0.7828,1.0826 2.74813,1.0826 a 10.120869,10.120869 0 0 0 4.36369,-1.16587 4.3803434,4.3803434 0 0 1 1.19918,2.5316 10.759323,10.759323 0 0 1 -6.41229,1.8987 q -3.74744,0 -5.37966,-2.43167 -1.63222,-2.43167 -1.63222,-6.2957 0,-3.88624 1.79877,-6.2957 a 6.0181143,6.0181143 0 0 1 5.14649,-2.43168 q 3.33106,0 5.14648,2.01529 a 7.3449864,7.3449864 0 0 1 1.79878,5.07987 13.04665,13.04665 0 0 1 -0.33311,2.96464 z m -6.42895,-7.06184 q -2.73146,0 -2.93133,4.13051 h 5.79605 v -0.39973 a 4.7245529,4.7245529 0 0 0 -0.69953,-2.69816 2.4316735,2.4316735 0 0 0 -2.14298,-1.03262 z"
+ id="path18-7-3"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><path
+ id="path24-3-6-9-1"
+ style="fill:#ff9329;fill-opacity:1;stroke-width:0.569924"
+ d="m 124.80273,70.162462 a 11.0036,11.0036 0 0 0 -4.33203,0.935547 L 76.261719,90.656602 a 1.5989086,1.5989086 0 0 0 -0.837891,2.138672 0.77169547,0.77169547 0 0 0 0.06641,0.177735 l 7.09375,14.021481 h 6.15625 l -0.875,-4.88867 c -0.07217,-0.39418 -0.711263,-3.187532 -1.316406,-5.197264 l 20.691398,6.462894 c 0.27198,1.28839 0.63292,2.49204 1.0625,3.62304 h 33.54883 c 0.36964,-1.13128 0.66138,-2.33705 0.85938,-3.62304 l 20.64648,-6.445316 c -0.60514,2.009734 -1.23639,4.785506 -1.30859,5.179686 l -0.875,4.88867 h 6.15429 l 7.02735,-13.894528 0.0664,-0.126953 0.0684,-0.171875 a 0.10548355,0.10548355 0 0 0 0,-0.04492 1.4878733,1.4878733 0 0 0 0.0664,-0.515625 1.5822533,1.5822533 0 0 0 -0.99414,-1.583985 L 129.35352,71.098009 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ id="path24-3-2-4"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924"
+ d="M 124.80273,79.416133 A 11.0036,11.0036 0 0 0 120.4707,80.35168 L 76.261719,99.910272 a 1.5989086,1.5989086 0 0 0 -0.837891,2.136718 0.77169547,0.77169547 0 0 0 0.06641,0.17773 l 3.847657,7.60352 h 8.175781 c -0.257897,-1.08856 -0.591943,-2.42953 -0.964844,-3.66797 l 11.744141,3.66797 h 53.371087 l 11.69336,-3.65039 c -0.37193,1.23522 -0.70076,2.56719 -0.95703,3.65039 h 8.17383 l 3.78125,-7.47656 0.0664,-0.12696 0.0684,-0.17187 a 0.10548355,0.10548355 0 0 0 0,-0.0449 1.4878733,1.4878733 0 0 0 0.0664,-0.51563 1.5822533,1.5822533 0 0 0 -0.99414,-1.582028 L 129.35352,80.35168 a 11.0036,11.0036 0 0 0 -4.55079,-0.935547 z" /><path
+ class="cls-2"
+ d="m 174.55595,110.92974 a 1.4878733,1.4878733 0 0 1 -0.0666,0.51631 0.10548355,0.10548355 0 0 1 0,0.0444 l -0.0666,0.17211 v 0 l -0.0666,0.12769 -10.69826,21.15223 c -1.48787,2.93688 -4.22489,2.84806 -3.76409,-0.12214 l 2.15408,-12.02512 c 0.0722,-0.39418 0.70508,-3.17006 1.31022,-5.1798 l -20.64702,6.4456 c -3.24223,21.05785 -30.95109,21.40761 -35.47023,0 l -20.691432,-6.46226 c 0.605143,2.00974 1.243596,4.80228 1.315769,5.19646 l 2.154085,12.02512 c 0.460796,2.9702 -2.276224,3.05902 -3.764098,0.12214 L 75.49024,111.66257 a 0.77169547,0.77169547 0 0 1 -0.06662,-0.17766 1.5989086,1.5989086 0 0 1 0.838317,-2.13743 L 120.47065,89.788613 a 11.0036,11.0036 0 0 1 8.88282,0 l 44.20871,19.558867 a 1.5822533,1.5822533 0 0 1 0.99377,1.58226 z"
+ id="path24-0-9"
+ style="fill:#ff9329;fill-opacity:1;stroke-width:0.569924" /><path
+ class="cls-3"
+ d="m 139.0413,114.61611 19.11473,-7.69475 a 0.81055784,0.81055784 0 0 0 0,-1.50453 c -2.2207,-0.92714 -4.96328,-1.99308 -7.65033,-3.10899 -0.49411,-0.20541 -5.17425,3.15341 -5.60173,3.49762 l -8.23882,6.58439 c -1.99309,1.67108 -0.26649,3.28665 2.37615,2.22626 z"
+ id="path26-2-2"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /><circle
+ class="cls-3"
+ cx="125.18409"
+ cy="122.13319"
+ r="9.9654207"
+ id="circle28-3-0"
+ style="fill:#4e4e4e;fill-opacity:1;stroke-width:0.569924" /></g></g><text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="118.24205"
+ y="182.54555"
+ id="text1882"><tspan
+ sodipodi:role="line"
+ id="tspan1880"
+ x="118.24205"
+ y="182.54555"
+ style="font-size:5.64444px;stroke-width:0.264583px">*(not really a database)</tspan></text></g><g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 2"
+ style="display:inline"><rect
+ style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect13086-2"
+ width="154.11569"
+ height="77.61647"
+ x="33.112736"
+ y="109.40408" /><image
+ width="65.039139"
+ height="65.039139"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABmJLR0QA/wD/AP+gvaeTAAAgAElE QVR4nO3debxddX3v/9fnG4aQAYgQhqiAcQASLWIcqqBYxKEK1TpUH3qx2sd1eLS92tbWsbe1va11 6PWn1qpwb2uLQyveqjU4IbaCwWolCMUEEA2DSoCACZBAmL6f3x9rHziJCRnY53z32ev1fDzWI2ft nCw++3D2+r7XWt8BJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS JEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmS JEmSJEmSJEmSJI2iaF2ApKHbG5gzaX8PYP6k/QD23+rfbABy0v6twN2T9m8D7hhijZIaMwBIbc0H DgEOBPYb7O8HzAXmllL2Hbw2NzPn0jXc8yb+HlhA19jvPc1130EXCtYDmwbbRmBDREzs31prvXnw fZuAm+mCxc3AjcB1g31JDRgApOGaCzyYrkFfOPjzkFLKgcCBmbkQOHjS3013wz1q7qALA+uA6yLi RuDGWus64PrB6zcOtp/RBQlJQ2AAkHbNAmAxsAg4tJSyGFicmROvHYKfq6m0GbgWWBMRa2qta4C1 E68BVwG1XXnSzOGJStrSHODIwfaoUsoRmXkYMLH1/Yp91N0BXANcExHX1FqvAn4IXD7YbmtYmzRS DADqq4kr+aWllCV0V/FLgaOA0rQyTaW1wKrB3YPVwCq6OwdXsmUnSGnsGQA07g4AlgHHllKOzMyj 6a7uF7QtSyNmPXB5RKyutV4OXASsBG5qW5Y0dQwAGif7AY8BlpVSlmXmMuBo/D3X7lsLrMzMlXSB 4D/pOidKM54nRs1U+wOPxsZe089QoLHgyVIzxcOAp5VSnp6ZT6N7fi+NijURcV6t9ZvAuXSjEaSR ZgDQqFoMHF9KOS4zn0kXAKSZYm1ErKi1ngOcD6zGToYaMQYAjYqjgRNKKU/LzBPoxtRL4+LaiPhm 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 P2vmuIUtH0lsb+TDgklfz6JrvDVzXJSZH6Obvc/JsbRDBgDtjmWllNdm5ivwKk5qaXNELK+1no4d +7SLDAB6IBYAL42Il9OtbubvkzT1KrAiMz8NfIb+9iHRA+QJW8PyELqFh04FlrUuRhpDqzPzs8An gB+3LkYznwFAU+GXSikvz8yX0g3ZkrR7roqIz9RaPwVc0roYjRcDgKbaUuDkiDgFeAr+zkk7snrw XP8s4Hy6KXulofNkrOm0mG5Fwucys9dKl4bpDuBbmfll4AvAlY3rUU8YANTKHOAppZRTMvP5dLO5 SX1xXUR8vda6HPga3VBNaVoZADQqjgSeVko5ITOfTjftqzQufhoR36y1ngecC/ywdUGSAUCjahFw XCnlpMw8nm5BF2mmWBsRK2qt59A9x1/VuiBpawYAzRSHAycM7hA8DXhE64KkSa6IiPNqrefSXeFf 07ogaUcMAJqp9gMeQzcr4bLMXAYcjb/TmnprgZWZuRJYCXwXuKFtSdKu82SpcbIv8EsYCjQ8Wzf2 36FbuEma8TwxatwtAB4HHFtKOTIzjwaOoluRTppwE3BZRFxaa70MuIiuwXeaXY0tA4D6agHdvARL SylLgMWZuZRuNMKsppVpKq0FVkXEmlrrarrOeWsGm9QrBgBpS/vQhYAjgUeVUg7PzMOAw+g6Is5u WZx2aDNwNXBNRFxTa72absjd5YPt9pbFSaPEACDtmgV0QxQPBRaXUhbT3T2YeO0IoLQrb+ytp7uK v3ZwFT9x9b4WuBa4im61PEk7YACQhmsfuiBwEHAgsBA4qJRyEHBgZi4cvHbw4O/3aVXoiLgduBG4 HlgXEeuAG2ut19N1tls36e+vwyt4aWgMAFJb87gvEMwH9h+8NheYW0pZMPE1MC8z96ebRnku3aiH fYE96YZFTqebgbvoprC9BdgE3BYRG4CNg/1Ntdb1E18PXt8A3ErXoN8weF1SAwYAafwEXZCYbMEO 9tfvYH8DrkonSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk SZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIkSZIk SZIkSZIkSdKU+/8B8UD79J00AfcAAAAASUVORK5CYII= "
+ id="image7444"
+ x="42.921436"
+ y="103.45746"
+ style="stroke-width:2.08285" /><image
+ width="34.06498"
+ height="34.06498"
+ preserveAspectRatio="none"
+ xlink:href="data:image/png;base64,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 "
+ id="image13044"
+ x="74.692276"
+ y="130.02034"
+ style="stroke-width:3.97671" /><text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;stroke-width:0.264583"
+ x="73.229004"
+ y="183.68733"
+ id="text4115-3-5"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;stroke-width:0.264583"
+ x="73.229004"
+ y="183.68733"
+ id="tspan4117-6-6">Database</tspan></text><rect
+ style="fill:#ffffff;fill-opacity:0.733011;stroke:none;stroke-width:1.265;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect13086"
+ width="130.82137"
+ height="113.0019"
+ x="37.281914"
+ y="74.605423" /></g><g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Layer 3"
+ style="display:none;fill:#ffffff"
+ sodipodi:insensitive="true"><rect
+ style="display:inline;fill:#ffffff;fill-opacity:1;stroke-width:1.2745"
+ id="rect2004"
+ width="172.00893"
+ height="19.827272"
+ x="80.964157"
+ y="52.231174" /><rect
+ style="fill:#ffffff;fill-opacity:0.703087;stroke-width:1.2745"
+ id="rect2006"
+ width="185.24678"
+ height="32.308674"
+ x="77.66877"
+ y="16.311932" /><text
+ xml:space="preserve"
+ style="font-size:12.7px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke-width:0.264583"
+ x="169.47803"
+ y="66.103424"
+ id="text4115-0"><tspan
+ sodipodi:role="line"
+ style="font-size:12.7px;fill:#000000;fill-opacity:1;stroke-width:0.264583"
+ x="169.47803"
+ y="66.103424"
+ id="tspan4117-4"><tspan
+ style="font-style:normal;font-weight:bold;fill:#000000;fill-opacity:1"
+ id="tspan2744">Custom</tspan> user-facing application</tspan></text><path
+ style="fill:none;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.05833;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
+ d="M 81.62001,34.797981 H 251.8384"
+ id="path2876" /></g></svg>
diff --git a/doc/talks/2023-01-18-tocatta/talk.pdf b/doc/talks/2023-01-18-tocatta/talk.pdf
new file mode 100644
index 00000000..97966061
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/talk.pdf
Binary files differ
diff --git a/doc/talks/2023-01-18-tocatta/talk.tex b/doc/talks/2023-01-18-tocatta/talk.tex
new file mode 100644
index 00000000..43399d8e
--- /dev/null
+++ b/doc/talks/2023-01-18-tocatta/talk.tex
@@ -0,0 +1,935 @@
+%\nonstopmode
+\documentclass[aspectratio=169]{beamer}
+\usepackage[utf8]{inputenc}
+% \usepackage[frenchb]{babel}
+\usepackage{amsmath}
+\usepackage{mathtools}
+\usepackage{breqn}
+\usepackage{multirow}
+\usetheme{boxes}
+\usepackage{graphicx}
+\usepackage{import}
+\usepackage{adjustbox}
+%\useoutertheme[footline=authortitle,subsection=false]{miniframes}
+%\useoutertheme[footline=authorinstitute,subsection=false]{miniframes}
+\useoutertheme{infolines}
+\setbeamertemplate{headline}{}
+
+\beamertemplatenavigationsymbolsempty
+
+\definecolor{TitleOrange}{RGB}{255,137,0}
+\setbeamercolor{title}{fg=TitleOrange}
+\setbeamercolor{frametitle}{fg=TitleOrange}
+
+\definecolor{ListOrange}{RGB}{255,145,5}
+\setbeamertemplate{itemize item}{\color{ListOrange}$\blacktriangleright$}
+
+\definecolor{verygrey}{RGB}{70,70,70}
+\setbeamercolor{normal text}{fg=verygrey}
+
+
+\usepackage{tabu}
+\usepackage{multicol}
+\usepackage{vwcol}
+\usepackage{stmaryrd}
+\usepackage{graphicx}
+
+\usepackage[normalem]{ulem}
+
+\AtBeginSection[]{
+ \begin{frame}
+ \vfill
+ \centering
+ \begin{beamercolorbox}[sep=8pt,center,shadow=true,rounded=true]{title}
+ \usebeamerfont{title}\insertsectionhead\par%
+ \end{beamercolorbox}
+ \vfill
+ \end{frame}
+}
+
+\title{Garage}
+\subtitle{a lightweight and robust geo-distributed data storage system}
+\author{Alex Auvolat, Deuxfleurs Association}
+\date{Inria, 2023-01-18}
+
+\begin{document}
+
+\begin{frame}
+ \centering
+ \includegraphics[width=.3\linewidth]{../../sticker/Garage.pdf}
+ \vspace{1em}
+
+ {\large\bf Alex Auvolat, Deuxfleurs Association}
+ \vspace{1em}
+
+ \url{https://garagehq.deuxfleurs.fr/}
+
+ Matrix channel: \texttt{\#garage:deuxfleurs.fr}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Who I am}
+ \begin{columns}[t]
+ \begin{column}{.2\textwidth}
+ \centering
+ \adjincludegraphics[width=.4\linewidth, valign=t]{assets/alex.jpg}
+ \end{column}
+ \begin{column}{.6\textwidth}
+ \textbf{Alex Auvolat}\\
+ PhD; co-founder of Deuxfleurs
+ \end{column}
+ \begin{column}{.2\textwidth}
+ ~
+ \end{column}
+ \end{columns}
+ \vspace{2em}
+
+ \begin{columns}[t]
+ \begin{column}{.2\textwidth}
+ \centering
+ \adjincludegraphics[width=.5\linewidth, valign=t]{assets/deuxfleurs.pdf}
+ \end{column}
+ \begin{column}{.6\textwidth}
+ \textbf{Deuxfleurs}\\
+ A non-profit self-hosting collective,\\
+ member of the CHATONS network
+ \end{column}
+ \begin{column}{.2\textwidth}
+ \centering
+ \adjincludegraphics[width=.7\linewidth, valign=t]{assets/logo_chatons.png}
+ \end{column}
+ \end{columns}
+
+\end{frame}
+
+\begin{frame}
+ \frametitle{Our objective at Deuxfleurs}
+
+ \begin{center}
+ \textbf{Promote self-hosting and small-scale hosting\\
+ as an alternative to large cloud providers}
+ \end{center}
+ \vspace{2em}
+ \visible<2->{
+ Why is it hard?
+ }
+ \visible<3->{
+ \vspace{2em}
+ \begin{center}
+ \textbf{\underline{Resilience}}\\
+ {\footnotesize (we want good uptime/availability with low supervision)}
+ \end{center}
+ }
+\end{frame}
+
+\begin{frame}
+ \frametitle{How to make a \underline{stable} system}
+
+ Enterprise-grade systems typically employ:
+ \vspace{1em}
+ \begin{itemize}
+ \item RAID
+ \item Redundant power grid + UPS
+ \item Redundant Internet connections
+ \item Low-latency links
+ \item ...
+ \end{itemize}
+ \vspace{1em}
+ $\to$ it's costly and only worth it at DC scale
+\end{frame}
+
+\begin{frame}
+ \frametitle{How to make a \underline{resilient} system}
+
+ \only<1,4-5>{
+ Instead, we use:
+ \vspace{1em}
+ \begin{itemize}
+ \item \textcolor<2->{gray}{Commodity hardware (e.g. old desktop PCs)}
+ \vspace{.5em}
+ \item<4-> \textcolor<5->{gray}{Commodity Internet (e.g. FTTB, FTTH) and power grid}
+ \vspace{.5em}
+ \item<5-> \textcolor<6->{gray}{\textbf{Geographical redundancy} (multi-site replication)}
+ \end{itemize}
+ }
+ \only<2>{
+ \begin{center}
+ \includegraphics[width=.8\linewidth]{assets/atuin.jpg}
+ \end{center}
+ }
+ \only<3>{
+ \begin{center}
+ \includegraphics[width=.8\linewidth]{assets/neptune.jpg}
+ \end{center}
+ }
+ \only<6>{
+ \begin{center}
+ \includegraphics[width=.5\linewidth]{assets/inframap.jpg}
+ \end{center}
+ }
+\end{frame}
+
+\begin{frame}
+ \frametitle{How to make this happen}
+ \begin{center}
+ \only<1>{\includegraphics[width=.8\linewidth]{assets/slide1.png}}%
+ \only<2>{\includegraphics[width=.8\linewidth]{assets/slide2.png}}%
+ \only<3>{\includegraphics[width=.8\linewidth]{assets/slide3.png}}%
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Distributed file systems are slow}
+ File systems are complex, for example:
+ \vspace{1em}
+ \begin{itemize}
+ \item Concurrent modification by several processes
+ \vspace{1em}
+ \item Folder hierarchies
+ \vspace{1em}
+ \item Other requirements of the POSIX spec (e.g.~locks)
+ \end{itemize}
+ \vspace{1em}
+ Coordination in a distributed system is costly
+
+ \vspace{1em}
+ Costs explode with commodity hardware / Internet connections\\
+ {\small (we experienced this!)}
+\end{frame}
+
+\begin{frame}
+ \frametitle{A simpler solution: object storage}
+ Only two operations:
+ \vspace{1em}
+ \begin{itemize}
+ \item Put an object at a key
+ \vspace{1em}
+ \item Retrieve an object from its key
+ \end{itemize}
+ \vspace{1em}
+ {\footnotesize (and a few others)}
+
+ \vspace{1em}
+ Sufficient for many applications!
+\end{frame}
+
+\begin{frame}
+ \frametitle{A simpler solution: object storage}
+ \begin{center}
+ \includegraphics[height=6em]{../2020-12-02_wide-team/img/Amazon-S3.jpg}
+ \hspace{3em}
+ \includegraphics[height=5em]{assets/minio.png}
+ \hspace{3em}
+ \includegraphics[height=6em]{../../logo/garage_hires_crop.png}
+ \end{center}
+ \vspace{1em}
+ S3: a de-facto standard, many compatible applications
+
+ \vspace{1em}
+
+ MinIO is self-hostable but not suited for geo-distributed deployments
+
+ \vspace{1em}
+
+ \textbf{Garage is a self-hosted drop-in replacement for the Amazon S3 object store}
+\end{frame}
+
+
+\begin{frame}
+ \frametitle{The data model of object storage}
+ Object storage is basically a key-value store:
+ \vspace{1em}
+
+ \begin{center}
+ \begin{tabular}{|l|p{8cm}|}
+ \hline
+ \textbf{Key: file path + name} & \textbf{Value: file data + metadata} \\
+ \hline
+ \hline
+ \texttt{index.html} &
+ \texttt{Content-Type: text/html; charset=utf-8} \newline
+ \texttt{Content-Length: 24929} \newline
+ \texttt{<binary blob>} \\
+ \hline
+ \texttt{img/logo.svg} &
+ \texttt{Content-Type: text/svg+xml} \newline
+ \texttt{Content-Length: 13429} \newline
+ \texttt{<binary blob>} \\
+ \hline
+ \texttt{download/index.html} &
+ \texttt{Content-Type: text/html; charset=utf-8} \newline
+ \texttt{Content-Length: 26563} \newline
+ \texttt{<binary blob>} \\
+ \hline
+ \end{tabular}
+ \end{center}
+
+\end{frame}
+
+\begin{frame}
+ \frametitle{Garage's architecture}
+ \begin{center}
+ \includegraphics[width=.35\linewidth]{assets/garage.drawio.pdf}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Two big problems}
+ \begin{enumerate}
+ \item \textbf{How to place data on different nodes?}\\
+ \vspace{1em}
+ \underline{Constraints:} heterogeneous hardware\\
+ \underline{Objective:} $n$ copies of everything, maximize usable capacity, maximize resilience\\
+ \vspace{1em}
+ $\to$ the Dynamo model + optimization algorithms
+ \vspace{2em}
+ \item<2-> \textbf{How to guarantee consistency?}\\
+ \vspace{1em}
+ \underline{Constraints:} slow network (geographical distance), node unavailability/crashes\\
+ \underline{Objective:} maximize availability, read-after-write guarantee\\
+ \vspace{1em}
+ $\to$ CRDTs, monotonicity, read and write quorums
+ \end{enumerate}
+\end{frame}
+
+\section{Problem 1: placing data}
+
+\begin{frame}
+ \frametitle{Key-value stores, upgraded: the Dynamo model}
+ \textbf{Two keys:}
+ \begin{itemize}
+ \item Partition key: used to divide data into partitions {\small (a.k.a.~shards)}
+ \item Sort key: used to identify items inside a partition
+ \end{itemize}
+
+ \vspace{1em}
+
+ \begin{center}
+ \begin{tabular}{|l|l|p{3cm}|}
+ \hline
+ \textbf{Partition key: bucket} & \textbf{Sort key: filename} & \textbf{Value} \\
+ \hline
+ \hline
+ \texttt{website} & \texttt{index.html} & (file data) \\
+ \hline
+ \texttt{website} & \texttt{img/logo.svg} & (file data) \\
+ \hline
+ \texttt{website} & \texttt{download/index.html} & (file data) \\
+ \hline
+ \hline
+ \texttt{backup} & \texttt{borg/index.2822} & (file data) \\
+ \hline
+ \texttt{backup} & \texttt{borg/data/2/2329} & (file data) \\
+ \hline
+ \texttt{backup} & \texttt{borg/data/2/2680} & (file data) \\
+ \hline
+ \hline
+ \texttt{private} & \texttt{qq3a2nbe1qjq0ebbvo6ocsp6co} & (file data) \\
+ \hline
+ \end{tabular}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Key-value stores, upgraded: the Dynamo model}
+ \begin{itemize}
+ \item Data with different partition keys is stored independently,\\
+ on a different set of nodes\\
+ \vspace{.5em}
+ $\to$ no easy way to list all partition keys\\
+ $\to$ no cross-shard transactions\\
+ \vspace{2em}
+ \item Placing data: hash the partition key, select nodes accordingly\\
+ \vspace{.5em}
+ $\to$ distributed hash table (DHT)
+ \vspace{2em}
+ \item For a given value of the partition key, items can be listed using their sort keys
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{How to spread files over different cluster nodes?}
+ \textbf{Consistent hashing (Dynamo):}
+ \vspace{1em}
+
+ \begin{center}
+ \only<1>{\includegraphics[width=.40\columnwidth]{assets/consistent_hashing_1.pdf}}%
+ \only<2>{\includegraphics[width=.40\columnwidth]{assets/consistent_hashing_2.pdf}}%
+ \only<3>{\includegraphics[width=.40\columnwidth]{assets/consistent_hashing_3.pdf}}%
+ \only<4>{\includegraphics[width=.40\columnwidth]{assets/consistent_hashing_4.pdf}}%
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Constraint: location-awareness}
+ \begin{center}
+ \includegraphics[width=\linewidth]{assets/location-aware.png}
+ \end{center}
+ \vspace{2em}
+ Garage replicates data on different zones when possible
+\end{frame}
+
+\begin{frame}
+ \frametitle{Constraint: location-awareness}
+ \begin{center}
+ \includegraphics[width=.8\linewidth]{assets/map.png}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Issues with consistent hashing}
+ \begin{itemize}
+ \item Consistent hashing doesn't dispatch data based on geographical location of nodes
+ \vspace{1em}
+ \item<2-> Geographically aware adaptation, try 1:\\
+ data quantities not well balanced between nodes
+ \vspace{1em}
+ \item<3-> Geographically aware adaptation, try 2:\\
+ too many reshuffles when adding/removing nodes
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{How to spread files over different cluster nodes?}
+ \textbf{Garage's method: build an index table}
+ \vspace{1em}
+
+ Realization: we can actually precompute an optimal solution
+ \vspace{1em}
+
+ \visible<2->{
+ \begin{center}
+ \begin{tabular}{|l|l|l|l|}
+ \hline
+ \textbf{Partition} & \textbf{Node 1} & \textbf{Node 2} & \textbf{Node 3} \\
+ \hline
+ \hline
+ Partition 0 & Io (jupiter) & Drosera (atuin) & Courgette (neptune) \\
+ \hline
+ Partition 1 & Datura (atuin) & Courgette (neptune) & Io (jupiter) \\
+ \hline
+ Partition 2 & Io(jupiter) & Celeri (neptune) & Drosera (atuin) \\
+ \hline
+ \hspace{1em}$\vdots$ & \hspace{1em}$\vdots$ & \hspace{1em}$\vdots$ & \hspace{1em}$\vdots$ \\
+ \hline
+ Partition 255 & Concombre (neptune) & Io (jupiter) & Drosera (atuin) \\
+ \hline
+ \end{tabular}
+ \end{center}
+ }
+ \vspace{1em}
+ \visible<3->{
+ The index table is built centrally using an optimal algorithm,\\
+ then propagated to all nodes
+ }
+\end{frame}
+
+\begin{frame}
+ \frametitle{The relationship between \emph{partition} and \emph{partition key}}
+ \begin{center}
+ \begin{tabular}{|l|l|l|l|}
+ \hline
+ \textbf{Partition key} & \textbf{Partition} & \textbf{Sort key} & \textbf{Value} \\
+ \hline
+ \hline
+ \texttt{website} & Partition 12 & \texttt{index.html} & (file data) \\
+ \hline
+ \texttt{website} & Partition 12 & \texttt{img/logo.svg} & (file data) \\
+ \hline
+ \texttt{website} & Partition 12 &\texttt{download/index.html} & (file data) \\
+ \hline
+ \hline
+ \texttt{backup} & Partition 42 & \texttt{borg/index.2822} & (file data) \\
+ \hline
+ \texttt{backup} & Partition 42 & \texttt{borg/data/2/2329} & (file data) \\
+ \hline
+ \texttt{backup} & Partition 42 & \texttt{borg/data/2/2680} & (file data) \\
+ \hline
+ \hline
+ \texttt{private} & Partition 42 & \texttt{qq3a2nbe1qjq0ebbvo6ocsp6co} & (file data) \\
+ \hline
+ \end{tabular}
+ \end{center}
+ \vspace{1em}
+ \textbf{To read or write an item:} hash partition key
+ \\ \hspace{5cm} $\to$ determine partition number (first 8 bits)
+ \\ \hspace{5cm} $\to$ find associated nodes
+\end{frame}
+
+\begin{frame}
+ \frametitle{Garage's internal data structures}
+ \centering
+ \includegraphics[width=.75\columnwidth]{assets/garage_tables.pdf}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Storing and retrieving files}
+ \begin{center}
+ \only<1>{\includegraphics[width=.45\linewidth]{assets/garage2a.drawio.pdf}}%
+ \only<2>{\includegraphics[width=.45\linewidth]{assets/garage2b.drawio.pdf}}%
+ \end{center}
+\end{frame}
+
+\section{Problem 2: ensuring consistency}
+
+\begin{frame}
+ \frametitle{Consensus vs weak consistency}
+
+ \hspace{1em}
+ \begin{minipage}{7cm}
+ \textbf{Consensus-based systems:}
+ \vspace{1em}
+ \begin{itemize}
+ \item \textbf{Leader-based:} a leader is elected to coordinate
+ all reads and writes
+ \vspace{1em}
+ \item \textbf{Linearizability} of all operations\\
+ (strongest consistency guarantee)
+ \vspace{1em}
+ \item Any sequential specification can be implemented as a \textbf{replicated state machine}
+ \vspace{1em}
+ \item \textbf{Costly}, the leader is a bottleneck;
+ leader elections on failure take time
+ \end{itemize}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{7cm} \visible<2->{
+ \textbf{Weakly consistent systems:}
+ \vspace{1em}
+ \begin{itemize}
+ \item \textbf{Nodes are equivalent}, any node
+ can originate a read or write operation
+ \vspace{1em}
+ \item \textbf{Read-after-write consistency} with quorums,
+ eventual consistency without
+ \vspace{1em}
+ \item \textbf{Operations have to commute}, i.e.~we
+ can only implement CRDTs
+ \vspace{1em}
+ \item \textbf{Fast}, no single bottleneck;\\
+ works the same with offline nodes
+ \end{itemize}
+ } \end{minipage}
+ \hspace{1em}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Consensus vs weak consistency}
+ \begin{center}
+ \textbf{From a theoretical point of view:}\\
+
+ \end{center}
+ \vspace{2em}
+
+ \hspace{1em}
+ \begin{minipage}{6.5cm}
+ \underline{Consensus-based systems:}
+
+ \vspace{1em}
+
+ Require \textbf{additional assumptions} such as a fault detector or a strong RNG\\
+ (FLP impossibility theorem)
+ \end{minipage}
+ \hfill
+ \begin{minipage}{6.5cm}
+ \underline{Weakly consistent systems:}
+
+ \vspace{1em}
+
+ Can be implemented in \textbf{any\\asynchronous message passing\\distributed system} with node crashes
+ \end{minipage}
+ \hspace{1em}
+
+ \vspace{3em}
+ \begin{center}
+ They represent \textbf{different classes of computational capability}\\
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Consensus vs weak consistency}
+ \begin{center}
+ \textbf{The same objects cannot be implemented in both models.}
+ \end{center}
+ \vspace{2em}
+
+ \hspace{1em}
+ \begin{minipage}{6.5cm}
+ \underline{Consensus-based systems:}
+
+ \vspace{1em}
+
+ \textbf{Any sequential specification}\\~
+
+ \vspace{1em}
+ \textbf{Easier to program for}: just write your program as if it were sequential on a single machine
+
+ \end{minipage}
+ \hfill
+ \begin{minipage}{6.5cm}
+ \underline{Weakly consistent systems:}
+
+ \vspace{1em}
+
+ \textbf{Only CRDTs}\\(conflict-free replicated data types)
+
+ \vspace{1em}
+ Part of the complexity is \textbf{reported to the consumer of the API}\\~
+ \end{minipage}
+ \hspace{1em}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Understanding the power of consensus}
+ \textbf{Consensus:} an API with a single operation, $propose(x)$
+ \begin{enumerate}
+ \item nodes all call $propose(x)$ with their proposed value;
+ \item nodes all receive the same value as a return value, which is one of the proposed values
+ \end{enumerate}
+ \vspace{1em}
+
+ \visible<2->{
+ \textbf{Equivalent to} a distributed algorithm that gives a total order on all requests
+ }
+ \vspace{1em}
+
+ \visible<3->{
+ \textbf{Implemented by} this simple replicated state machine:
+ \vspace{.5em}
+ \begin{figure}
+ \centering
+ \def\svgwidth{.5\textwidth}
+ \large
+ \import{assets/}{consensus.pdf_tex}
+ \end{figure}
+ \vspace{1em}
+ }
+\end{frame}
+
+\begin{frame}
+ \frametitle{Can my object be implemented without consensus?}
+ \underline{Given the specification of an API:}
+ \vspace{2em}
+ \begin{itemize}
+ \item \textbf{Using this API, we can implement the consensus object} (the $propose$ function)\\
+ $\to$ the API is equivalent to consensus/total ordering of messages\\
+ $\to$ the API cannot be implemented in a weakly consistent system
+ \vspace{2em}
+ \item<2-> \textbf{This API can be implemented using only weak primitives}\\
+ (e.g. in the asynchronous message passing model with no further assumption)\\
+ $\to$ the API is strictly weaker than consensus\\
+ $\to$ we can implement it in Garage!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Why avoid consensus?}
+ Consensus can be implemented reasonably well in practice, so why avoid it?
+ \vspace{2em}
+ \begin{itemize}
+ \item \textbf{Software complexity:} RAFT and PAXOS are complex beasts;\\
+ harder to prove, harder to reason about
+ \vspace{1.5em}
+ \item \textbf{Performance issues:}
+ \vspace{1em}
+ \begin{itemize}
+ \item Theoretical requirements (RNG, failure detector) translate into \textbf{practical costs}
+ \vspace{1em}
+ \item The leader is a \textbf{bottleneck} for all requests;\\
+ even in leaderless approaches, \textbf{all nodes must process all operations in order}
+ \vspace{1em}
+ \item Particularly \textbf{sensitive to higher latency} between nodes
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Performance gains in practice}
+ \begin{center}
+ \includegraphics[width=.8\linewidth]{assets/endpoint-latency-dc.png}
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{What can we implement without consensus?}
+ \begin{itemize}
+ \item Any \textbf{conflict-free replicated data type} (CRDT)
+ \vspace{1em}
+ \item<2-> Non-transactional key-value stores such as S3 are equivalent to a simple CRDT:\\
+ a map of \textbf{last-writer-wins registers} (each key is its own CRDT)
+ \vspace{1em}
+ \item<3-> \textbf{Read-after-write consistency} can be implemented
+ using quorums on read and write operations
+ \vspace{1em}
+ \item<4-> \textbf{Monotonicity of reads} can be implemented with repair-on-read\\
+ (makes reads more costly, not implemented in Garage)
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{CRDTs and quorums: read-after-write consistency}
+ \begin{figure}
+ \centering
+ \def\svgwidth{.8\textwidth}
+ \only<1>{\import{assets/}{lattice1.pdf_tex}}%
+ \only<2>{\import{assets/}{lattice2.pdf_tex}}%
+ \only<3>{\import{assets/}{lattice3.pdf_tex}}%
+ \only<4>{\import{assets/}{lattice4.pdf_tex}}%
+ \only<5>{\import{assets/}{lattice5.pdf_tex}}%
+ \only<6>{\import{assets/}{lattice6.pdf_tex}}%
+ \only<7>{\import{assets/}{lattice7.pdf_tex}}%
+ \only<8>{\import{assets/}{lattice8.pdf_tex}}%
+ \end{figure}
+\end{frame}
+
+\begin{frame}
+ \frametitle{CRDTs and quorums: read-after-write consistency}
+ \textbf{Property:} If node $A$ did an operation $write(x)$ and received an OK response,\\
+ \hspace{2cm} and node $B$ starts an operation $read()$ after $A$ received OK,\\
+ \hspace{2cm} then $B$ will read a value $x' \sqsupseteq x$.
+
+ \vspace{1em}
+
+ \hspace{1em}
+ \begin{minipage}{6.8cm}
+ \textbf{Algorithm $write(x)$:}
+ \begin{enumerate}
+ \item Broadcast $write(x)$ to all nodes
+ \item Wait for $k > n/2$ nodes to reply OK
+ \item Return OK
+ \end{enumerate}
+ \end{minipage}
+ \hfill
+ \begin{minipage}{6.8cm}
+ \vspace{1em}
+ \textbf{Algorithm $read()$:}
+ \begin{enumerate}
+ \item Broadcast $read()$ to all nodes
+ \item Wait for $k > n/2$ nodes to reply\\
+ with values $x_1, \dots, x_k$
+ \item Return $x_1 \sqcup \dots \sqcup x_k$
+ \end{enumerate}
+ \end{minipage}
+ \hspace{1em}
+
+ \vspace{2em}
+ \textbf{Why does it work?} There is at least one node at the intersection between the two sets of nodes that replied to each request, that ``saw'' $x$ before the $read()$ started ($x_i \sqsupseteq x$).
+\end{frame}
+
+\begin{frame}
+ \frametitle{CRDTs and quorums: monotonic-reads consistency}
+ \begin{figure}
+ \centering
+ \def\svgwidth{.8\textwidth}
+ \only<1>{\import{assets/}{latticeB_1.pdf_tex}}%
+ \only<2>{\import{assets/}{latticeB_2.pdf_tex}}%
+ \only<3>{\import{assets/}{latticeB_3.pdf_tex}}%
+ \only<4>{\import{assets/}{latticeB_4.pdf_tex}}%
+ \only<5>{\import{assets/}{latticeB_5.pdf_tex}}%
+ \only<6>{\import{assets/}{latticeB_6.pdf_tex}}%
+ \only<7>{\import{assets/}{latticeB_7.pdf_tex}}%
+ \only<8>{\import{assets/}{latticeB_8.pdf_tex}}%
+ \only<9>{\import{assets/}{latticeB_9.pdf_tex}}%
+ \only<10>{\import{assets/}{latticeB_10.pdf_tex}}%
+ \end{figure}
+\end{frame}
+
+\begin{frame}
+ \frametitle{CRDTs and quorums: monotonic-reads consistency}
+ \textbf{Property:} If node $A$ did an operation $read()$ and received $x$ as a response,\\
+ \hspace{2cm} and node $B$ starts an operation $read()$ after $A$ received $x$,\\
+ \hspace{2cm} then $B$ will read a value $x' \sqsupseteq x$.
+
+ \vspace{1em}
+
+ \textbf{Algorithm $monotonic\_read()$:} {\small (a.k.a. repair-on-read)}
+ \begin{enumerate}
+ \item Broadcast $read()$ to all nodes
+ \item Wait for $k > n/2$ nodes to reply with values $x_1, \dots, x_k$
+ \item If $x_i \ne x_j$ for some nodes $i$ and $j$,\\
+ \hspace{1cm}then call $write(x_1 \sqcup \dots \sqcup x_k)$ and wait for OK from $k' > n/2$ nodes
+ \item Return $x_1 \sqcup \dots \sqcup x_k$
+ \end{enumerate}
+
+ \vspace{1em}
+
+ This makes reads slower in some cases, and is \textbf{not implemented in Garage}.
+\end{frame}
+
+\begin{frame}
+ \frametitle{A hard problem: layout changes}
+ \begin{itemize}
+ \item We rely on quorums $k > n/2$ within each partition:\\
+ $$n=3,~~~~~~~k\ge 2$$
+ \item<2-> When rebalancing, the set of nodes responsible for a partition can change:\\
+ $$\{n_A, n_B, n_C\} \to \{n_A, n_D, n_E\}$$
+ \vspace{.01em}
+ \item<3-> During the rebalancing, $D$ and $E$ don't yet have the data,\\
+ ~~~~~~~~~~~~~~~~~~~and $B$ and $C$ want to get rid of the data to free up space\\
+ \vspace{.2em}
+ $\to$ quorums only within the new set of nodes don't work\\
+ $\to$ how to coordinate? \textbf{currently, we don't...}
+
+ \end{itemize}
+\end{frame}
+
+\section{Going further than the S3 API}
+
+\begin{frame}
+ \frametitle{Using Garage for everything}
+ \begin{center}
+ \only<1>{\includegraphics[width=.8\linewidth]{assets/slideB1.png}}%
+ \only<2>{\includegraphics[width=.8\linewidth]{assets/slideB2.png}}%
+ \only<3>{\includegraphics[width=.8\linewidth]{assets/slideB3.png}}%
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{K2V Design}
+ \begin{itemize}
+ \item A new, custom, minimal API\\
+ \vspace{.5em}
+ \begin{itemize}
+ \item Single-item operations
+ \item Operations on ranges and batches of items
+ \item Polling operations to help implement a PubSub pattern
+ \end{itemize}
+ \vspace{1em}
+ \item<2-> Exposes the partitoning mechanism of Garage\\
+ K2V = partition key / sort key / value (like Dynamo)
+ \vspace{1em}
+ \item<3-> Weakly consistent, CRDT-friendly\\
+ $\to$ no support for transactions (not ACID)
+ \vspace{1em}
+ \item<4-> Cryptography-friendly: values are binary blobs
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Handling concurrent values}
+ \textbf{How to handle concurrency?} Example:
+ \vspace{1em}
+ \begin{enumerate}
+ \item Client $A$ reads the initial value of a key, $x_0$
+ \vspace{1em}
+ \item<2-> Client $B$ also reads the initial value $x_0$ of that key
+ \vspace{1em}
+ \item<3-> Client $A$ modifies $x_0$, and writes a new value $x_1$
+ \vspace{1em}
+ \item<4-> Client $B$ also modifies $x_0$, and writes a new value $x'_1$,\\
+ without having a chance to first read $x_1$\\
+ \vspace{1em}
+ $\to$ what should the final state be?
+ \end{enumerate}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Handling concurrent values}
+ \begin{itemize}
+ \item If we keep only $x_1$ or $x'_1$, we risk \textbf{loosing application data}
+ \vspace{1.5em}
+ \item<2-> Values are opaque binary blobs, \textbf{K2V cannot resolve conflicts} by itself\\
+ (e.g. by implementing a CRDT)
+ \vspace{1.5em}
+ \item<3-> Solution: \textbf{we keep both!}\\
+ $\to$ the value of the key is now $\{x_1, x'_1\}$\\
+ $\to$ the client application can decide how to resolve conflicts on the next read
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Keeping track of causality}
+ How does K2V know that $x_1$ and $x'_1$ are concurrent?
+ \vspace{1em}
+ \begin{itemize}
+ \item $read()$ returns \textbf{a set of values} and an associated \textbf{causality token}\\
+ \vspace{1.5em}
+ \item<2-> When calling $write()$, the client sends \textbf{the causality token from its last read}
+ \vspace{1.5em}
+ \item<3-> The causality token represents the set of values \textbf{already seen by the client}\\
+ $\to$ those values are the \textbf{causal past} of the write operation\\
+ $\to$ K2V can keep concurrent values and overwrite all ones in the causal past
+ \vspace{1.5em}
+ \item<4-> Internally, the causality token is \textbf{a vector clock}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Application: an e-mail storage server}
+ \begin{center}
+ \only<1>{\includegraphics[width=.9\linewidth]{assets/aerogramme.png}}%
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Aerogramme data model}
+ \begin{center}
+ \only<1>{\includegraphics[width=.4\linewidth]{assets/aerogramme_datatype.drawio.pdf}}%
+ \only<2->{\includegraphics[width=.9\linewidth]{assets/aerogramme_keys.drawio.pdf}\vspace{1em}}%
+ \end{center}
+ \visible<3->{Aerogramme encrypts all stored values for privacy\\
+ (Garage server administrators can't read your mail)}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Different deployment scenarios}
+ \begin{center}
+ \only<1>{\includegraphics[width=.9\linewidth]{assets/aerogramme_components1.drawio.pdf}}%
+ \only<2>{\includegraphics[width=.9\linewidth]{assets/aerogramme_components2.drawio.pdf}}%
+ \end{center}
+\end{frame}
+
+\begin{frame}
+ \frametitle{A new model for building resilient software}
+ How to build an application using only Garage as a data store:
+ \vspace{1em}
+ \begin{enumerate}
+ \item Design a data model suited to K2V\\
+ {\footnotesize (see Cassandra docs on porting SQL data models to Cassandra)}
+ \vspace{1em}
+ \begin{itemize}
+ \item Use CRDTs or other eventually consistent data types (see e.g. Bayou)
+ \vspace{1em}
+ \item Store opaque binary blobs to provide End-to-End Encryption\\
+ \end{itemize}
+ \vspace{1em}
+ \item<2-> Store big blobs (files) using the S3 API
+ \vspace{1em}
+ \item<3-> Let Garage manage sharding, replication, failover, etc.
+ \end{enumerate}
+\end{frame}
+
+\section{Conclusion}
+
+\begin{frame}
+ \frametitle{Perspectives}
+ \begin{itemize}
+ \item Fix the consistency issue when rebalancing
+ \vspace{1em}
+ \item Write about Garage's architecture and properties,\\
+ and about our proposed architecture for (E2EE) apps over K2V+S3
+ \vspace{1em}
+ \item Continue developing Garage; finish Aerogramme; build new applications...
+ \vspace{1em}
+ \item Anything else?
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Where to find us}
+ \begin{center}
+ \includegraphics[width=.25\linewidth]{../../logo/garage_hires.png}\\
+ \vspace{-1em}
+ \url{https://garagehq.deuxfleurs.fr/}\\
+ \url{mailto:garagehq@deuxfleurs.fr}\\
+ \texttt{\#garage:deuxfleurs.fr} on Matrix
+
+ \vspace{1.5em}
+ \includegraphics[width=.06\linewidth]{assets/rust_logo.png}
+ \includegraphics[width=.13\linewidth]{assets/AGPLv3_Logo.png}
+ \end{center}
+\end{frame}
+
+\end{document}
+
+%% vim: set ts=4 sw=4 tw=0 noet spelllang=en :
diff --git a/doc/talks/shell.nix b/doc/talks/shell.nix
new file mode 100644
index 00000000..161a61e1
--- /dev/null
+++ b/doc/talks/shell.nix
@@ -0,0 +1,12 @@
+{ pkgs ? import <nixpkgs> { } }:
+let
+ latex = (pkgs.texlive.combine {
+ inherit (pkgs.texlive)
+ scheme-basic
+ beamer amsmath mathtools breqn
+ environ
+ multirow graphics import adjustbox tabu vwcol stmaryrd ulem ragged2e
+ dvisvgm dvipng wrapfig hyperref capt-of;
+ });
+in pkgs.mkShell { nativeBuildInputs = [ pkgs.gnumake latex ]; }
+
diff --git a/flake.lock b/flake.lock
index 4b5713dc..beba6a7b 100644
--- a/flake.lock
+++ b/flake.lock
@@ -55,6 +55,21 @@
"type": "github"
}
},
+ "flake-utils_2": {
+ "locked": {
+ "lastModified": 1667395993,
+ "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
"nixpkgs": {
"locked": {
"lastModified": 1665657542,
@@ -74,6 +89,7 @@
"root": {
"inputs": {
"cargo2nix": "cargo2nix",
+ "flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs"
}
},
diff --git a/flake.nix b/flake.nix
index 7d152195..7eb9e33b 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,28 +1,36 @@
{
- description = "Garage, an S3-compatible distributed object store for self-hosted deployments";
+ description =
+ "Garage, an S3-compatible distributed object store for self-hosted deployments";
- inputs.nixpkgs.url = "github:NixOS/nixpkgs/a3073c49bc0163fea6a121c276f526837672b555";
+ inputs.nixpkgs.url =
+ "github:NixOS/nixpkgs/a3073c49bc0163fea6a121c276f526837672b555";
inputs.cargo2nix = {
# As of 2022-10-18: two small patches over unstable branch, one for clippy and one to fix feature detection
url = "github:Alexis211/cargo2nix/a7a61179b66054904ef6a195d8da736eaaa06c36";
inputs.nixpkgs.follows = "nixpkgs";
};
+ inputs.flake-utils.url = "github:numtide/flake-utils";
- outputs = { self, nixpkgs, cargo2nix }: let
- git_version = self.lastModifiedDate;
- compile = import ./nix/compile.nix;
- forAllSystems = nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed;
- in
- {
- packages = forAllSystems (system: {
- default = (compile {
- inherit system git_version;
- pkgsSrc = nixpkgs;
- cargo2nixOverlay = cargo2nix.overlays.default;
- release = true;
- }).workspace.garage {
- compileMode = "build";
- };
- });
- };
+ outputs = { self, nixpkgs, cargo2nix, flake-utils }:
+ let
+ git_version = self.lastModifiedDate;
+ compile = import ./nix/compile.nix;
+ in flake-utils.lib.eachDefaultSystem (system:
+ let pkgs = nixpkgs.legacyPackages.${system};
+ in {
+ packages = {
+ default = (compile {
+ inherit system git_version;
+ pkgsSrc = nixpkgs;
+ cargo2nixOverlay = cargo2nix.overlays.default;
+ release = true;
+ }).workspace.garage { compileMode = "build"; };
+ };
+ devShell = (compile {
+ inherit system git_version;
+ pkgsSrc = nixpkgs;
+ cargo2nixOverlay = cargo2nix.overlays.default;
+ release = false;
+ }).workspaceShell { packages = [ pkgs.rustfmt ]; };
+ });
}
diff --git a/nix/build_index.nix b/nix/build_index.nix
index 4625e3ae..7cc4f62c 100644
--- a/nix/build_index.nix
+++ b/nix/build_index.nix
@@ -1,10 +1,8 @@
-{
- path ? "/../aws-list.txt",
-}:
+{ path ? "/../aws-list.txt", }:
with import ./common.nix;
-let
- pkgs = import pkgsSrc {};
+let
+ pkgs = import pkgsSrc { };
lib = pkgs.lib;
/* Converts a key list and a value list to a set
@@ -13,139 +11,182 @@ let
listToSet [ "name" "version" ] [ "latex" "3.14" ]
=> { name = "latex"; version = "3.14"; }
*/
- listToSet = keys: values:
- builtins.listToAttrs
- (lib.zipListsWith
- (a: b: { name = a; value = b; })
- keys
- values);
+ listToSet = keys: values:
+ builtins.listToAttrs (lib.zipListsWith (a: b: {
+ name = a;
+ value = b;
+ }) keys values);
/* Says if datetime a is more recent than datetime b
- Example:
- cmpDate { date = "2021-09-10"; time = "22:12:15"; } { date = "2021-02-03"; time = "23:54:12"; }
- => true
+ Example:
+ cmpDate { date = "2021-09-10"; time = "22:12:15"; } { date = "2021-02-03"; time = "23:54:12"; }
+ => true
*/
- cmpDate = a: b:
- let da = (builtins.head a.builds).date;
- db = (builtins.head b.builds).date;
- in
- if da == db then (builtins.head a.builds).time > (builtins.head b.builds).time
- else da > db;
-
- /* Pretty platforms */
+ cmpDate = a: b:
+ let
+ da = (builtins.head a.builds).date;
+ db = (builtins.head b.builds).date;
+ in if da == db then
+ (builtins.head a.builds).time > (builtins.head b.builds).time
+ else
+ da > db;
+
+ # Pretty platforms
prettyPlatform = name:
- if name == "aarch64-unknown-linux-musl" then "linux/arm64"
- else if name == "armv6l-unknown-linux-musleabihf" then "linux/arm"
- else if name == "x86_64-unknown-linux-musl" then "linux/amd64"
- else if name == "i686-unknown-linux-musl" then "linux/386"
- else name;
-
- /* Parsing */
+ if name == "aarch64-unknown-linux-musl" then
+ "linux/arm64"
+ else if name == "armv6l-unknown-linux-musleabihf" then
+ "linux/arm"
+ else if name == "x86_64-unknown-linux-musl" then
+ "linux/amd64"
+ else if name == "i686-unknown-linux-musl" then
+ "linux/386"
+ else
+ name;
+
+ # Parsing
list = builtins.readFile (./. + path);
entries = lib.splitString "\n" list;
- elems = builtins.filter
- (e: (builtins.length e) == 4)
- (map
- (x: builtins.filter (e: e != "") (lib.splitString " " x))
- entries);
+ elems = builtins.filter (e: (builtins.length e) == 4)
+ (map (x: builtins.filter (e: e != "") (lib.splitString " " x)) entries);
- keys = ["date" "time" "size" "path"];
+ keys = [ "date" "time" "size" "path" ];
parsed = map (entry: listToSet keys entry) elems;
- subkeys = ["root" "version" "platform" "binary" ];
- builds = map (entry: entry // listToSet subkeys (lib.splitString "/" entry.path) // { url = "https://garagehq.deuxfleurs.fr/" + entry.path; }) parsed;
-
- /* Aggregation */
- builds_per_version = lib.foldl (acc: v: acc // { ${v.version} = if builtins.hasAttr v.version acc then acc.${v.version} ++ [ v ] else [ v ]; }) {} builds;
+ subkeys = [ "root" "version" "platform" "binary" ];
+ builds = map (entry:
+ entry // listToSet subkeys (lib.splitString "/" entry.path) // {
+ url = "https://garagehq.deuxfleurs.fr/" + entry.path;
+ }) parsed;
+
+ # Aggregation
+ builds_per_version = lib.foldl (acc: v:
+ acc // {
+ ${v.version} = if builtins.hasAttr v.version acc then
+ acc.${v.version} ++ [ v ]
+ else
+ [ v ];
+ }) { } builds;
versions = builtins.attrNames builds_per_version;
- versions_release = builtins.filter (x: builtins.match "v[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?" x != null) versions;
- versions_commit = builtins.filter (x: builtins.match "[0-9a-f]{40}" x != null) versions;
- versions_extra = lib.subtractLists (versions_release ++ versions_commit) versions;
+ versions_release = builtins.filter
+ (x: builtins.match "v[0-9]+.[0-9]+.[0-9]+(.[0-9]+)?" x != null) versions;
+ versions_commit =
+ builtins.filter (x: builtins.match "[0-9a-f]{40}" x != null) versions;
+ versions_extra =
+ lib.subtractLists (versions_release ++ versions_commit) versions;
sorted_builds = [
{
name = "Release";
hide = false;
type = "tag";
- description = "Release builds are the official builds, they are tailored for productions and are the most tested.";
- builds = builtins.sort (a: b: a.version > b.version) (map (x: { version = x; builds = builtins.getAttr x builds_per_version; }) versions_release);
+ description =
+ "Release builds are the official builds, they are tailored for productions and are the most tested.";
+ builds = builtins.sort (a: b: a.version > b.version) (map (x: {
+ version = x;
+ builds = builtins.getAttr x builds_per_version;
+ }) versions_release);
}
{
name = "Extra";
hide = true;
type = "tag";
- description = "Extra builds are built on demand to test a specific feature or a specific need.";
- builds = builtins.sort cmpDate (map (x: { version = x; builds = builtins.getAttr x builds_per_version; }) versions_extra);
+ description =
+ "Extra builds are built on demand to test a specific feature or a specific need.";
+ builds = builtins.sort cmpDate (map (x: {
+ version = x;
+ builds = builtins.getAttr x builds_per_version;
+ }) versions_extra);
}
{
name = "Development";
hide = true;
type = "commit";
- description = "Development builds are built periodically. Use them if you want to test a specific feature that is not yet released.";
- builds = builtins.sort cmpDate (map (x: { version = x; builds = builtins.getAttr x builds_per_version; }) versions_commit);
+ description =
+ "Development builds are built periodically. Use them if you want to test a specific feature that is not yet released.";
+ builds = builtins.sort cmpDate (map (x: {
+ version = x;
+ builds = builtins.getAttr x builds_per_version;
+ }) versions_commit);
}
];
- json = pkgs.writeTextDir "share/_releases.json" (builtins.toJSON sorted_builds);
+ json =
+ pkgs.writeTextDir "share/_releases.json" (builtins.toJSON sorted_builds);
html = pkgs.writeTextDir "share/_releases.html" ''
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8" />
- <title>Garage releases</title>
- <style>
- html, body { margin:0; padding: 0 }
- body { font-family: 'Helvetica', Sans; }
- section { margin: 1rem; }
- ul { padding:0; margin: 0.2rem }
- li {
- border-radius: 0.2rem;
- display: inline;
- border: 2px #0b5d83 solid;
- padding: 0.5rem;
- line-height: 3rem;
- color: #0b5d83;
- }
- li:hover { background-color: #0b5d83; color: #fff; }
- li a, li a:hover { color: inherit; text-decoration: none }
- </style>
- </head>
- <body>
- ${ builtins.toString (lib.forEach sorted_builds (r: ''
- <section>
- <h2>${r.name} builds</h2>
-
- <p>${r.description}</p>
-
- ${if r.hide then "<details><summary>Show ${r.name} builds</summary>" else ""}
- ${ builtins.toString (lib.forEach r.builds (x: ''
- <h3> ${x.version} (${(builtins.head x.builds).date}) </h3>
- <p>See this build on</p>
- <p> Binaries:
- <ul>
- ${ builtins.toString (lib.forEach x.builds (b: ''
- <li><a href="/${b.path}">${prettyPlatform b.platform}</a></li>
- ''))}
- </ul></p>
- <p> Sources:
- <ul>
- <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/src/${r.type}/${x.version}">gitea</a></li>
- <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/archive/${x.version}.zip">.zip</a></li>
- <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/archive/${x.version}.tar.gz">.tar.gz</a></li>
- </ul></p>
- '')) }
- ${ if builtins.length r.builds == 0 then "<em>There is no build for this category</em>" else "" }
- ${if r.hide then "</details>" else ""}
- </section>
- ''))}
- </body>
-</html>
-'';
-in
- pkgs.symlinkJoin {
- name = "releases";
- paths = [ json html ];
- }
+ <!doctype html>
+ <html>
+ <head>
+ <meta charset="utf-8" />
+ <title>Garage releases</title>
+ <style>
+ html, body { margin:0; padding: 0 }
+ body { font-family: 'Helvetica', Sans; }
+ section { margin: 1rem; }
+ ul { padding:0; margin: 0.2rem }
+ li {
+ border-radius: 0.2rem;
+ display: inline;
+ border: 2px #0b5d83 solid;
+ padding: 0.5rem;
+ line-height: 3rem;
+ color: #0b5d83;
+ }
+ li:hover { background-color: #0b5d83; color: #fff; }
+ li a, li a:hover { color: inherit; text-decoration: none }
+ </style>
+ </head>
+ <body>
+ ${
+ builtins.toString (lib.forEach sorted_builds (r: ''
+ <section>
+ <h2>${r.name} builds</h2>
+
+ <p>${r.description}</p>
+
+ ${
+ if r.hide then
+ "<details><summary>Show ${r.name} builds</summary>"
+ else
+ ""
+ }
+ ${
+ builtins.toString (lib.forEach r.builds (x: ''
+ <h3> ${x.version} (${(builtins.head x.builds).date}) </h3>
+ <p>See this build on</p>
+ <p> Binaries:
+ <ul>
+ ${builtins.toString (lib.forEach x.builds (b: ''
+ <li><a href="/${b.path}">${
+ prettyPlatform b.platform
+ }</a></li>
+ ''))}
+ </ul></p>
+ <p> Sources:
+ <ul>
+ <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/src/${r.type}/${x.version}">gitea</a></li>
+ <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/archive/${x.version}.zip">.zip</a></li>
+ <li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage/archive/${x.version}.tar.gz">.tar.gz</a></li>
+ </ul></p>
+ ''))
+ }
+ ${
+ if builtins.length r.builds == 0 then
+ "<em>There is no build for this category</em>"
+ else
+ ""
+ }
+ ${if r.hide then "</details>" else ""}
+ </section>
+ ''))
+ }
+ </body>
+ </html>
+ '';
+in pkgs.symlinkJoin {
+ name = "releases";
+ paths = [ json html ];
+}
diff --git a/nix/common.nix b/nix/common.nix
index 90e3afaf..57f354dd 100644
--- a/nix/common.nix
+++ b/nix/common.nix
@@ -1,10 +1,9 @@
rec {
- /*
- * Fixed dependencies
- */
+ # * Fixed dependencies
pkgsSrc = fetchTarball {
# As of 2022-10-13
- url = "https://github.com/NixOS/nixpkgs/archive/a3073c49bc0163fea6a121c276f526837672b555.zip";
+ url =
+ "https://github.com/NixOS/nixpkgs/archive/a3073c49bc0163fea6a121c276f526837672b555.zip";
sha256 = "1bz632psfbpmicyzjb8b4265y50shylccvfm6ry6mgnv5hvz324s";
};
cargo2nixSrc = fetchGit {
@@ -14,9 +13,7 @@ rec {
rev = "a7a61179b66054904ef6a195d8da736eaaa06c36";
};
- /*
- * Shared objects
- */
+ # * Shared objects
cargo2nix = import cargo2nixSrc;
cargo2nixOverlay = cargo2nix.overlays.default;
}
diff --git a/nix/compile.nix b/nix/compile.nix
index 3ea5035e..54e920db 100644
--- a/nix/compile.nix
+++ b/nix/compile.nix
@@ -1,227 +1,240 @@
-{
- system,
- target ? null,
- pkgsSrc,
- cargo2nixOverlay,
- compiler ? "rustc",
- release ? false,
- git_version ? null,
- features ? null,
-}:
+{ system, target ? null, pkgsSrc, cargo2nixOverlay, compiler ? "rustc"
+, release ? false, git_version ? null, features ? null, }:
let
log = v: builtins.trace v v;
- pkgs =
- if target != null then
- import pkgsSrc {
- inherit system;
- crossSystem = {
- config = target;
- isStatic = true;
- };
- overlays = [ cargo2nixOverlay ];
- }
- else
- import pkgsSrc {
- inherit system;
- overlays = [ cargo2nixOverlay ];
+ pkgs = if target != null then
+ import pkgsSrc {
+ inherit system;
+ crossSystem = {
+ config = target;
+ isStatic = true;
};
+ overlays = [ cargo2nixOverlay ];
+ }
+ else
+ import pkgsSrc {
+ inherit system;
+ overlays = [ cargo2nixOverlay ];
+ };
- /*
- Cargo2nix is built for rustOverlay which installs Rust from Mozilla releases.
- This is fine for 64-bit platforms, but for 32-bit platforms, we need our own Rust
- to avoid incompatibilities with time_t between different versions of musl
- (>= 1.2.0 shipped by NixOS, < 1.2.0 with which rustc was built), which lead to compilation breakage.
- So we want a Rust release that is bound to our Nix repository to avoid these problems.
- See here for more info: https://musl.libc.org/time64.html
- Because Cargo2nix does not support the Rust environment shipped by NixOS,
- we emulate the structure of the Rust object created by rustOverlay.
- In practise, rustOverlay ships rustc+cargo in a single derivation while
- NixOS ships them in separate ones. We reunite them with symlinkJoin.
+ /* Cargo2nix is built for rustOverlay which installs Rust from Mozilla releases.
+ This is fine for 64-bit platforms, but for 32-bit platforms, we need our own Rust
+ to avoid incompatibilities with time_t between different versions of musl
+ (>= 1.2.0 shipped by NixOS, < 1.2.0 with which rustc was built), which lead to compilation breakage.
+ So we want a Rust release that is bound to our Nix repository to avoid these problems.
+ See here for more info: https://musl.libc.org/time64.html
+ Because Cargo2nix does not support the Rust environment shipped by NixOS,
+ we emulate the structure of the Rust object created by rustOverlay.
+ In practise, rustOverlay ships rustc+cargo in a single derivation while
+ NixOS ships them in separate ones. We reunite them with symlinkJoin.
*/
- toolchainOptions =
- if target == null || target == "x86_64-unknown-linux-musl" || target == "aarch64-unknown-linux-musl" then {
- rustVersion = "1.63.0";
- extraRustComponents = [ "clippy" ];
- } else {
- rustToolchain = pkgs.symlinkJoin {
- name = "rust-static-toolchain-${target}";
- paths = [
- pkgs.rustPlatform.rust.cargo
- pkgs.rustPlatform.rust.rustc
- # clippy not needed, it only runs on amd64
- ];
- };
+ toolchainOptions = if target == null || target == "x86_64-unknown-linux-musl"
+ || target == "aarch64-unknown-linux-musl" then {
+ rustVersion = "1.63.0";
+ extraRustComponents = [ "clippy" ];
+ } else {
+ rustToolchain = pkgs.symlinkJoin {
+ name = "rust-static-toolchain-${target}";
+ paths = [
+ pkgs.rustPlatform.rust.cargo
+ pkgs.rustPlatform.rust.rustc
+ # clippy not needed, it only runs on amd64
+ ];
};
+ };
+ buildEnv = (drv:
+ {
+ rustc = drv.setBuildEnv;
+ clippy = ''
+ ${drv.setBuildEnv or ""}
+ echo
+ echo --- BUILDING WITH CLIPPY ---
+ echo
+
+ export NIX_RUST_BUILD_FLAGS="''${NIX_RUST_BUILD_FLAGS} --deny warnings"
+ export RUSTC="''${CLIPPY_DRIVER}"
+ '';
+ }.${compiler});
+
+ /* Cargo2nix provides many overrides by default, you can take inspiration from them:
+ https://github.com/cargo2nix/cargo2nix/blob/master/overlay/overrides.nix
+
+ You can have a complete list of the available options by looking at the overriden object, mkcrate:
+ https://github.com/cargo2nix/cargo2nix/blob/master/overlay/mkcrate.nix
+ */
+ packageOverrides = pkgs:
+ pkgs.rustBuilder.overrides.all ++ [
+ /* [1] We add some logic to compile our crates with clippy, it provides us many additional lints
+
+ [2] We need to alter Nix hardening to make static binaries: PIE,
+ Position Independent Executables seems to be supported only on amd64. Having
+ this flag set either 1. make our executables crash or 2. compile as dynamic on some platforms.
+ Here, we deactivate it. Later (find `codegenOpts`), we reactivate it for supported targets
+ (only amd64 curently) through the `-static-pie` flag.
+ PIE is a feature used by ASLR, which helps mitigate security issues.
+ Learn more about Nix Hardening at: https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/cc-wrapper/add-hardening.sh
+
+ [3] We want to inject the git version while keeping the build deterministic.
+ As we do not want to consider the .git folder as part of the input source,
+ we ask the user (the CI often) to pass the value to Nix.
+
+ [4] We don't want libsodium-sys and zstd-sys to try to use pkgconfig to build against a system library.
+ However the features to do so get activated for some reason (due to a bug in cargo2nix?),
+ so disable them manually here.
+ */
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage";
+ overrideAttrs = drv:
+ (if git_version != null then {
+ # [3]
+ preConfigure = ''
+ ${drv.preConfigure or ""}
+ export GIT_VERSION="${git_version}"
+ '';
+ } else
+ { }) // {
+ # [1]
+ setBuildEnv = (buildEnv drv);
+ # [2]
+ hardeningDisable = [ "pie" ];
+ };
+ })
+
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage_rpc";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
- buildEnv = (drv: {
- rustc = drv.setBuildEnv;
- clippy = ''
- ${drv.setBuildEnv or "" }
- echo
- echo --- BUILDING WITH CLIPPY ---
- echo
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage_db";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
- export NIX_RUST_BUILD_FLAGS="''${NIX_RUST_BUILD_FLAGS} --deny warnings"
- export RUSTC="''${CLIPPY_DRIVER}"
- '';
- }.${compiler});
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage_util";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
- /*
- Cargo2nix provides many overrides by default, you can take inspiration from them:
- https://github.com/cargo2nix/cargo2nix/blob/master/overlay/overrides.nix
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage_table";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
- You can have a complete list of the available options by looking at the overriden object, mkcrate:
- https://github.com/cargo2nix/cargo2nix/blob/master/overlay/mkcrate.nix
- */
- packageOverrides = pkgs: pkgs.rustBuilder.overrides.all ++ [
- /*
- [1] We add some logic to compile our crates with clippy, it provides us many additional lints
-
- [2] We need to alter Nix hardening to make static binaries: PIE,
- Position Independent Executables seems to be supported only on amd64. Having
- this flag set either 1. make our executables crash or 2. compile as dynamic on some platforms.
- Here, we deactivate it. Later (find `codegenOpts`), we reactivate it for supported targets
- (only amd64 curently) through the `-static-pie` flag.
- PIE is a feature used by ASLR, which helps mitigate security issues.
- Learn more about Nix Hardening at: https://github.com/NixOS/nixpkgs/blob/master/pkgs/build-support/cc-wrapper/add-hardening.sh
-
- [3] We want to inject the git version while keeping the build deterministic.
- As we do not want to consider the .git folder as part of the input source,
- we ask the user (the CI often) to pass the value to Nix.
-
- [4] We don't want libsodium-sys and zstd-sys to try to use pkgconfig to build against a system library.
- However the features to do so get activated for some reason (due to a bug in cargo2nix?),
- so disable them manually here.
- */
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage";
- overrideAttrs = drv:
- (if git_version != null then {
- /* [3] */ preConfigure = ''
- ${drv.preConfigure or ""}
- export GIT_VERSION="${git_version}"
- '';
- } else {})
- //
- {
- /* [1] */ setBuildEnv = (buildEnv drv);
- /* [2] */ hardeningDisable = [ "pie" ];
- };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage_rpc";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage_db";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage_util";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage_table";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage_block";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage_model";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage_api";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "garage_web";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "k2v-client";
- overrideAttrs = drv: { /* [1] */ setBuildEnv = (buildEnv drv); };
- })
-
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "libsodium-sys";
- overrideArgs = old: {
- features = [ ]; /* [4] */
- };
- })
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage_block";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
- (pkgs.rustBuilder.rustLib.makeOverride {
- name = "zstd-sys";
- overrideArgs = old: {
- features = [ ]; /* [4] */
- };
- })
- ];
-
- /*
- We ship some parts of the code disabled by default by putting them behind a flag.
- It speeds up the compilation (when the feature is not required) and released crates have less dependency by default (less attack surface, disk space, etc.).
- But we want to ship these additional features when we release Garage.
- In the end, we chose to exclude all features from debug builds while putting (all of) them in the release builds.
- */
- rootFeatures = if features != null then features else
- ([
- "garage/bundled-libs"
- "garage/sled"
- "garage/k2v"
- ] ++ (if release then [
- "garage/consul-discovery"
- "garage/kubernetes-discovery"
- "garage/metrics"
- "garage/telemetry-otlp"
- "garage/lmdb"
- "garage/sqlite"
- ] else []));
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage_model";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
+
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage_api";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
+
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "garage_web";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
+
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "k2v-client";
+ overrideAttrs = drv: { # [1]
+ setBuildEnv = (buildEnv drv);
+ };
+ })
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "libsodium-sys";
+ overrideArgs = old: {
+ features = [ ]; # [4]
+ };
+ })
+
+ (pkgs.rustBuilder.rustLib.makeOverride {
+ name = "zstd-sys";
+ overrideArgs = old: {
+ features = [ ]; # [4]
+ };
+ })
+ ];
+
+ /* We ship some parts of the code disabled by default by putting them behind a flag.
+ It speeds up the compilation (when the feature is not required) and released crates have less dependency by default (less attack surface, disk space, etc.).
+ But we want to ship these additional features when we release Garage.
+ In the end, we chose to exclude all features from debug builds while putting (all of) them in the release builds.
+ */
+ rootFeatures = if features != null then
+ features
+ else
+ ([ "garage/bundled-libs" "garage/sled" "garage/k2v" ] ++ (if release then [
+ "garage/consul-discovery"
+ "garage/kubernetes-discovery"
+ "garage/metrics"
+ "garage/telemetry-otlp"
+ "garage/lmdb"
+ "garage/sqlite"
+ ] else
+ [ ]));
packageFun = import ../Cargo.nix;
- /*
- We compile fully static binaries with musl to simplify deployment on most systems.
- When possible, we reactivate PIE hardening (see above).
+ /* We compile fully static binaries with musl to simplify deployment on most systems.
+ When possible, we reactivate PIE hardening (see above).
- Also, if you set the RUSTFLAGS environment variable, the following parameters will
- be ignored.
+ Also, if you set the RUSTFLAGS environment variable, the following parameters will
+ be ignored.
- For more information on static builds, please refer to Rust's RFC 1721.
- https://rust-lang.github.io/rfcs/1721-crt-static.html#specifying-dynamicstatic-c-runtime-linkage
+ For more information on static builds, please refer to Rust's RFC 1721.
+ https://rust-lang.github.io/rfcs/1721-crt-static.html#specifying-dynamicstatic-c-runtime-linkage
*/
codegenOpts = {
- "armv6l-unknown-linux-musleabihf" = [ "target-feature=+crt-static" "link-arg=-static" ]; /* compile as dynamic with static-pie */
- "aarch64-unknown-linux-musl" = [ "target-feature=+crt-static" "link-arg=-static" ]; /* segfault with static-pie */
- "i686-unknown-linux-musl" = [ "target-feature=+crt-static" "link-arg=-static" ]; /* segfault with static-pie */
- "x86_64-unknown-linux-musl" = [ "target-feature=+crt-static" "link-arg=-static-pie" ];
+ "armv6l-unknown-linux-musleabihf" = [
+ "target-feature=+crt-static"
+ "link-arg=-static"
+ ]; # compile as dynamic with static-pie
+ "aarch64-unknown-linux-musl" = [
+ "target-feature=+crt-static"
+ "link-arg=-static"
+ ]; # segfault with static-pie
+ "i686-unknown-linux-musl" = [
+ "target-feature=+crt-static"
+ "link-arg=-static"
+ ]; # segfault with static-pie
+ "x86_64-unknown-linux-musl" =
+ [ "target-feature=+crt-static" "link-arg=-static-pie" ];
};
- /*
- NixOS and Rust/Cargo triples do not match for ARM, fix it here.
- */
- rustTarget = if target == "armv6l-unknown-linux-musleabihf"
- then "arm-unknown-linux-musleabihf"
- else target;
-
-in
- pkgs.rustBuilder.makePackageSet ({
- inherit release packageFun packageOverrides codegenOpts rootFeatures;
- target = rustTarget;
- } // toolchainOptions)
+ # NixOS and Rust/Cargo triples do not match for ARM, fix it here.
+ rustTarget = if target == "armv6l-unknown-linux-musleabihf" then
+ "arm-unknown-linux-musleabihf"
+ else
+ target;
+
+in pkgs.rustBuilder.makePackageSet ({
+ inherit release packageFun packageOverrides codegenOpts rootFeatures;
+ target = rustTarget;
+} // toolchainOptions)
diff --git a/nix/kaniko.nix b/nix/kaniko.nix
index 140328b8..64cadd14 100644
--- a/nix/kaniko.nix
+++ b/nix/kaniko.nix
@@ -15,7 +15,8 @@ pkgs.buildGoModule rec {
checkPhase = "true";
meta = with pkgs.lib; {
- description = "kaniko is a tool to build container images from a Dockerfile, inside a container or Kubernetes cluster.";
+ description =
+ "kaniko is a tool to build container images from a Dockerfile, inside a container or Kubernetes cluster.";
homepage = "https://github.com/GoogleContainerTools/kaniko";
license = licenses.asl20;
platforms = platforms.linux;
diff --git a/nix/manifest-tool.nix b/nix/manifest-tool.nix
index 182ccc0e..1090a6ef 100644
--- a/nix/manifest-tool.nix
+++ b/nix/manifest-tool.nix
@@ -15,7 +15,8 @@ pkgs.buildGoModule rec {
checkPhase = "true";
meta = with pkgs.lib; {
- description = "Command line tool to create and query container image manifest list/indexes";
+ description =
+ "Command line tool to create and query container image manifest list/indexes";
homepage = "https://github.com/estesp/manifest-tool";
license = licenses.asl20;
platforms = platforms.linux;
diff --git a/nix/toolchain.nix b/nix/toolchain.nix
index 079fcf13..532db74e 100644
--- a/nix/toolchain.nix
+++ b/nix/toolchain.nix
@@ -1,6 +1,4 @@
-{
- system ? builtins.currentSystem,
-}:
+{ system ? builtins.currentSystem, }:
with import ./common.nix;
@@ -11,27 +9,23 @@ let
#"aarch64-unknown-linux-musl"
"armv6l-unknown-linux-musleabihf"
];
- pkgsList = builtins.map (target: import pkgsSrc {
- inherit system;
- crossSystem = {
- config = target;
- isStatic = true;
- };
- overlays = [ cargo2nixOverlay ];
- }) platforms;
- pkgsHost = import pkgsSrc {};
+ pkgsList = builtins.map (target:
+ import pkgsSrc {
+ inherit system;
+ crossSystem = {
+ config = target;
+ isStatic = true;
+ };
+ overlays = [ cargo2nixOverlay ];
+ }) platforms;
+ pkgsHost = import pkgsSrc { };
lib = pkgsHost.lib;
kaniko = (import ./kaniko.nix) pkgsHost;
winscp = (import ./winscp.nix) pkgsHost;
manifestTool = (import ./manifest-tool.nix) pkgsHost;
-in
- lib.flatten (builtins.map (pkgs: [
- pkgs.rustPlatform.rust.rustc
- pkgs.rustPlatform.rust.cargo
- pkgs.buildPackages.stdenv.cc
- ]) pkgsList) ++ [
- kaniko
- winscp
- manifestTool
- ]
+in lib.flatten (builtins.map (pkgs: [
+ pkgs.rustPlatform.rust.rustc
+ pkgs.rustPlatform.rust.cargo
+ pkgs.buildPackages.stdenv.cc
+]) pkgsList) ++ [ kaniko winscp manifestTool ]
diff --git a/nix/winscp.nix b/nix/winscp.nix
index 10d3cb28..113f4506 100644
--- a/nix/winscp.nix
+++ b/nix/winscp.nix
@@ -11,12 +11,12 @@ pkgs.stdenv.mkDerivation rec {
};
buildPhase = ''
- cat > winscp <<EOF
-#!${pkgs.bash}/bin/bash
+ cat > winscp <<EOF
+ #!${pkgs.bash}/bin/bash
-WINEDEBUG=-all
-${pkgs.winePackages.minimal}/bin/wine $out/opt/WinSCP.com
-EOF
+ WINEDEBUG=-all
+ ${pkgs.winePackages.minimal}/bin/wine $out/opt/WinSCP.com
+ EOF
'';
installPhase = ''
diff --git a/script/helm/garage/Chart.yaml b/script/helm/garage/Chart.yaml
index 7fb4c531..82b2e106 100644
--- a/script/helm/garage/Chart.yaml
+++ b/script/helm/garage/Chart.yaml
@@ -15,10 +15,10 @@ type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
-version: 0.2.0
+version: 0.4.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
-appVersion: "v0.7.2.1"
+appVersion: "v0.8.2"
diff --git a/script/helm/garage/templates/configmap.yaml b/script/helm/garage/templates/configmap.yaml
index bfcd5d8c..5cc7a45e 100644
--- a/script/helm/garage/templates/configmap.yaml
+++ b/script/helm/garage/templates/configmap.yaml
@@ -4,28 +4,4 @@ metadata:
name: {{ include "garage.fullname" . }}-config
data:
garage.toml: |-
- metadata_dir = "{{ .Values.garage.metadataDir }}"
- data_dir = "{{ .Values.garage.dataDir }}"
-
- replication_mode = "{{ .Values.garage.replicationMode }}"
-
- rpc_bind_addr = "{{ .Values.garage.rpcBindAddr }}"
- # rpc_secret will be populated by the init container from a k8s secret object
- rpc_secret = "__RPC_SECRET_REPLACE__"
-
- bootstrap_peers = {{ .Values.garage.bootstrapPeers }}
-
- [kubernetes_discovery]
- namespace = "{{ .Release.Namespace }}"
- service_name = "{{ include "garage.fullname" . }}"
- skip_crd = {{ .Values.garage.kubernetesSkipCrd }}
-
- [s3_api]
- s3_region = "{{ .Values.garage.s3.api.region }}"
- api_bind_addr = "[::]:3900"
- root_domain = "{{ .Values.garage.s3.api.rootDomain }}"
-
- [s3_web]
- bind_addr = "[::]:3902"
- root_domain = "{{ .Values.garage.s3.web.rootDomain }}"
- index = "{{ .Values.garage.s3.web.index }}"
+ {{- tpl (index (index .Values.garage) "garage.toml") $ | nindent 4 }}
diff --git a/script/helm/garage/templates/service.yaml b/script/helm/garage/templates/service.yaml
index 2bfff99d..37218872 100644
--- a/script/helm/garage/templates/service.yaml
+++ b/script/helm/garage/templates/service.yaml
@@ -17,3 +17,24 @@ spec:
name: s3-web
selector:
{{- include "garage.selectorLabels" . | nindent 4 }}
+{{- if .Values.monitoring.metrics.enabled }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ include "garage.fullname" . }}-metrics
+ labels:
+ {{- include "garage.labels" . | nindent 4 }}
+ annotations:
+ prometheus.io/scrape: "true"
+spec:
+ type: ClusterIP
+ clusterIP: None
+ ports:
+ - port: 3903
+ targetPort: 3903
+ protocol: TCP
+ name: metrics
+ selector:
+ {{- include "garage.selectorLabels" . | nindent 4 }}
+{{- end }} \ No newline at end of file
diff --git a/script/helm/garage/templates/servicemonitor.yaml b/script/helm/garage/templates/servicemonitor.yaml
new file mode 100644
index 00000000..6838d09f
--- /dev/null
+++ b/script/helm/garage/templates/servicemonitor.yaml
@@ -0,0 +1,44 @@
+{{- if .Values.monitoring.metrics.serviceMonitor.enabled }}
+---
+apiVersion: monitoring.coreos.com/v1
+kind: ServiceMonitor
+metadata:
+ name: {{ include "garage.fullname" . }}
+ {{- if .Values.monitoring.metrics.serviceMonitor.namespace }}
+ namespace: {{ tpl .Values.monitoring.metrics.serviceMonitor.namespace . }}
+ {{- else }}
+ namespace: {{ .Release.Namespace }}
+ {{- end }}
+ labels:
+ {{- include "garage.labels" . | nindent 4 }}
+ {{- with .Values.monitoring.metrics.serviceMonitor.labels }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+spec:
+ endpoints:
+ - port: metrics
+ {{- with .Values.monitoring.metrics.serviceMonitor.interval }}
+ interval: {{ . }}
+ {{- end }}
+ {{- with .Values.monitoring.metrics.serviceMonitor.scrapeTimeout }}
+ scrapeTimeout: {{ . }}
+ {{- end }}
+ honorLabels: true
+ path: {{ .Values.monitoring.metrics.serviceMonitor.path }}
+ scheme: {{ .Values.monitoring.metrics.serviceMonitor.scheme }}
+ {{- with .Values.monitoring.metrics.serviceMonitor.tlsConfig }}
+ tlsConfig:
+ {{- toYaml . | nindent 6 }}
+ {{- end }}
+ {{- with .Values.monitoring.metrics.serviceMonitor.relabelings }}
+ relabelings:
+ {{- toYaml . | nindent 6 }}
+ {{- end }}
+ jobLabel: "{{ .Release.Name }}"
+ selector:
+ matchLabels:
+ {{- include "garage.selectorLabels" . | nindent 6 }}
+ namespaceSelector:
+ matchNames:
+ - {{ .Release.Namespace }}
+{{- end }} \ No newline at end of file
diff --git a/script/helm/garage/templates/statefulset.yaml b/script/helm/garage/templates/workload.yaml
index bda40117..340c0054 100644
--- a/script/helm/garage/templates/statefulset.yaml
+++ b/script/helm/garage/templates/workload.yaml
@@ -1,19 +1,23 @@
apiVersion: apps/v1
-kind: StatefulSet
+kind: {{ .Values.deployment.kind }}
metadata:
name: {{ include "garage.fullname" . }}
labels:
{{- include "garage.labels" . | nindent 4 }}
spec:
- replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "garage.selectorLabels" . | nindent 6 }}
+ {{- if eq .Values.deployment.kind "StatefulSet" }}
+ replicas: {{ .Values.deployment.replicaCount }}
serviceName: {{ include "garage.fullname" . }}
+ {{- end }}
template:
metadata:
- {{- with .Values.podAnnotations }}
+
annotations:
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ {{- with .Values.podAnnotations }}
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
@@ -29,7 +33,8 @@ spec:
initContainers:
# Copies garage.toml from configmap to temporary etc volume and replaces RPC secret placeholder
- name: {{ .Chart.Name }}-init
- image: busybox:1.28
+ image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
+ imagePullPolicy: {{ .Values.initImage.pullPolicy }}
command: ["sh", "-c", "sed \"s/__RPC_SECRET_REPLACE__/$RPC_SECRET/\" /mnt/garage.toml > /mnt/etc/garage.toml"]
env:
- name: RPC_SECRET
@@ -37,6 +42,8 @@ spec:
secretKeyRef:
name: {{ include "garage.rpcSecretName" . }}
key: rpcSecret
+ securityContext:
+ {{- toYaml .Values.securityContext | nindent 12 }}
volumeMounts:
- name: configmap
mountPath: /mnt/garage.toml
@@ -54,6 +61,8 @@ spec:
name: s3-api
- containerPort: 3902
name: web-api
+ - containerPort: 3903
+ name: admin
volumeMounts:
- name: meta
mountPath: /mnt/meta
@@ -79,6 +88,23 @@ spec:
name: {{ include "garage.fullname" . }}-config
- name: etc
emptyDir: {}
+ {{- if .Values.persistence.enabled }}
+ {{- if eq .Values.deployment.kind "DaemonSet" }}
+ - name: meta
+ hostPath:
+ path: {{ .Values.persistence.meta.hostPath }}
+ type: DirectoryOrCreate
+ - name: data
+ hostPath:
+ path: {{ .Values.persistence.data.hostPath }}
+ type: DirectoryOrCreate
+ {{- end }}
+ {{- else }}
+ - name: meta
+ emptyDir: {}
+ - name: data
+ emptyDir: {}
+ {{- end }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
@@ -91,7 +117,7 @@ spec:
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
- {{- if .Values.persistence.enabled }}
+ {{- if and .Values.persistence.enabled (eq .Values.deployment.kind "StatefulSet") }}
volumeClaimTemplates:
- metadata:
name: meta
diff --git a/script/helm/garage/values.yaml b/script/helm/garage/values.yaml
index 608ee53c..3a1e41b9 100644
--- a/script/helm/garage/values.yaml
+++ b/script/helm/garage/values.yaml
@@ -4,8 +4,6 @@
# Garage configuration. These values go to garage.toml
garage:
- metadataDir: "/mnt/meta"
- dataDir: "/mnt/data"
# Default to 3 replicas, see the replication_mode section at
# https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/
replicationMode: "3"
@@ -22,6 +20,41 @@ garage:
web:
rootDomain: ".web.garage.tld"
index: "index.html"
+ # Template for the garage configuration
+ # Values can be templated
+ # ref: https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/
+ garage.toml: |-
+ metadata_dir = "/mnt/meta"
+ data_dir = "/mnt/data"
+
+ replication_mode = "{{ .Values.garage.replicationMode }}"
+
+ rpc_bind_addr = "{{ .Values.garage.rpcBindAddr }}"
+ # rpc_secret will be populated by the init container from a k8s secret object
+ rpc_secret = "__RPC_SECRET_REPLACE__"
+
+ bootstrap_peers = {{ .Values.garage.bootstrapPeers }}
+
+ [kubernetes_discovery]
+ namespace = "{{ .Release.Namespace }}"
+ service_name = "{{ include "garage.fullname" . }}"
+ skip_crd = {{ .Values.garage.kubernetesSkipCrd }}
+
+ [s3_api]
+ s3_region = "{{ .Values.garage.s3.api.region }}"
+ api_bind_addr = "[::]:3900"
+ root_domain = "{{ .Values.garage.s3.api.rootDomain }}"
+
+ [s3_web]
+ bind_addr = "[::]:3902"
+ root_domain = "{{ .Values.garage.s3.web.rootDomain }}"
+ index = "{{ .Values.garage.s3.web.index }}"
+
+ [admin]
+ api_bind_addr = "[::]:3903"
+ {{- if .Values.monitoring.tracing.sink }}
+ trace_sink = "{{ .Values.monitoring.tracing.sink }}"
+ {{- end }}
# Data persistence
persistence:
@@ -29,12 +62,20 @@ persistence:
meta:
# storageClass: "fast-storage-class"
size: 100Mi
+ # used only for daemon sets
+ hostPath: /var/lib/garage/meta
data:
# storageClass: "slow-storage-class"
size: 100Mi
+ # used only for daemon sets
+ hostPath: /var/lib/garage/data
-# Number of StatefulSet replicas/garage nodes to start
-replicaCount: 3
+# Deployment configuration
+deployment:
+ # Switchable to DaemonSet
+ kind: StatefulSet
+ # Number of StatefulSet replicas/garage nodes to start
+ replicaCount: 3
image:
repository: dxflrs/amd64_garage
@@ -42,6 +83,11 @@ image:
tag: ""
pullPolicy: IfNotPresent
+initImage:
+ repository: busybox
+ tag: stable
+ pullPolicy: IfNotPresent
+
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
@@ -57,18 +103,19 @@ serviceAccount:
podAnnotations: {}
-podSecurityContext: {}
- # fsGroup: 2000
+podSecurityContext:
+ runAsUser: 1000
+ runAsGroup: 1000
+ fsGroup: 1000
+ runAsNonRoot: true
securityContext:
# The default security context is heavily restricted
# feel free to tune it to your requirements
capabilities:
drop:
- - ALL
+ - ALL
readOnlyRootFilesystem: true
- runAsNonRoot: true
- runAsUser: 1000
service:
# You can rely on any service to expose your cluster
@@ -82,6 +129,7 @@ service:
web:
port: 3902
# NOTE: the admin API is excluded for now as it is not consistent across nodes
+
ingress:
s3:
api:
@@ -145,3 +193,22 @@ nodeSelector: {}
tolerations: []
affinity: {}
+
+monitoring:
+ metrics:
+ # If true, a service for monitoring is created with a prometheus.io/scrape annotation
+ enabled: false
+ serviceMonitor:
+ # If true, a ServiceMonitor CRD is created for a prometheus operator
+ # https://github.com/coreos/prometheus-operator
+ enabled: false
+ path: /metrics
+ # namespace: monitoring (defaults to use the namespace this chart is deployed to)
+ labels: {}
+ interval: 15s
+ scheme: http
+ tlsConfig: {}
+ scrapeTimeout: 10s
+ relabelings: []
+ tracing:
+ sink: "" \ No newline at end of file
diff --git a/shell.nix b/shell.nix
index 10058fc4..0d510e33 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,6 +1,4 @@
-{
- system ? builtins.currentSystem,
-}:
+{ system ? builtins.currentSystem, }:
with import ./nix/common.nix;
@@ -13,161 +11,152 @@ let
manifest-tool = (import ./nix/manifest-tool.nix) pkgs;
winscp = (import ./nix/winscp.nix) pkgs;
-in
- {
- /* --- Rust Shell ---
- * Use it to compile Garage
- */
- rust = pkgs.mkShell {
- nativeBuildInputs = [
- #pkgs.rustPlatform.rust.rustc
- pkgs.rustPlatform.rust.cargo
- #pkgs.clippy
- pkgs.rustfmt
- #pkgs.perl
- #pkgs.protobuf
- #pkgs.pkg-config
- #pkgs.openssl
- pkgs.file
- #cargo2nix.packages.x86_64-linux.cargo2nix
- ];
- };
-
- /* --- Integration shell ---
- * Use it to test Garage with common S3 clients
- */
- integration = pkgs.mkShell {
- nativeBuildInputs = [
- winscp
- pkgs.s3cmd
- pkgs.awscli2
- pkgs.minio-client
- pkgs.rclone
- pkgs.socat
- pkgs.psmisc
- pkgs.which
- pkgs.openssl
- pkgs.curl
- pkgs.jq
- ];
- };
-
- /* --- Release shell ---
- * A shell built to make releasing easier
- */
- release = pkgs.mkShell {
- shellHook = ''
-function refresh_toolchain {
- pass show deuxfleurs/nix_priv_key > /tmp/nix-signing-key.sec
- nix copy \
- --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/tmp/nix-signing-key.sec' \
- $(nix-store -qR \
- $(nix-build --no-build-output --no-out-link nix/toolchain.nix))
- rm /tmp/nix-signing-key.sec
-}
-
-function refresh_cache {
- pass show deuxfleurs/nix_priv_key > /tmp/nix-signing-key.sec
- for attr in clippy.amd64 test.amd64 pkgs.{amd64,i386,arm,arm64}.{debug,release}; do
- echo "Updating cache for ''${attr}"
- derivation=$(nix-instantiate --attr ''${attr})
- nix copy -j8 \
- --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/tmp/nix-signing-key.sec' \
- $(nix-store -qR ''${derivation%\!bin})
- done
- rm /tmp/nix-signing-key.sec
-}
-
-function refresh_flake_cache {
- pass show deuxfleurs/nix_priv_key > /tmp/nix-signing-key.sec
- for attr in packages.x86_64-linux.default; do
- echo "Updating cache for ''${attr}"
- derivation=$(nix path-info --derivation ".#''${attr}")
- nix copy -j8 \
- --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/tmp/nix-signing-key.sec' \
- $(nix-store -qR ''${derivation})
- done
- rm /tmp/nix-signing-key.sec
-}
-
-function to_s3 {
- aws \
- --endpoint-url https://garage.deuxfleurs.fr \
- --region garage \
- s3 cp \
- ./result-bin/bin/garage \
- s3://garagehq.deuxfleurs.fr/_releases/''${DRONE_TAG:-$DRONE_COMMIT}/''${TARGET}/garage
-}
-
-function to_docker {
- executor \
- --force \
- --customPlatform="''${DOCKER_PLATFORM}" \
- --destination "''${CONTAINER_NAME}:''${CONTAINER_TAG}" \
- --context dir://`pwd` \
- --verbosity=debug
-}
-
-function multiarch_docker {
- manifest-tool push from-spec <(cat <<EOF
-image: dxflrs/garage:''${CONTAINER_TAG}
-manifests:
- -
- image: dxflrs/arm64_garage:''${CONTAINER_TAG}
- platform:
- architecture: arm64
- os: linux
- -
- image: dxflrs/amd64_garage:''${CONTAINER_TAG}
- platform:
- architecture: amd64
- os: linux
- -
- image: dxflrs/386_garage:''${CONTAINER_TAG}
- platform:
- architecture: 386
- os: linux
- -
- image: dxflrs/arm_garage:''${CONTAINER_TAG}
- platform:
- architecture: arm
- os: linux
-EOF
- )
-}
-
-function refresh_index {
- aws \
- --endpoint-url https://garage.deuxfleurs.fr \
- --region garage \
- s3 ls \
- --recursive \
- s3://garagehq.deuxfleurs.fr/_releases/ \
- > aws-list.txt
-
- nix-build nix/build_index.nix
+in {
+ # --- Rust Shell ---
+ # Use it to compile Garage
+ rust = pkgs.mkShell {
+ nativeBuildInputs = [
+ #pkgs.rustPlatform.rust.rustc
+ pkgs.rustPlatform.rust.cargo
+ #pkgs.clippy
+ pkgs.rustfmt
+ #pkgs.perl
+ #pkgs.protobuf
+ #pkgs.pkg-config
+ #pkgs.openssl
+ pkgs.file
+ #cargo2nix.packages.x86_64-linux.cargo2nix
+ ];
+ };
- aws \
- --endpoint-url https://garage.deuxfleurs.fr \
- --region garage \
- s3 cp \
- result/share/_releases.json \
- s3://garagehq.deuxfleurs.fr/
+ # --- Integration shell ---
+ # Use it to test Garage with common S3 clients
+ integration = pkgs.mkShell {
+ nativeBuildInputs = [
+ winscp
+ pkgs.s3cmd
+ pkgs.awscli2
+ pkgs.minio-client
+ pkgs.rclone
+ pkgs.socat
+ pkgs.psmisc
+ pkgs.which
+ pkgs.openssl
+ pkgs.curl
+ pkgs.jq
+ ];
+ };
- aws \
- --endpoint-url https://garage.deuxfleurs.fr \
- --region garage \
- s3 cp \
- result/share/_releases.html \
- s3://garagehq.deuxfleurs.fr/
+ # --- Release shell ---
+ # A shell built to make releasing easier
+ release = pkgs.mkShell {
+ shellHook = ''
+ function refresh_toolchain {
+ pass show deuxfleurs/nix_priv_key > /tmp/nix-signing-key.sec
+ nix copy \
+ --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/tmp/nix-signing-key.sec' \
+ $(nix-store -qR \
+ $(nix-build --no-build-output --no-out-link nix/toolchain.nix))
+ rm /tmp/nix-signing-key.sec
+ }
+
+ function refresh_cache {
+ pass show deuxfleurs/nix_priv_key > /tmp/nix-signing-key.sec
+ for attr in clippy.amd64 test.amd64 pkgs.{amd64,i386,arm,arm64}.{debug,release}; do
+ echo "Updating cache for ''${attr}"
+ derivation=$(nix-instantiate --attr ''${attr})
+ nix copy -j8 \
+ --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/tmp/nix-signing-key.sec' \
+ $(nix-store -qR ''${derivation%\!bin})
+ done
+ rm /tmp/nix-signing-key.sec
+ }
+
+ function refresh_flake_cache {
+ pass show deuxfleurs/nix_priv_key > /tmp/nix-signing-key.sec
+ for attr in packages.x86_64-linux.default devShell.x86_64-linux; do
+ echo "Updating cache for ''${attr}"
+ derivation=$(nix path-info --derivation ".#''${attr}")
+ nix copy -j8 \
+ --to 's3://nix?endpoint=garage.deuxfleurs.fr&region=garage&secret-key=/tmp/nix-signing-key.sec' \
+ $(nix-store -qR ''${derivation})
+ done
+ rm /tmp/nix-signing-key.sec
+ }
+
+ function to_s3 {
+ aws \
+ --endpoint-url https://garage.deuxfleurs.fr \
+ --region garage \
+ s3 cp \
+ ./result-bin/bin/garage \
+ s3://garagehq.deuxfleurs.fr/_releases/''${DRONE_TAG:-$DRONE_COMMIT}/''${TARGET}/garage
+ }
+
+ function to_docker {
+ executor \
+ --force \
+ --customPlatform="''${DOCKER_PLATFORM}" \
+ --destination "''${CONTAINER_NAME}:''${CONTAINER_TAG}" \
+ --context dir://`pwd` \
+ --verbosity=debug
+ }
+
+ function multiarch_docker {
+ manifest-tool push from-spec <(cat <<EOF
+ image: dxflrs/garage:''${CONTAINER_TAG}
+ manifests:
+ -
+ image: dxflrs/arm64_garage:''${CONTAINER_TAG}
+ platform:
+ architecture: arm64
+ os: linux
+ -
+ image: dxflrs/amd64_garage:''${CONTAINER_TAG}
+ platform:
+ architecture: amd64
+ os: linux
+ -
+ image: dxflrs/386_garage:''${CONTAINER_TAG}
+ platform:
+ architecture: 386
+ os: linux
+ -
+ image: dxflrs/arm_garage:''${CONTAINER_TAG}
+ platform:
+ architecture: arm
+ os: linux
+ EOF
+ )
+ }
+
+ function refresh_index {
+ aws \
+ --endpoint-url https://garage.deuxfleurs.fr \
+ --region garage \
+ s3 ls \
+ --recursive \
+ s3://garagehq.deuxfleurs.fr/_releases/ \
+ > aws-list.txt
+
+ nix-build nix/build_index.nix
+
+ aws \
+ --endpoint-url https://garage.deuxfleurs.fr \
+ --region garage \
+ s3 cp \
+ result/share/_releases.json \
+ s3://garagehq.deuxfleurs.fr/
+
+ aws \
+ --endpoint-url https://garage.deuxfleurs.fr \
+ --region garage \
+ s3 cp \
+ result/share/_releases.html \
+ s3://garagehq.deuxfleurs.fr/
+ }
+ '';
+ nativeBuildInputs = [ pkgs.awscli2 kaniko manifest-tool ];
+ };
}
- '';
- nativeBuildInputs = [
- pkgs.awscli2
- kaniko
- manifest-tool
- ];
- };
- }
-
diff --git a/src/api/Cargo.toml b/src/api/Cargo.toml
index dba0bbef..9babec02 100644
--- a/src/api/Cargo.toml
+++ b/src/api/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage_api"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -14,35 +14,35 @@ path = "lib.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-garage_model = { version = "0.8.1", path = "../model" }
-garage_table = { version = "0.8.1", path = "../table" }
-garage_block = { version = "0.8.1", path = "../block" }
-garage_util = { version = "0.8.1", path = "../util" }
-garage_rpc = { version = "0.8.1", path = "../rpc" }
+garage_model = { version = "0.8.2", path = "../model" }
+garage_table = { version = "0.8.2", path = "../table" }
+garage_block = { version = "0.8.2", path = "../block" }
+garage_util = { version = "0.8.2", path = "../util" }
+garage_rpc = { version = "0.8.2", path = "../rpc" }
async-trait = "0.1.7"
-base64 = "0.13"
+base64 = "0.21"
bytes = "1.0"
chrono = "0.4"
crypto-common = "0.1"
err-derive = "0.3"
hex = "0.4"
hmac = "0.12"
-idna = "0.2"
-tracing = "0.1.30"
+idna = "0.3"
+tracing = "0.1"
md-5 = "0.10"
nom = "7.1"
sha2 = "0.10"
futures = "0.3"
futures-util = "0.3"
-pin-project = "1.0.11"
+pin-project = "1.0.12"
tokio = { version = "1.0", default-features = false, features = ["rt", "rt-multi-thread", "io-util", "net", "time", "macros", "sync", "signal", "fs"] }
tokio-stream = "0.1"
form_urlencoded = "1.0.0"
http = "0.2"
-httpdate = "0.3"
+httpdate = "1.0"
http-range = "0.1"
hyper = { version = "0.14", features = ["server", "http1", "runtime", "tcp", "stream"] }
multer = "2.0"
@@ -51,8 +51,8 @@ roxmltree = "0.14"
serde = { version = "1.0", features = ["derive"] }
serde_bytes = "0.11"
serde_json = "1.0"
-quick-xml = { version = "0.21", features = [ "serialize" ] }
-url = "2.1"
+quick-xml = { version = "0.26", features = [ "serialize" ] }
+url = "2.3"
opentelemetry = "0.17"
opentelemetry-prometheus = { version = "0.10", optional = true }
diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs
index 2d325fb1..58dd38d8 100644
--- a/src/api/admin/api_server.rs
+++ b/src/api/admin/api_server.rs
@@ -1,3 +1,4 @@
+use std::collections::HashMap;
use std::net::SocketAddr;
use std::sync::Arc;
@@ -77,6 +78,60 @@ impl AdminApiServer {
.body(Body::empty())?)
}
+ async fn handle_check_website_enabled(
+ &self,
+ req: Request<Body>,
+ ) -> Result<Response<Body>, Error> {
+ let query_params: HashMap<String, String> = req
+ .uri()
+ .query()
+ .map(|v| {
+ url::form_urlencoded::parse(v.as_bytes())
+ .into_owned()
+ .collect()
+ })
+ .unwrap_or_else(HashMap::new);
+
+ let has_domain_key = query_params.contains_key("domain");
+
+ if !has_domain_key {
+ return Err(Error::bad_request("No domain query string found"));
+ }
+
+ let domain = query_params
+ .get("domain")
+ .ok_or_internal_error("Could not parse domain query string")?;
+
+ let bucket_id = self
+ .garage
+ .bucket_helper()
+ .resolve_global_bucket_name(&domain)
+ .await?
+ .ok_or(HelperError::NoSuchBucket(domain.to_string()))?;
+
+ let bucket = self
+ .garage
+ .bucket_helper()
+ .get_existing_bucket(bucket_id)
+ .await?;
+
+ let bucket_state = bucket.state.as_option().unwrap();
+ let bucket_website_config = bucket_state.website_config.get();
+
+ match bucket_website_config {
+ Some(_v) => {
+ Ok(Response::builder()
+ .status(StatusCode::OK)
+ .body(Body::from(format!(
+ "Bucket '{domain}' is authorized for website hosting"
+ )))?)
+ }
+ None => Err(Error::bad_request(format!(
+ "Bucket '{domain}' is not authorized for website hosting"
+ ))),
+ }
+ }
+
fn handle_health(&self) -> Result<Response<Body>, Error> {
let health = self.garage.system.health();
@@ -174,6 +229,7 @@ impl ApiHandler for AdminApiServer {
match endpoint {
Endpoint::Options => self.handle_options(&req),
+ Endpoint::CheckWebsiteEnabled => self.handle_check_website_enabled(req).await,
Endpoint::Health => self.handle_health(),
Endpoint::Metrics => self.handle_metrics(),
Endpoint::GetClusterStatus => handle_get_cluster_status(&self.garage).await,
diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs
index 65034852..e60f07ca 100644
--- a/src/api/admin/bucket.rs
+++ b/src/api/admin/bucket.rs
@@ -167,7 +167,7 @@ async fn bucket_info_results(
let quotas = state.quotas.get();
let res =
GetBucketInfoResult {
- id: hex::encode(&bucket.id),
+ id: hex::encode(bucket.id),
global_aliases: state
.aliases
.items()
@@ -575,6 +575,6 @@ pub async fn handle_local_unalias_bucket(
// ---- HELPER ----
fn parse_bucket_id(id: &str) -> Result<Uuid, Error> {
- let id_hex = hex::decode(&id).ok_or_bad_request("Invalid bucket id")?;
+ let id_hex = hex::decode(id).ok_or_bad_request("Invalid bucket id")?;
Ok(Uuid::try_from(&id_hex).ok_or_bad_request("Invalid bucket id")?)
}
diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs
index 540c6009..b2508d2e 100644
--- a/src/api/admin/cluster.rs
+++ b/src/api/admin/cluster.rs
@@ -20,6 +20,7 @@ pub async fn handle_get_cluster_status(garage: &Arc<Garage>) -> Result<Response<
node: hex::encode(garage.system.id),
garage_version: garage_util::version::garage_version(),
garage_features: garage_util::version::garage_features(),
+ rust_version: garage_util::version::rust_version(),
db_engine: garage.db.engine(),
known_nodes: garage
.system
@@ -106,6 +107,7 @@ struct GetClusterStatusResponse {
node: String,
garage_version: &'static str,
garage_features: Option<&'static [&'static str]>,
+ rust_version: &'static str,
db_engine: String,
known_nodes: HashMap<String, KnownNodeResp>,
layout: GetClusterLayoutResponse,
diff --git a/src/api/admin/router.rs b/src/api/admin/router.rs
index 62e6abc3..0dcb1546 100644
--- a/src/api/admin/router.rs
+++ b/src/api/admin/router.rs
@@ -17,6 +17,7 @@ router_match! {@func
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Endpoint {
Options,
+ CheckWebsiteEnabled,
Health,
Metrics,
GetClusterStatus,
@@ -91,6 +92,7 @@ impl Endpoint {
let res = router_match!(@gen_path_parser (req.method(), path, query) [
OPTIONS _ => Options,
+ GET "/check" => CheckWebsiteEnabled,
GET "/health" => Health,
GET "/metrics" => Metrics,
GET "/v0/status" => GetClusterStatus,
@@ -136,6 +138,7 @@ impl Endpoint {
pub fn authorization_type(&self) -> Authorization {
match self {
Self::Health => Authorization::None,
+ Self::CheckWebsiteEnabled => Authorization::None,
Self::Metrics => Authorization::MetricsToken,
_ => Authorization::AdminToken,
}
diff --git a/src/api/generic_server.rs b/src/api/generic_server.rs
index 62fe4e5a..d0354d28 100644
--- a/src/api/generic_server.rs
+++ b/src/api/generic_server.rs
@@ -19,6 +19,7 @@ use opentelemetry::{
};
use garage_util::error::Error as GarageError;
+use garage_util::forwarded_headers;
use garage_util::metrics::{gen_trace_id, RecordDuration};
pub(crate) trait ApiEndpoint: Send + Sync + 'static {
@@ -125,7 +126,20 @@ impl<A: ApiHandler> ApiServer<A> {
addr: SocketAddr,
) -> Result<Response<Body>, GarageError> {
let uri = req.uri().clone();
- info!("{} {} {}", addr, req.method(), uri);
+
+ if let Ok(forwarded_for_ip_addr) =
+ forwarded_headers::handle_forwarded_for_headers(&req.headers())
+ {
+ info!(
+ "{} (via {}) {} {}",
+ forwarded_for_ip_addr,
+ addr,
+ req.method(),
+ uri
+ );
+ } else {
+ info!("{} {} {}", addr, req.method(), uri);
+ }
debug!("{:?}", req);
let tracer = opentelemetry::global::tracer("garage");
diff --git a/src/api/k2v/api_server.rs b/src/api/k2v/api_server.rs
index 084867b5..bb85b2e7 100644
--- a/src/api/k2v/api_server.rs
+++ b/src/api/k2v/api_server.rs
@@ -164,6 +164,9 @@ impl ApiHandler for K2VApiServer {
Endpoint::InsertBatch {} => handle_insert_batch(garage, bucket_id, req).await,
Endpoint::ReadBatch {} => handle_read_batch(garage, bucket_id, req).await,
Endpoint::DeleteBatch {} => handle_delete_batch(garage, bucket_id, req).await,
+ Endpoint::PollRange { partition_key } => {
+ handle_poll_range(garage, bucket_id, &partition_key, req).await
+ }
Endpoint::Options => unreachable!(),
};
diff --git a/src/api/k2v/batch.rs b/src/api/k2v/batch.rs
index 78035362..26d678da 100644
--- a/src/api/k2v/batch.rs
+++ b/src/api/k2v/batch.rs
@@ -1,10 +1,10 @@
use std::sync::Arc;
+use base64::prelude::*;
use hyper::{Body, Request, Response, StatusCode};
use serde::{Deserialize, Serialize};
use garage_util::data::*;
-use garage_util::error::Error as GarageError;
use garage_table::{EnumerationOrder, TableSchema};
@@ -25,15 +25,13 @@ pub async fn handle_insert_batch(
let mut items2 = vec![];
for it in items {
- let ct = it
- .ct
- .map(|s| CausalContext::parse(&s))
- .transpose()
- .ok_or_bad_request("Invalid causality token")?;
+ let ct = it.ct.map(|s| CausalContext::parse_helper(&s)).transpose()?;
let v = match it.v {
- Some(vs) => {
- DvvsValue::Value(base64::decode(vs).ok_or_bad_request("Invalid base64 value")?)
- }
+ Some(vs) => DvvsValue::Value(
+ BASE64_STANDARD
+ .decode(vs)
+ .ok_or_bad_request("Invalid base64 value")?,
+ ),
None => DvvsValue::Deleted,
};
items2.push((it.pk, it.sk, ct, v));
@@ -65,10 +63,7 @@ pub async fn handle_read_batch(
resps.push(resp?);
}
- let resp_json = serde_json::to_string_pretty(&resps).map_err(GarageError::from)?;
- Ok(Response::builder()
- .status(StatusCode::OK)
- .body(Body::from(resp_json))?)
+ Ok(json_ok_response(&resps)?)
}
async fn handle_read_batch_query(
@@ -160,10 +155,7 @@ pub async fn handle_delete_batch(
resps.push(resp?);
}
- let resp_json = serde_json::to_string_pretty(&resps).map_err(GarageError::from)?;
- Ok(Response::builder()
- .status(StatusCode::OK)
- .body(Body::from(resp_json))?)
+ Ok(json_ok_response(&resps)?)
}
async fn handle_delete_batch_query(
@@ -257,6 +249,53 @@ async fn handle_delete_batch_query(
})
}
+pub(crate) async fn handle_poll_range(
+ garage: Arc<Garage>,
+ bucket_id: Uuid,
+ partition_key: &str,
+ req: Request<Body>,
+) -> Result<Response<Body>, Error> {
+ use garage_model::k2v::sub::PollRange;
+
+ let query = parse_json_body::<PollRangeQuery>(req).await?;
+
+ let timeout_msec = query.timeout.unwrap_or(300).clamp(1, 600) * 1000;
+
+ let resp = garage
+ .k2v
+ .rpc
+ .poll_range(
+ PollRange {
+ partition: K2VItemPartition {
+ bucket_id,
+ partition_key: partition_key.to_string(),
+ },
+ start: query.start,
+ end: query.end,
+ prefix: query.prefix,
+ },
+ query.seen_marker,
+ timeout_msec,
+ )
+ .await?;
+
+ if let Some((items, seen_marker)) = resp {
+ let resp = PollRangeResponse {
+ items: items
+ .into_iter()
+ .map(|(_k, i)| ReadBatchResponseItem::from(i))
+ .collect::<Vec<_>>(),
+ seen_marker,
+ };
+
+ Ok(json_ok_response(&resp)?)
+ } else {
+ Ok(Response::builder()
+ .status(StatusCode::NOT_MODIFIED)
+ .body(Body::empty())?)
+ }
+}
+
#[derive(Deserialize)]
struct InsertBatchItem {
pk: String,
@@ -322,7 +361,7 @@ impl ReadBatchResponseItem {
.values()
.iter()
.map(|v| match v {
- DvvsValue::Value(x) => Some(base64::encode(x)),
+ DvvsValue::Value(x) => Some(BASE64_STANDARD.encode(x)),
DvvsValue::Deleted => None,
})
.collect::<Vec<_>>();
@@ -361,3 +400,24 @@ struct DeleteBatchResponse {
#[serde(rename = "deletedItems")]
deleted_items: usize,
}
+
+#[derive(Deserialize)]
+struct PollRangeQuery {
+ #[serde(default)]
+ prefix: Option<String>,
+ #[serde(default)]
+ start: Option<String>,
+ #[serde(default)]
+ end: Option<String>,
+ #[serde(default)]
+ timeout: Option<u64>,
+ #[serde(default, rename = "seenMarker")]
+ seen_marker: Option<String>,
+}
+
+#[derive(Serialize)]
+struct PollRangeResponse {
+ items: Vec<ReadBatchResponseItem>,
+ #[serde(rename = "seenMarker")]
+ seen_marker: String,
+}
diff --git a/src/api/k2v/error.rs b/src/api/k2v/error.rs
index 42491466..4eb017ab 100644
--- a/src/api/k2v/error.rs
+++ b/src/api/k2v/error.rs
@@ -19,7 +19,7 @@ pub enum Error {
// Category: cannot process
/// Authorization Header Malformed
- #[error(display = "Authorization header malformed, expected scope: {}", _0)]
+ #[error(display = "Authorization header malformed, unexpected scope: {}", _0)]
AuthorizationHeaderMalformed(String),
/// The object requested don't exists
diff --git a/src/api/k2v/index.rs b/src/api/k2v/index.rs
index 210950bf..6c1d4a91 100644
--- a/src/api/k2v/index.rs
+++ b/src/api/k2v/index.rs
@@ -1,10 +1,9 @@
use std::sync::Arc;
-use hyper::{Body, Response, StatusCode};
+use hyper::{Body, Response};
use serde::Serialize;
use garage_util::data::*;
-use garage_util::error::Error as GarageError;
use garage_rpc::ring::Ring;
use garage_table::util::*;
@@ -12,6 +11,7 @@ use garage_table::util::*;
use garage_model::garage::Garage;
use garage_model::k2v::item_table::{BYTES, CONFLICTS, ENTRIES, VALUES};
+use crate::helpers::*;
use crate::k2v::error::*;
use crate::k2v::range::read_range;
@@ -68,10 +68,7 @@ pub async fn handle_read_index(
next_start,
};
- let resp_json = serde_json::to_string_pretty(&resp).map_err(GarageError::from)?;
- Ok(Response::builder()
- .status(StatusCode::OK)
- .body(Body::from(resp_json))?)
+ Ok(json_ok_response(&resp)?)
}
#[derive(Serialize)]
diff --git a/src/api/k2v/item.rs b/src/api/k2v/item.rs
index f85138c7..e13a0f30 100644
--- a/src/api/k2v/item.rs
+++ b/src/api/k2v/item.rs
@@ -1,5 +1,6 @@
use std::sync::Arc;
+use base64::prelude::*;
use http::header;
use hyper::{Body, Request, Response, StatusCode};
@@ -81,7 +82,7 @@ impl ReturnFormat {
.iter()
.map(|v| match v {
DvvsValue::Deleted => serde_json::Value::Null,
- DvvsValue::Value(v) => serde_json::Value::String(base64::encode(v)),
+ DvvsValue::Value(v) => serde_json::Value::String(BASE64_STANDARD.encode(v)),
})
.collect::<Vec<_>>();
let json_body =
@@ -133,9 +134,8 @@ pub async fn handle_insert_item(
.get(X_GARAGE_CAUSALITY_TOKEN)
.map(|s| s.to_str())
.transpose()?
- .map(CausalContext::parse)
- .transpose()
- .ok_or_bad_request("Invalid causality token")?;
+ .map(CausalContext::parse_helper)
+ .transpose()?;
let body = hyper::body::to_bytes(req.into_body()).await?;
let value = DvvsValue::Value(body.to_vec());
@@ -169,9 +169,8 @@ pub async fn handle_delete_item(
.get(X_GARAGE_CAUSALITY_TOKEN)
.map(|s| s.to_str())
.transpose()?
- .map(CausalContext::parse)
- .transpose()
- .ok_or_bad_request("Invalid causality token")?;
+ .map(CausalContext::parse_helper)
+ .transpose()?;
let value = DvvsValue::Deleted;
@@ -208,15 +207,17 @@ pub async fn handle_poll_item(
let causal_context =
CausalContext::parse(&causality_token).ok_or_bad_request("Invalid causality token")?;
+ let timeout_msec = timeout_secs.unwrap_or(300).clamp(1, 600) * 1000;
+
let item = garage
.k2v
.rpc
- .poll(
+ .poll_item(
bucket_id,
partition_key,
sort_key,
causal_context,
- timeout_secs.unwrap_or(300) * 1000,
+ timeout_msec,
)
.await?;
diff --git a/src/api/k2v/router.rs b/src/api/k2v/router.rs
index e7a3dd69..1cc58be5 100644
--- a/src/api/k2v/router.rs
+++ b/src/api/k2v/router.rs
@@ -32,6 +32,9 @@ pub enum Endpoint {
causality_token: String,
timeout: Option<u64>,
},
+ PollRange {
+ partition_key: String,
+ },
ReadBatch {
},
ReadIndex {
@@ -113,6 +116,7 @@ impl Endpoint {
@gen_parser
(query.keyword.take().unwrap_or_default(), partition_key, query, None),
key: [
+ POLL_RANGE => PollRange,
],
no_key: [
EMPTY => ReadBatch,
@@ -142,6 +146,7 @@ impl Endpoint {
@gen_parser
(query.keyword.take().unwrap_or_default(), partition_key, query, None),
key: [
+ POLL_RANGE => PollRange,
],
no_key: [
EMPTY => InsertBatch,
@@ -234,7 +239,8 @@ impl Endpoint {
generateQueryParameters! {
keywords: [
"delete" => DELETE,
- "search" => SEARCH
+ "search" => SEARCH,
+ "poll_range" => POLL_RANGE
],
fields: [
"prefix" => prefix,
diff --git a/src/api/s3/bucket.rs b/src/api/s3/bucket.rs
index 8471385f..733981e1 100644
--- a/src/api/s3/bucket.rs
+++ b/src/api/s3/bucket.rs
@@ -305,7 +305,7 @@ fn parse_create_bucket_xml(xml_bytes: &[u8]) -> Option<Option<String>> {
let mut ret = None;
for item in cbc.children() {
if item.has_tag_name("LocationConstraint") {
- if ret != None {
+ if ret.is_some() {
return None;
}
ret = Some(item.text()?.to_string());
diff --git a/src/api/s3/error.rs b/src/api/s3/error.rs
index 67009d63..c50cff9f 100644
--- a/src/api/s3/error.rs
+++ b/src/api/s3/error.rs
@@ -21,7 +21,7 @@ pub enum Error {
// Category: cannot process
/// Authorization Header Malformed
- #[error(display = "Authorization header malformed, expected scope: {}", _0)]
+ #[error(display = "Authorization header malformed, unexpected scope: {}", _0)]
AuthorizationHeaderMalformed(String),
/// The object requested don't exists
diff --git a/src/api/s3/list.rs b/src/api/s3/list.rs
index e5f486c8..5cb0d65a 100644
--- a/src/api/s3/list.rs
+++ b/src/api/s3/list.rs
@@ -3,6 +3,7 @@ use std::collections::{BTreeMap, BTreeSet};
use std::iter::{Iterator, Peekable};
use std::sync::Arc;
+use base64::prelude::*;
use hyper::{Body, Response};
use garage_util::data::*;
@@ -129,11 +130,11 @@ pub async fn handle_list(
next_continuation_token: match (query.is_v2, &pagination) {
(true, Some(RangeBegin::AfterKey { key })) => Some(s3_xml::Value(format!(
"]{}",
- base64::encode(key.as_bytes())
+ BASE64_STANDARD.encode(key.as_bytes())
))),
(true, Some(RangeBegin::IncludingKey { key, .. })) => Some(s3_xml::Value(format!(
"[{}",
- base64::encode(key.as_bytes())
+ BASE64_STANDARD.encode(key.as_bytes())
))),
_ => None,
},
@@ -583,14 +584,16 @@ impl ListObjectsQuery {
(Some(token), _) => match &token[..1] {
"[" => Ok(RangeBegin::IncludingKey {
key: String::from_utf8(
- base64::decode(token[1..].as_bytes())
+ BASE64_STANDARD
+ .decode(token[1..].as_bytes())
.ok_or_bad_request("Invalid continuation token")?,
)?,
fallback_key: None,
}),
"]" => Ok(RangeBegin::AfterKey {
key: String::from_utf8(
- base64::decode(token[1..].as_bytes())
+ BASE64_STANDARD
+ .decode(token[1..].as_bytes())
.ok_or_bad_request("Invalid continuation token")?,
)?,
}),
diff --git a/src/api/s3/post_object.rs b/src/api/s3/post_object.rs
index d063faa4..f2098ab0 100644
--- a/src/api/s3/post_object.rs
+++ b/src/api/s3/post_object.rs
@@ -4,6 +4,7 @@ use std::ops::RangeInclusive;
use std::sync::Arc;
use std::task::{Context, Poll};
+use base64::prelude::*;
use bytes::Bytes;
use chrono::{DateTime, Duration, Utc};
use futures::{Stream, StreamExt};
@@ -138,7 +139,9 @@ pub async fn handle_post_object(
.get_existing_bucket(bucket_id)
.await?;
- let decoded_policy = base64::decode(&policy).ok_or_bad_request("Invalid policy")?;
+ let decoded_policy = BASE64_STANDARD
+ .decode(policy)
+ .ok_or_bad_request("Invalid policy")?;
let decoded_policy: Policy =
serde_json::from_slice(&decoded_policy).ok_or_bad_request("Invalid policy")?;
diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs
index 97b8e4e3..350ab884 100644
--- a/src/api/s3/put.rs
+++ b/src/api/s3/put.rs
@@ -1,6 +1,7 @@
use std::collections::{BTreeMap, BTreeSet, HashMap};
use std::sync::Arc;
+use base64::prelude::*;
use futures::prelude::*;
use hyper::body::{Body, Bytes};
use hyper::header::{HeaderMap, HeaderValue};
@@ -119,6 +120,17 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>(
return Ok((version_uuid, data_md5sum_hex));
}
+ // The following consists in many steps that can each fail.
+ // Keep track that some cleanup will be needed if things fail
+ // before everything is finished (cleanup is done using the Drop trait).
+ let mut interrupted_cleanup = InterruptedCleanup(Some((
+ garage.clone(),
+ bucket.id,
+ key.into(),
+ version_uuid,
+ version_timestamp,
+ )));
+
// Write version identifier in object table so that we have a trace
// that we are uploading something
let mut object_version = ObjectVersion {
@@ -139,44 +151,27 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>(
// Transfer data and verify checksum
let first_block_hash = async_blake2sum(first_block.clone()).await;
- let tx_result = (|| async {
- let (total_size, data_md5sum, data_sha256sum) = read_and_put_blocks(
- &garage,
- &version,
- 1,
- first_block,
- first_block_hash,
- &mut chunker,
- )
- .await?;
-
- ensure_checksum_matches(
- data_md5sum.as_slice(),
- data_sha256sum,
- content_md5.as_deref(),
- content_sha256,
- )?;
-
- check_quotas(&garage, bucket, key, total_size).await?;
+ let (total_size, data_md5sum, data_sha256sum) = read_and_put_blocks(
+ &garage,
+ &version,
+ 1,
+ first_block,
+ first_block_hash,
+ &mut chunker,
+ )
+ .await?;
- Ok((total_size, data_md5sum))
- })()
- .await;
+ ensure_checksum_matches(
+ data_md5sum.as_slice(),
+ data_sha256sum,
+ content_md5.as_deref(),
+ content_sha256,
+ )?;
- // If something went wrong, clean up
- let (total_size, md5sum_arr) = match tx_result {
- Ok(rv) => rv,
- Err(e) => {
- // Mark object as aborted, this will free the blocks further down
- object_version.state = ObjectVersionState::Aborted;
- let object = Object::new(bucket.id, key.into(), vec![object_version.clone()]);
- garage.object_table.insert(&object).await?;
- return Err(e);
- }
- };
+ check_quotas(&garage, bucket, key, total_size).await?;
// Save final object state, marked as Complete
- let md5sum_hex = hex::encode(md5sum_arr);
+ let md5sum_hex = hex::encode(data_md5sum);
object_version.state = ObjectVersionState::Complete(ObjectVersionData::FirstBlock(
ObjectVersionMeta {
headers,
@@ -188,6 +183,10 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>(
let object = Object::new(bucket.id, key.into(), vec![object_version]);
garage.object_table.insert(&object).await?;
+ // We were not interrupted, everything went fine.
+ // We won't have to clean up on drop.
+ interrupted_cleanup.cancel();
+
Ok((version_uuid, md5sum_hex))
}
@@ -209,7 +208,7 @@ fn ensure_checksum_matches(
}
}
if let Some(expected_md5) = content_md5 {
- if expected_md5.trim_matches('"') != base64::encode(data_md5sum) {
+ if expected_md5.trim_matches('"') != BASE64_STANDARD.encode(data_md5sum) {
return Err(Error::bad_request("Unable to validate content-md5"));
} else {
trace!("Successfully validated content-md5");
@@ -426,6 +425,33 @@ pub fn put_response(version_uuid: Uuid, md5sum_hex: String) -> Response<Body> {
.unwrap()
}
+struct InterruptedCleanup(Option<(Arc<Garage>, Uuid, String, Uuid, u64)>);
+
+impl InterruptedCleanup {
+ fn cancel(&mut self) {
+ drop(self.0.take());
+ }
+}
+impl Drop for InterruptedCleanup {
+ fn drop(&mut self) {
+ if let Some((garage, bucket_id, key, version_uuid, version_ts)) = self.0.take() {
+ tokio::spawn(async move {
+ let object_version = ObjectVersion {
+ uuid: version_uuid,
+ timestamp: version_ts,
+ state: ObjectVersionState::Aborted,
+ };
+ let object = Object::new(bucket_id, key, vec![object_version]);
+ if let Err(e) = garage.object_table.insert(&object).await {
+ warn!("Cannot cleanup after aborted PutObject: {}", e);
+ }
+ });
+ }
+ }
+}
+
+// ----
+
pub async fn handle_create_multipart_upload(
garage: Arc<Garage>,
req: &Request<Body>,
diff --git a/src/api/signature/error.rs b/src/api/signature/error.rs
index f5a067bd..f0d7c816 100644
--- a/src/api/signature/error.rs
+++ b/src/api/signature/error.rs
@@ -11,7 +11,7 @@ pub enum Error {
Common(CommonError),
/// Authorization Header Malformed
- #[error(display = "Authorization header malformed, expected scope: {}", _0)]
+ #[error(display = "Authorization header malformed, unexpected scope: {}", _0)]
AuthorizationHeaderMalformed(String),
// Category: bad request
diff --git a/src/block/Cargo.toml b/src/block/Cargo.toml
index 1e4eb64e..c6985754 100644
--- a/src/block/Cargo.toml
+++ b/src/block/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage_block"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -14,10 +14,10 @@ path = "lib.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-garage_db = { version = "0.8.1", path = "../db" }
-garage_rpc = { version = "0.8.1", path = "../rpc" }
-garage_util = { version = "0.8.1", path = "../util" }
-garage_table = { version = "0.8.1", path = "../table" }
+garage_db = { version = "0.8.2", path = "../db" }
+garage_rpc = { version = "0.8.2", path = "../rpc" }
+garage_util = { version = "0.8.2", path = "../util" }
+garage_table = { version = "0.8.2", path = "../table" }
opentelemetry = "0.17"
@@ -25,11 +25,11 @@ arc-swap = "1.5"
async-trait = "0.1.7"
bytes = "1.0"
hex = "0.4"
-tracing = "0.1.30"
+tracing = "0.1"
rand = "0.8"
async-compression = { version = "0.3", features = ["tokio", "zstd"] }
-zstd = { version = "0.9", default-features = false }
+zstd = { version = "0.12", default-features = false }
serde = { version = "1.0", default-features = false, features = ["derive", "rc"] }
serde_bytes = "0.11"
diff --git a/src/block/manager.rs b/src/block/manager.rs
index 1b5a5df0..26278974 100644
--- a/src/block/manager.rs
+++ b/src/block/manager.rs
@@ -6,6 +6,7 @@ use std::time::Duration;
use arc_swap::ArcSwapOption;
use async_trait::async_trait;
use bytes::Bytes;
+use rand::prelude::*;
use serde::{Deserialize, Serialize};
use futures::Stream;
@@ -23,10 +24,12 @@ use garage_rpc::rpc_helper::netapp::stream::{stream_asyncread, ByteStream};
use garage_db as db;
-use garage_util::background::BackgroundRunner;
+use garage_util::background::{vars, BackgroundRunner};
use garage_util::data::*;
use garage_util::error::*;
use garage_util::metrics::RecordDuration;
+use garage_util::persister::PersisterShared;
+use garage_util::time::msec_to_rfc3339;
use garage_rpc::rpc_helper::OrderTag;
use garage_rpc::system::System;
@@ -89,6 +92,7 @@ pub struct BlockManager {
pub(crate) metrics: BlockManagerMetrics,
+ pub scrub_persister: PersisterShared<ScrubWorkerPersisted>,
tx_scrub_command: ArcSwapOption<mpsc::Sender<ScrubWorkerCommand>>,
}
@@ -125,8 +129,14 @@ impl BlockManager {
.netapp
.endpoint("garage_block/manager.rs/Rpc".to_string());
- let metrics =
- BlockManagerMetrics::new(rc.rc.clone(), resync.queue.clone(), resync.errors.clone());
+ let metrics = BlockManagerMetrics::new(
+ compression_level,
+ rc.rc.clone(),
+ resync.queue.clone(),
+ resync.errors.clone(),
+ );
+
+ let scrub_persister = PersisterShared::new(&system.metadata_dir, "scrub_info");
let block_manager = Arc::new(Self {
replication,
@@ -138,9 +148,11 @@ impl BlockManager {
system,
endpoint,
metrics,
+ scrub_persister,
tx_scrub_command: ArcSwapOption::new(None),
});
block_manager.endpoint.set_handler(block_manager.clone());
+ block_manager.scrub_persister.set_with(|_| ()).unwrap();
block_manager
}
@@ -155,7 +167,31 @@ impl BlockManager {
// Spawn scrub worker
let (scrub_tx, scrub_rx) = mpsc::channel(1);
self.tx_scrub_command.store(Some(Arc::new(scrub_tx)));
- bg.spawn_worker(ScrubWorker::new(self.clone(), scrub_rx));
+ bg.spawn_worker(ScrubWorker::new(
+ self.clone(),
+ scrub_rx,
+ self.scrub_persister.clone(),
+ ));
+ }
+
+ pub fn register_bg_vars(&self, vars: &mut vars::BgVars) {
+ self.resync.register_bg_vars(vars);
+
+ vars.register_rw(
+ &self.scrub_persister,
+ "scrub-tranquility",
+ |p| p.get_with(|x| x.tranquility),
+ |p, tranquility| p.set_with(|x| x.tranquility = tranquility),
+ );
+ vars.register_ro(&self.scrub_persister, "scrub-last-completed", |p| {
+ p.get_with(|x| msec_to_rfc3339(x.time_last_complete_scrub))
+ });
+ vars.register_ro(&self.scrub_persister, "scrub-next-run", |p| {
+ p.get_with(|x| msec_to_rfc3339(x.time_next_run_scrub))
+ });
+ vars.register_ro(&self.scrub_persister, "scrub-corruptions_detected", |p| {
+ p.get_with(|x| x.corruptions_detected)
+ });
}
/// Ask nodes that might have a (possibly compressed) block for it
@@ -649,14 +685,21 @@ impl BlockManagerLocked {
}
};
- let mut path2 = path.clone();
- path2.set_extension("tmp");
- let mut f = fs::File::create(&path2).await?;
+ let mut path_tmp = path.clone();
+ let tmp_extension = format!("tmp{}", hex::encode(thread_rng().gen::<[u8; 4]>()));
+ path_tmp.set_extension(tmp_extension);
+
+ let mut delete_on_drop = DeleteOnDrop(Some(path_tmp.clone()));
+
+ let mut f = fs::File::create(&path_tmp).await?;
f.write_all(data).await?;
f.sync_all().await?;
drop(f);
- fs::rename(path2, path).await?;
+ fs::rename(path_tmp, path).await?;
+
+ delete_on_drop.cancel();
+
if let Some(to_delete) = to_delete {
fs::remove_file(to_delete).await?;
}
@@ -722,3 +765,23 @@ async fn read_stream_to_end(mut stream: ByteStream) -> Result<Bytes, Error> {
.concat()
.into())
}
+
+struct DeleteOnDrop(Option<PathBuf>);
+
+impl DeleteOnDrop {
+ fn cancel(&mut self) {
+ drop(self.0.take());
+ }
+}
+
+impl Drop for DeleteOnDrop {
+ fn drop(&mut self) {
+ if let Some(path) = self.0.take() {
+ tokio::spawn(async move {
+ if let Err(e) = fs::remove_file(&path).await {
+ debug!("DeleteOnDrop failed for {}: {}", path.display(), e);
+ }
+ });
+ }
+ }
+}
diff --git a/src/block/metrics.rs b/src/block/metrics.rs
index fbef95af..6659df32 100644
--- a/src/block/metrics.rs
+++ b/src/block/metrics.rs
@@ -5,6 +5,7 @@ use garage_db::counted_tree_hack::CountedTree;
/// TableMetrics reference all counter used for metrics
pub struct BlockManagerMetrics {
+ pub(crate) _compression_level: ValueObserver<u64>,
pub(crate) _rc_size: ValueObserver<u64>,
pub(crate) _resync_queue_len: ValueObserver<u64>,
pub(crate) _resync_errored_blocks: ValueObserver<u64>,
@@ -25,9 +26,23 @@ pub struct BlockManagerMetrics {
}
impl BlockManagerMetrics {
- pub fn new(rc_tree: db::Tree, resync_queue: CountedTree, resync_errors: CountedTree) -> Self {
+ pub fn new(
+ compression_level: Option<i32>,
+ rc_tree: db::Tree,
+ resync_queue: CountedTree,
+ resync_errors: CountedTree,
+ ) -> Self {
let meter = global::meter("garage_model/block");
Self {
+ _compression_level: meter
+ .u64_value_observer("block.compression_level", move |observer| {
+ match compression_level {
+ Some(v) => observer.observe(v as u64, &[]),
+ None => observer.observe(0_u64, &[]),
+ }
+ })
+ .with_description("Garage compression level for node")
+ .init(),
_rc_size: meter
.u64_value_observer("block.rc_size", move |observer| {
if let Ok(Some(v)) = rc_tree.fast_len() {
diff --git a/src/block/rc.rs b/src/block/rc.rs
index 8dae3960..94cb5eea 100644
--- a/src/block/rc.rs
+++ b/src/block/rc.rs
@@ -24,9 +24,9 @@ impl BlockRc {
tx: &mut db::Transaction,
hash: &Hash,
) -> db::TxOpResult<bool> {
- let old_rc = RcEntry::parse_opt(tx.get(&self.rc, &hash)?);
+ let old_rc = RcEntry::parse_opt(tx.get(&self.rc, hash)?);
match old_rc.increment().serialize() {
- Some(x) => tx.insert(&self.rc, &hash, x)?,
+ Some(x) => tx.insert(&self.rc, hash, x)?,
None => unreachable!(),
};
Ok(old_rc.is_zero())
@@ -39,10 +39,10 @@ impl BlockRc {
tx: &mut db::Transaction,
hash: &Hash,
) -> db::TxOpResult<bool> {
- let new_rc = RcEntry::parse_opt(tx.get(&self.rc, &hash)?).decrement();
+ let new_rc = RcEntry::parse_opt(tx.get(&self.rc, hash)?).decrement();
match new_rc.serialize() {
- Some(x) => tx.insert(&self.rc, &hash, x)?,
- None => tx.remove(&self.rc, &hash)?,
+ Some(x) => tx.insert(&self.rc, hash, x)?,
+ None => tx.remove(&self.rc, hash)?,
};
Ok(matches!(new_rc, RcEntry::Deletable { .. }))
}
@@ -57,10 +57,10 @@ impl BlockRc {
pub(crate) fn clear_deleted_block_rc(&self, hash: &Hash) -> Result<(), Error> {
let now = now_msec();
self.rc.db().transaction(|mut tx| {
- let rcval = RcEntry::parse_opt(tx.get(&self.rc, &hash)?);
+ let rcval = RcEntry::parse_opt(tx.get(&self.rc, hash)?);
match rcval {
RcEntry::Deletable { at_time } if now > at_time => {
- tx.remove(&self.rc, &hash)?;
+ tx.remove(&self.rc, hash)?;
}
_ => (),
};
diff --git a/src/block/repair.rs b/src/block/repair.rs
index a6ded65a..c89484d9 100644
--- a/src/block/repair.rs
+++ b/src/block/repair.rs
@@ -4,7 +4,7 @@ use std::sync::Arc;
use std::time::Duration;
use async_trait::async_trait;
-use serde::{Deserialize, Serialize};
+use rand::Rng;
use tokio::fs;
use tokio::select;
use tokio::sync::mpsc;
@@ -13,14 +13,14 @@ use tokio::sync::watch;
use garage_util::background::*;
use garage_util::data::*;
use garage_util::error::*;
-use garage_util::persister::Persister;
+use garage_util::persister::PersisterShared;
use garage_util::time::*;
use garage_util::tranquilizer::Tranquilizer;
use crate::manager::*;
-// Full scrub every 30 days
-const SCRUB_INTERVAL: Duration = Duration::from_secs(3600 * 24 * 30);
+// Full scrub every 25 days with a random element of 10 days mixed in below
+const SCRUB_INTERVAL: Duration = Duration::from_secs(3600 * 24 * 25);
// Scrub tranquility is initially set to 4, but can be changed in the CLI
// and the updated version is persisted over Garage restarts
const INITIAL_SCRUB_TRANQUILITY: u32 = 4;
@@ -161,6 +161,51 @@ impl Worker for RepairWorker {
// and whose parameter (esp. speed) can be controlled at runtime.
// ---- ---- ----
+mod v081 {
+ use serde::{Deserialize, Serialize};
+
+ #[derive(Serialize, Deserialize)]
+ pub struct ScrubWorkerPersisted {
+ pub tranquility: u32,
+ pub(crate) time_last_complete_scrub: u64,
+ pub(crate) corruptions_detected: u64,
+ }
+
+ impl garage_util::migrate::InitialFormat for ScrubWorkerPersisted {}
+}
+
+mod v082 {
+ use serde::{Deserialize, Serialize};
+
+ use super::v081;
+
+ #[derive(Serialize, Deserialize)]
+ pub struct ScrubWorkerPersisted {
+ pub tranquility: u32,
+ pub(crate) time_last_complete_scrub: u64,
+ pub(crate) time_next_run_scrub: u64,
+ pub(crate) corruptions_detected: u64,
+ }
+
+ impl garage_util::migrate::Migrate for ScrubWorkerPersisted {
+ type Previous = v081::ScrubWorkerPersisted;
+ const VERSION_MARKER: &'static [u8] = b"G082bswp";
+
+ fn migrate(old: v081::ScrubWorkerPersisted) -> ScrubWorkerPersisted {
+ use crate::repair::randomize_next_scrub_run_time;
+
+ ScrubWorkerPersisted {
+ tranquility: old.tranquility,
+ time_last_complete_scrub: old.time_last_complete_scrub,
+ time_next_run_scrub: randomize_next_scrub_run_time(old.time_last_complete_scrub),
+ corruptions_detected: old.corruptions_detected,
+ }
+ }
+ }
+}
+
+pub use v082::*;
+
pub struct ScrubWorker {
manager: Arc<BlockManager>,
rx_cmd: mpsc::Receiver<ScrubWorkerCommand>,
@@ -168,17 +213,33 @@ pub struct ScrubWorker {
work: ScrubWorkerState,
tranquilizer: Tranquilizer,
- persister: Persister<ScrubWorkerPersisted>,
- persisted: ScrubWorkerPersisted,
+ persister: PersisterShared<ScrubWorkerPersisted>,
+}
+
+fn randomize_next_scrub_run_time(timestamp: u64) -> u64 {
+ // Take SCRUB_INTERVAL and mix in a random interval of 10 days to attempt to
+ // balance scrub load across different cluster nodes.
+
+ let next_run_timestamp = timestamp
+ + SCRUB_INTERVAL
+ .saturating_add(Duration::from_secs(
+ rand::thread_rng().gen_range(0..3600 * 24 * 10),
+ ))
+ .as_millis() as u64;
+
+ next_run_timestamp
}
-#[derive(Serialize, Deserialize)]
-struct ScrubWorkerPersisted {
- tranquility: u32,
- time_last_complete_scrub: u64,
- corruptions_detected: u64,
+impl Default for ScrubWorkerPersisted {
+ fn default() -> Self {
+ ScrubWorkerPersisted {
+ time_last_complete_scrub: 0,
+ time_next_run_scrub: randomize_next_scrub_run_time(now_msec()),
+ tranquility: INITIAL_SCRUB_TRANQUILITY,
+ corruptions_detected: 0,
+ }
+ }
}
-impl garage_util::migrate::InitialFormat for ScrubWorkerPersisted {}
enum ScrubWorkerState {
Running(BlockStoreIterator),
@@ -198,27 +259,20 @@ pub enum ScrubWorkerCommand {
Pause(Duration),
Resume,
Cancel,
- SetTranquility(u32),
}
impl ScrubWorker {
- pub fn new(manager: Arc<BlockManager>, rx_cmd: mpsc::Receiver<ScrubWorkerCommand>) -> Self {
- let persister = Persister::new(&manager.system.metadata_dir, "scrub_info");
- let persisted = match persister.load() {
- Ok(v) => v,
- Err(_) => ScrubWorkerPersisted {
- time_last_complete_scrub: 0,
- tranquility: INITIAL_SCRUB_TRANQUILITY,
- corruptions_detected: 0,
- },
- };
+ pub(crate) fn new(
+ manager: Arc<BlockManager>,
+ rx_cmd: mpsc::Receiver<ScrubWorkerCommand>,
+ persister: PersisterShared<ScrubWorkerPersisted>,
+ ) -> Self {
Self {
manager,
rx_cmd,
work: ScrubWorkerState::Finished,
tranquilizer: Tranquilizer::new(30),
persister,
- persisted,
}
}
@@ -227,6 +281,7 @@ impl ScrubWorker {
ScrubWorkerCommand::Start => {
self.work = match std::mem::take(&mut self.work) {
ScrubWorkerState::Finished => {
+ info!("Scrub worker initializing, now performing datastore scrub");
let iterator = BlockStoreIterator::new(&self.manager);
ScrubWorkerState::Running(iterator)
}
@@ -267,12 +322,6 @@ impl ScrubWorker {
}
}
}
- ScrubWorkerCommand::SetTranquility(t) => {
- self.persisted.tranquility = t;
- if let Err(e) = self.persister.save_async(&self.persisted).await {
- error!("Could not save new tranquilitiy value: {}", e);
- }
- }
}
}
}
@@ -284,9 +333,19 @@ impl Worker for ScrubWorker {
}
fn status(&self) -> WorkerStatus {
+ let (corruptions_detected, tranquility, time_last_complete_scrub, time_next_run_scrub) =
+ self.persister.get_with(|p| {
+ (
+ p.corruptions_detected,
+ p.tranquility,
+ p.time_last_complete_scrub,
+ p.time_next_run_scrub,
+ )
+ });
+
let mut s = WorkerStatus {
- persistent_errors: Some(self.persisted.corruptions_detected),
- tranquility: Some(self.persisted.tranquility),
+ persistent_errors: Some(corruptions_detected),
+ tranquility: Some(tranquility),
..Default::default()
};
match &self.work {
@@ -298,10 +357,16 @@ impl Worker for ScrubWorker {
s.freeform = vec![format!("Scrub paused, resumes at {}", msec_to_rfc3339(*rt))];
}
ScrubWorkerState::Finished => {
- s.freeform = vec![format!(
- "Last scrub completed at {}",
- msec_to_rfc3339(self.persisted.time_last_complete_scrub)
- )];
+ s.freeform = vec![
+ format!(
+ "Last scrub completed at {}",
+ msec_to_rfc3339(time_last_complete_scrub),
+ ),
+ format!(
+ "Next scrub scheduled for {}",
+ msec_to_rfc3339(time_next_run_scrub)
+ ),
+ ];
}
}
s
@@ -321,20 +386,30 @@ impl Worker for ScrubWorker {
match self.manager.read_block(&hash).await {
Err(Error::CorruptData(_)) => {
error!("Found corrupt data block during scrub: {:?}", hash);
- self.persisted.corruptions_detected += 1;
- self.persister.save_async(&self.persisted).await?;
+ self.persister.set_with(|p| p.corruptions_detected += 1)?;
}
Err(e) => return Err(e),
_ => (),
};
Ok(self
.tranquilizer
- .tranquilize_worker(self.persisted.tranquility))
+ .tranquilize_worker(self.persister.get_with(|p| p.tranquility)))
} else {
- self.persisted.time_last_complete_scrub = now_msec();
- self.persister.save_async(&self.persisted).await?;
+ let now = now_msec();
+ let next_scrub_timestamp = randomize_next_scrub_run_time(now);
+
+ self.persister.set_with(|p| {
+ p.time_last_complete_scrub = now;
+ p.time_next_run_scrub = next_scrub_timestamp;
+ })?;
self.work = ScrubWorkerState::Finished;
self.tranquilizer.clear();
+
+ info!(
+ "Datastore scrub completed, next scrub scheduled for {}",
+ msec_to_rfc3339(next_scrub_timestamp)
+ );
+
Ok(WorkerState::Idle)
}
}
@@ -347,7 +422,7 @@ impl Worker for ScrubWorker {
ScrubWorkerState::Running(_) => return WorkerState::Busy,
ScrubWorkerState::Paused(_, resume_time) => (*resume_time, ScrubWorkerCommand::Resume),
ScrubWorkerState::Finished => (
- self.persisted.time_last_complete_scrub + SCRUB_INTERVAL.as_millis() as u64,
+ self.persister.get_with(|p| p.time_next_run_scrub),
ScrubWorkerCommand::Start,
),
};
@@ -462,11 +537,11 @@ impl BlockStoreIterator {
let ent_type = data_dir_ent.file_type().await?;
let name = name.strip_suffix(".zst").unwrap_or(&name);
- if name.len() == 2 && hex::decode(&name).is_ok() && ent_type.is_dir() {
+ if name.len() == 2 && hex::decode(name).is_ok() && ent_type.is_dir() {
let path = data_dir_ent.path();
self.path.push(ReadingDir::Pending(path));
} else if name.len() == 64 {
- if let Ok(h) = hex::decode(&name) {
+ if let Ok(h) = hex::decode(name) {
let mut hash = [0u8; 32];
hash.copy_from_slice(&h);
return Ok(Some(hash.into()));
diff --git a/src/block/resync.rs b/src/block/resync.rs
index 9c7b3b0e..ea280ad4 100644
--- a/src/block/resync.rs
+++ b/src/block/resync.rs
@@ -3,7 +3,6 @@ use std::convert::TryInto;
use std::sync::{Arc, Mutex};
use std::time::Duration;
-use arc_swap::ArcSwap;
use async_trait::async_trait;
use serde::{Deserialize, Serialize};
@@ -22,7 +21,7 @@ use garage_util::background::*;
use garage_util::data::*;
use garage_util::error::*;
use garage_util::metrics::RecordDuration;
-use garage_util::persister::Persister;
+use garage_util::persister::PersisterShared;
use garage_util::time::*;
use garage_util::tranquilizer::Tranquilizer;
@@ -49,13 +48,12 @@ const INITIAL_RESYNC_TRANQUILITY: u32 = 2;
pub struct BlockResyncManager {
pub(crate) queue: CountedTree,
- pub(crate) notify: Notify,
+ pub(crate) notify: Arc<Notify>,
pub(crate) errors: CountedTree,
busy_set: BusySet,
- persister: Persister<ResyncPersistedConfig>,
- persisted: ArcSwap<ResyncPersistedConfig>,
+ persister: PersisterShared<ResyncPersistedConfig>,
}
#[derive(Serialize, Deserialize, Clone, Copy)]
@@ -64,6 +62,14 @@ struct ResyncPersistedConfig {
tranquility: u32,
}
impl garage_util::migrate::InitialFormat for ResyncPersistedConfig {}
+impl Default for ResyncPersistedConfig {
+ fn default() -> Self {
+ ResyncPersistedConfig {
+ n_workers: 1,
+ tranquility: INITIAL_RESYNC_TRANQUILITY,
+ }
+ }
+}
enum ResyncIterResult {
BusyDidSomething,
@@ -91,22 +97,14 @@ impl BlockResyncManager {
.expect("Unable to open block_local_resync_errors tree");
let errors = CountedTree::new(errors).expect("Could not count block_local_resync_errors");
- let persister = Persister::new(&system.metadata_dir, "resync_cfg");
- let persisted = match persister.load() {
- Ok(v) => v,
- Err(_) => ResyncPersistedConfig {
- n_workers: 1,
- tranquility: INITIAL_RESYNC_TRANQUILITY,
- },
- };
+ let persister = PersisterShared::new(&system.metadata_dir, "resync_cfg");
Self {
queue,
- notify: Notify::new(),
+ notify: Arc::new(Notify::new()),
errors,
busy_set: Arc::new(Mutex::new(HashSet::new())),
persister,
- persisted: ArcSwap::new(Arc::new(persisted)),
}
}
@@ -142,6 +140,38 @@ impl BlockResyncManager {
)))
}
+ pub fn register_bg_vars(&self, vars: &mut vars::BgVars) {
+ let notify = self.notify.clone();
+ vars.register_rw(
+ &self.persister,
+ "resync-worker-count",
+ |p| p.get_with(|x| x.n_workers),
+ move |p, n_workers| {
+ if !(1..=MAX_RESYNC_WORKERS).contains(&n_workers) {
+ return Err(Error::Message(format!(
+ "Invalid number of resync workers, must be between 1 and {}",
+ MAX_RESYNC_WORKERS
+ )));
+ }
+ p.set_with(|x| x.n_workers = n_workers)?;
+ notify.notify_waiters();
+ Ok(())
+ },
+ );
+
+ let notify = self.notify.clone();
+ vars.register_rw(
+ &self.persister,
+ "resync-tranquility",
+ |p| p.get_with(|x| x.tranquility),
+ move |p, tranquility| {
+ p.set_with(|x| x.tranquility = tranquility)?;
+ notify.notify_waiters();
+ Ok(())
+ },
+ );
+ }
+
// ---- Resync loop ----
// This part manages a queue of blocks that need to be
@@ -436,33 +466,6 @@ impl BlockResyncManager {
Ok(())
}
-
- async fn update_persisted(
- &self,
- update: impl Fn(&mut ResyncPersistedConfig),
- ) -> Result<(), Error> {
- let mut cfg: ResyncPersistedConfig = *self.persisted.load().as_ref();
- update(&mut cfg);
- self.persister.save_async(&cfg).await?;
- self.persisted.store(Arc::new(cfg));
- self.notify.notify_waiters();
- Ok(())
- }
-
- pub async fn set_n_workers(&self, n_workers: usize) -> Result<(), Error> {
- if !(1..=MAX_RESYNC_WORKERS).contains(&n_workers) {
- return Err(Error::Message(format!(
- "Invalid number of resync workers, must be between 1 and {}",
- MAX_RESYNC_WORKERS
- )));
- }
- self.update_persisted(|cfg| cfg.n_workers = n_workers).await
- }
-
- pub async fn set_tranquility(&self, tranquility: u32) -> Result<(), Error> {
- self.update_persisted(|cfg| cfg.tranquility = tranquility)
- .await
- }
}
impl Drop for BusyBlock {
@@ -477,15 +480,18 @@ pub(crate) struct ResyncWorker {
manager: Arc<BlockManager>,
tranquilizer: Tranquilizer,
next_delay: Duration,
+ persister: PersisterShared<ResyncPersistedConfig>,
}
impl ResyncWorker {
pub(crate) fn new(index: usize, manager: Arc<BlockManager>) -> Self {
+ let persister = manager.resync.persister.clone();
Self {
index,
manager,
tranquilizer: Tranquilizer::new(30),
next_delay: Duration::from_secs(10),
+ persister,
}
}
}
@@ -497,9 +503,9 @@ impl Worker for ResyncWorker {
}
fn status(&self) -> WorkerStatus {
- let persisted = self.manager.resync.persisted.load();
+ let (n_workers, tranquility) = self.persister.get_with(|x| (x.n_workers, x.tranquility));
- if self.index >= persisted.n_workers {
+ if self.index >= n_workers {
return WorkerStatus {
freeform: vec!["This worker is currently disabled".into()],
..Default::default()
@@ -508,22 +514,24 @@ impl Worker for ResyncWorker {
WorkerStatus {
queue_length: Some(self.manager.resync.queue_len().unwrap_or(0) as u64),
- tranquility: Some(persisted.tranquility),
+ tranquility: Some(tranquility),
persistent_errors: Some(self.manager.resync.errors_len().unwrap_or(0) as u64),
..Default::default()
}
}
async fn work(&mut self, _must_exit: &mut watch::Receiver<bool>) -> Result<WorkerState, Error> {
- if self.index >= self.manager.resync.persisted.load().n_workers {
+ let (n_workers, tranquility) = self.persister.get_with(|x| (x.n_workers, x.tranquility));
+
+ if self.index >= n_workers {
return Ok(WorkerState::Idle);
}
self.tranquilizer.reset();
match self.manager.resync.resync_iter(&self.manager).await {
- Ok(ResyncIterResult::BusyDidSomething) => Ok(self
- .tranquilizer
- .tranquilize_worker(self.manager.resync.persisted.load().tranquility)),
+ Ok(ResyncIterResult::BusyDidSomething) => {
+ Ok(self.tranquilizer.tranquilize_worker(tranquility))
+ }
Ok(ResyncIterResult::BusyDidNothing) => Ok(WorkerState::Busy),
Ok(ResyncIterResult::IdleFor(delay)) => {
self.next_delay = delay;
@@ -542,7 +550,7 @@ impl Worker for ResyncWorker {
}
async fn wait_for_work(&mut self) -> WorkerState {
- while self.index >= self.manager.resync.persisted.load().n_workers {
+ while self.index >= self.persister.get_with(|x| x.n_workers) {
self.manager.resync.notify.notified().await
}
diff --git a/src/db/Cargo.toml b/src/db/Cargo.toml
index c479d9d1..e3a65857 100644
--- a/src/db/Cargo.toml
+++ b/src/db/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage_db"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -19,18 +19,18 @@ required-features = ["cli"]
[dependencies]
err-derive = "0.3"
hexdump = "0.1"
-tracing = "0.1.30"
+tracing = "0.1"
heed = { version = "0.11", default-features = false, features = ["lmdb"], optional = true }
-rusqlite = { version = "0.27", optional = true }
+rusqlite = { version = "0.28", optional = true }
sled = { version = "0.34", optional = true }
# cli deps
-clap = { version = "3.1.18", optional = true, features = ["derive", "env"] }
+clap = { version = "4.1", optional = true, features = ["derive", "env"] }
pretty_env_logger = { version = "0.4", optional = true }
[dev-dependencies]
-mktemp = "0.4"
+mktemp = "0.5"
[features]
default = [ "sled" ]
diff --git a/src/garage/Cargo.toml b/src/garage/Cargo.toml
index b43b0242..0cbdf890 100644
--- a/src/garage/Cargo.toml
+++ b/src/garage/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -21,22 +21,22 @@ path = "tests/lib.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-garage_db = { version = "0.8.1", path = "../db" }
-garage_api = { version = "0.8.1", path = "../api" }
-garage_block = { version = "0.8.1", path = "../block" }
-garage_model = { version = "0.8.1", path = "../model" }
-garage_rpc = { version = "0.8.1", path = "../rpc" }
-garage_table = { version = "0.8.1", path = "../table" }
-garage_util = { version = "0.8.1", path = "../util" }
-garage_web = { version = "0.8.1", path = "../web" }
+garage_db = { version = "0.8.2", path = "../db" }
+garage_api = { version = "0.8.2", path = "../api" }
+garage_block = { version = "0.8.2", path = "../block" }
+garage_model = { version = "0.8.2", path = "../model" }
+garage_rpc = { version = "0.8.2", path = "../rpc" }
+garage_table = { version = "0.8.2", path = "../table" }
+garage_util = { version = "0.8.2", path = "../util" }
+garage_web = { version = "0.8.2", path = "../web" }
backtrace = "0.3"
bytes = "1.0"
bytesize = "1.1"
-timeago = "0.3"
+timeago = "0.4"
parse_duration = "2.1"
hex = "0.4"
-tracing = { version = "0.1.30" }
+tracing = { version = "0.1" }
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
rand = "0.8"
async-trait = "0.1.7"
@@ -45,7 +45,7 @@ sodiumoxide = { version = "0.2.5-0", package = "kuska-sodiumoxide" }
serde = { version = "1.0", default-features = false, features = ["derive", "rc"] }
serde_bytes = "0.11"
structopt = { version = "0.3", default-features = false }
-toml = "0.5"
+toml = "0.6"
futures = "0.3"
futures-util = "0.3"
@@ -69,7 +69,7 @@ sha2 = "0.10"
static_init = "1.0"
assert-json-diff = "2.0"
serde_json = "1.0"
-base64 = "0.13"
+base64 = "0.21"
[features]
diff --git a/src/garage/admin.rs b/src/garage/admin.rs
index 58d645ac..e4e50520 100644
--- a/src/garage/admin.rs
+++ b/src/garage/admin.rs
@@ -15,10 +15,10 @@ use garage_util::time::*;
use garage_table::replication::*;
use garage_table::*;
+use garage_rpc::ring::PARTITION_BITS;
use garage_rpc::*;
use garage_block::manager::BlockResyncErrorInfo;
-use garage_block::repair::ScrubWorkerCommand;
use garage_model::bucket_alias_table::*;
use garage_model::bucket_table::*;
@@ -60,6 +60,7 @@ pub enum AdminRpc {
HashMap<usize, garage_util::background::WorkerInfo>,
WorkerListOpt,
),
+ WorkerVars(Vec<(Uuid, String, String)>),
WorkerInfo(usize, garage_util::background::WorkerInfo),
BlockErrorList(Vec<BlockResyncErrorInfo>),
BlockInfo {
@@ -783,6 +784,7 @@ impl AdminRpcHandler {
for node in ring.layout.node_ids().iter() {
let mut opt = opt.clone();
opt.all_nodes = false;
+ opt.skip_global = true;
writeln!(&mut ret, "\n======================").unwrap();
writeln!(&mut ret, "Stats for node {:?}:", node).unwrap();
@@ -799,6 +801,15 @@ impl AdminRpcHandler {
Err(e) => writeln!(&mut ret, "Network error: {}", e).unwrap(),
}
}
+
+ writeln!(&mut ret, "\n======================").unwrap();
+ write!(
+ &mut ret,
+ "Cluster statistics:\n\n{}",
+ self.gather_cluster_stats()
+ )
+ .unwrap();
+
Ok(AdminRpc::Ok(ret))
} else {
Ok(AdminRpc::Ok(self.gather_stats_local(opt)?))
@@ -809,32 +820,17 @@ impl AdminRpcHandler {
let mut ret = String::new();
writeln!(
&mut ret,
- "\nGarage version: {} [features: {}]",
+ "\nGarage version: {} [features: {}]\nRust compiler version: {}",
garage_util::version::garage_version(),
garage_util::version::garage_features()
.map(|list| list.join(", "))
.unwrap_or_else(|| "(unknown)".into()),
+ garage_util::version::rust_version(),
)
.unwrap();
writeln!(&mut ret, "\nDatabase engine: {}", self.garage.db.engine()).unwrap();
- // Gather ring statistics
- let ring = self.garage.system.ring.borrow().clone();
- let mut ring_nodes = HashMap::new();
- for (_i, loc) in ring.partitions().iter() {
- for n in ring.get_nodes(loc, ring.replication_factor).iter() {
- if !ring_nodes.contains_key(n) {
- ring_nodes.insert(*n, 0usize);
- }
- *ring_nodes.get_mut(n).unwrap() += 1;
- }
- }
- writeln!(&mut ret, "\nRing nodes & partition count:").unwrap();
- for (n, c) in ring_nodes.iter() {
- writeln!(&mut ret, " {:?} {}", n, c).unwrap();
- }
-
// Gather table statistics
let mut table = vec![" Table\tItems\tMklItems\tMklTodo\tGcTodo".into()];
table.push(self.gather_table_stats(&self.garage.bucket_table, opt.detailed)?);
@@ -881,12 +877,110 @@ impl AdminRpcHandler {
.unwrap();
if !opt.detailed {
- writeln!(&mut ret, "\nIf values are missing (marked as NC), consider adding the --detailed flag - this will be slow.").unwrap();
+ writeln!(&mut ret, "\nIf values are missing above (marked as NC), consider adding the --detailed flag (this will be slow).").unwrap();
+ }
+
+ if !opt.skip_global {
+ write!(&mut ret, "\n{}", self.gather_cluster_stats()).unwrap();
}
Ok(ret)
}
+ fn gather_cluster_stats(&self) -> String {
+ let mut ret = String::new();
+
+ // Gather storage node and free space statistics
+ let layout = &self.garage.system.ring.borrow().layout;
+ let mut node_partition_count = HashMap::<Uuid, u64>::new();
+ for short_id in layout.ring_assignment_data.iter() {
+ let id = layout.node_id_vec[*short_id as usize];
+ *node_partition_count.entry(id).or_default() += 1;
+ }
+ let node_info = self
+ .garage
+ .system
+ .get_known_nodes()
+ .into_iter()
+ .map(|n| (n.id, n))
+ .collect::<HashMap<_, _>>();
+
+ let mut table = vec![" ID\tHostname\tZone\tCapacity\tPart.\tDataAvail\tMetaAvail".into()];
+ for (id, parts) in node_partition_count.iter() {
+ let info = node_info.get(id);
+ let status = info.map(|x| &x.status);
+ let role = layout.roles.get(id).and_then(|x| x.0.as_ref());
+ let hostname = status.map(|x| x.hostname.as_str()).unwrap_or("?");
+ let zone = role.map(|x| x.zone.as_str()).unwrap_or("?");
+ let capacity = role
+ .map(|x| x.capacity_string())
+ .unwrap_or_else(|| "?".into());
+ let avail_str = |x| match x {
+ Some((avail, total)) => {
+ let pct = (avail as f64) / (total as f64) * 100.;
+ let avail = bytesize::ByteSize::b(avail);
+ let total = bytesize::ByteSize::b(total);
+ format!("{}/{} ({:.1}%)", avail, total, pct)
+ }
+ None => "?".into(),
+ };
+ let data_avail = avail_str(status.and_then(|x| x.data_disk_avail));
+ let meta_avail = avail_str(status.and_then(|x| x.meta_disk_avail));
+ table.push(format!(
+ " {:?}\t{}\t{}\t{}\t{}\t{}\t{}",
+ id, hostname, zone, capacity, parts, data_avail, meta_avail
+ ));
+ }
+ write!(
+ &mut ret,
+ "Storage nodes:\n{}",
+ format_table_to_string(table)
+ )
+ .unwrap();
+
+ let meta_part_avail = node_partition_count
+ .iter()
+ .filter_map(|(id, parts)| {
+ node_info
+ .get(id)
+ .and_then(|x| x.status.meta_disk_avail)
+ .map(|c| c.0 / *parts)
+ })
+ .collect::<Vec<_>>();
+ let data_part_avail = node_partition_count
+ .iter()
+ .filter_map(|(id, parts)| {
+ node_info
+ .get(id)
+ .and_then(|x| x.status.data_disk_avail)
+ .map(|c| c.0 / *parts)
+ })
+ .collect::<Vec<_>>();
+ if !meta_part_avail.is_empty() && !data_part_avail.is_empty() {
+ let meta_avail =
+ bytesize::ByteSize(meta_part_avail.iter().min().unwrap() * (1 << PARTITION_BITS));
+ let data_avail =
+ bytesize::ByteSize(data_part_avail.iter().min().unwrap() * (1 << PARTITION_BITS));
+ writeln!(
+ &mut ret,
+ "\nEstimated available storage space cluster-wide (might be lower in practice):"
+ )
+ .unwrap();
+ if meta_part_avail.len() < node_partition_count.len()
+ || data_part_avail.len() < node_partition_count.len()
+ {
+ writeln!(&mut ret, " data: < {}", data_avail).unwrap();
+ writeln!(&mut ret, " metadata: < {}", meta_avail).unwrap();
+ writeln!(&mut ret, "A precise estimate could not be given as information is missing for some storage nodes.").unwrap();
+ } else {
+ writeln!(&mut ret, " data: {}", data_avail).unwrap();
+ writeln!(&mut ret, " metadata: {}", meta_avail).unwrap();
+ }
+ }
+
+ ret
+ }
+
fn gather_table_stats<F, R>(
&self,
t: &Arc<Table<F, R>>,
@@ -943,32 +1037,101 @@ impl AdminRpcHandler {
.clone();
Ok(AdminRpc::WorkerInfo(*tid, info))
}
- WorkerOperation::Set { opt } => match opt {
- WorkerSetCmd::ScrubTranquility { tranquility } => {
- let scrub_command = ScrubWorkerCommand::SetTranquility(*tranquility);
- self.garage
- .block_manager
- .send_scrub_command(scrub_command)
- .await?;
- Ok(AdminRpc::Ok("Scrub tranquility updated".into()))
- }
- WorkerSetCmd::ResyncWorkerCount { worker_count } => {
- self.garage
- .block_manager
- .resync
- .set_n_workers(*worker_count)
- .await?;
- Ok(AdminRpc::Ok("Number of resync workers updated".into()))
+ WorkerOperation::Get {
+ all_nodes,
+ variable,
+ } => self.handle_get_var(*all_nodes, variable).await,
+ WorkerOperation::Set {
+ all_nodes,
+ variable,
+ value,
+ } => self.handle_set_var(*all_nodes, variable, value).await,
+ }
+ }
+
+ async fn handle_get_var(
+ &self,
+ all_nodes: bool,
+ variable: &Option<String>,
+ ) -> Result<AdminRpc, Error> {
+ if all_nodes {
+ let mut ret = vec![];
+ let ring = self.garage.system.ring.borrow().clone();
+ for node in ring.layout.node_ids().iter() {
+ let node = (*node).into();
+ match self
+ .endpoint
+ .call(
+ &node,
+ AdminRpc::Worker(WorkerOperation::Get {
+ all_nodes: false,
+ variable: variable.clone(),
+ }),
+ PRIO_NORMAL,
+ )
+ .await??
+ {
+ AdminRpc::WorkerVars(v) => ret.extend(v),
+ m => return Err(GarageError::unexpected_rpc_message(m).into()),
}
- WorkerSetCmd::ResyncTranquility { tranquility } => {
- self.garage
- .block_manager
- .resync
- .set_tranquility(*tranquility)
- .await?;
- Ok(AdminRpc::Ok("Resync tranquility updated".into()))
+ }
+ Ok(AdminRpc::WorkerVars(ret))
+ } else {
+ #[allow(clippy::collapsible_else_if)]
+ if let Some(v) = variable {
+ Ok(AdminRpc::WorkerVars(vec![(
+ self.garage.system.id,
+ v.clone(),
+ self.garage.bg_vars.get(v)?,
+ )]))
+ } else {
+ let mut vars = self.garage.bg_vars.get_all();
+ vars.sort();
+ Ok(AdminRpc::WorkerVars(
+ vars.into_iter()
+ .map(|(k, v)| (self.garage.system.id, k.to_string(), v))
+ .collect(),
+ ))
+ }
+ }
+ }
+
+ async fn handle_set_var(
+ &self,
+ all_nodes: bool,
+ variable: &str,
+ value: &str,
+ ) -> Result<AdminRpc, Error> {
+ if all_nodes {
+ let mut ret = vec![];
+ let ring = self.garage.system.ring.borrow().clone();
+ for node in ring.layout.node_ids().iter() {
+ let node = (*node).into();
+ match self
+ .endpoint
+ .call(
+ &node,
+ AdminRpc::Worker(WorkerOperation::Set {
+ all_nodes: false,
+ variable: variable.to_string(),
+ value: value.to_string(),
+ }),
+ PRIO_NORMAL,
+ )
+ .await??
+ {
+ AdminRpc::WorkerVars(v) => ret.extend(v),
+ m => return Err(GarageError::unexpected_rpc_message(m).into()),
}
- },
+ }
+ Ok(AdminRpc::WorkerVars(ret))
+ } else {
+ self.garage.bg_vars.set(variable, value)?;
+ Ok(AdminRpc::WorkerVars(vec![(
+ self.garage.system.id,
+ variable.to_string(),
+ value.to_string(),
+ )]))
}
}
diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs
index 0d180ecd..905b14d3 100644
--- a/src/garage/cli/cmd.rs
+++ b/src/garage/cli/cmd.rs
@@ -59,18 +59,29 @@ pub async fn cmd_status(rpc_cli: &Endpoint<SystemRpc, ()>, rpc_host: NodeID) ->
let layout = fetch_layout(rpc_cli, rpc_host).await?;
println!("==== HEALTHY NODES ====");
- let mut healthy_nodes = vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity".to_string()];
+ let mut healthy_nodes =
+ vec!["ID\tHostname\tAddress\tTags\tZone\tCapacity\tDataAvail".to_string()];
for adv in status.iter().filter(|adv| adv.is_up) {
match layout.roles.get(&adv.id) {
Some(NodeRoleV(Some(cfg))) => {
+ let data_avail = match &adv.status.data_disk_avail {
+ _ if cfg.capacity.is_none() => "N/A".into(),
+ Some((avail, total)) => {
+ let pct = (*avail as f64) / (*total as f64) * 100.;
+ let avail = bytesize::ByteSize::b(*avail);
+ format!("{} ({:.1}%)", avail, pct)
+ }
+ None => "?".into(),
+ };
healthy_nodes.push(format!(
- "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\t{capacity}",
+ "{id:?}\t{host}\t{addr}\t[{tags}]\t{zone}\t{capacity}\t{data_avail}",
id = adv.id,
host = adv.status.hostname,
addr = adv.addr,
tags = cfg.tags.join(","),
zone = cfg.zone,
capacity = cfg.capacity_string(),
+ data_avail = data_avail,
));
}
_ => {
@@ -191,6 +202,9 @@ pub async fn cmd_admin(
AdminRpc::WorkerList(wi, wlo) => {
print_worker_list(wi, wlo);
}
+ AdminRpc::WorkerVars(wv) => {
+ print_worker_vars(wv);
+ }
AdminRpc::WorkerInfo(tid, wi) => {
print_worker_info(tid, wi);
}
diff --git a/src/garage/cli/init.rs b/src/garage/cli/init.rs
index 511b53a6..20813f1c 100644
--- a/src/garage/cli/init.rs
+++ b/src/garage/cli/init.rs
@@ -14,11 +14,11 @@ pub fn node_id_command(config_file: PathBuf, quiet: bool) -> Result<(), Error> {
garage_rpc::system::read_node_id(&config.metadata_dir).err_context(READ_KEY_ERROR)?;
let idstr = if let Some(addr) = config.rpc_public_addr {
- let idstr = format!("{}@{}", hex::encode(&node_id), addr);
+ let idstr = format!("{}@{}", hex::encode(node_id), addr);
println!("{}", idstr);
idstr
} else {
- let idstr = hex::encode(&node_id);
+ let idstr = hex::encode(node_id);
println!("{}", idstr);
if !quiet {
diff --git a/src/garage/cli/structs.rs b/src/garage/cli/structs.rs
index dcb9fef9..986592ae 100644
--- a/src/garage/cli/structs.rs
+++ b/src/garage/cli/structs.rs
@@ -515,6 +515,11 @@ pub struct StatsOpt {
/// Gather detailed statistics (this can be long)
#[structopt(short = "d", long = "detailed")]
pub detailed: bool,
+
+ /// Don't show global cluster stats (internal use in RPC)
+ #[structopt(skip)]
+ #[serde(default)]
+ pub skip_global: bool,
}
#[derive(Serialize, Deserialize, StructOpt, Debug, Eq, PartialEq, Clone)]
@@ -528,11 +533,25 @@ pub enum WorkerOperation {
/// Get detailed information about a worker
#[structopt(name = "info", version = garage_version())]
Info { tid: usize },
+ /// Get worker parameter
+ #[structopt(name = "get", version = garage_version())]
+ Get {
+ /// Gather variable values from all nodes
+ #[structopt(short = "a", long = "all-nodes")]
+ all_nodes: bool,
+ /// Variable name to get, or none to get all variables
+ variable: Option<String>,
+ },
/// Set worker parameter
#[structopt(name = "set", version = garage_version())]
Set {
- #[structopt(subcommand)]
- opt: WorkerSetCmd,
+ /// Set variable values on all nodes
+ #[structopt(short = "a", long = "all-nodes")]
+ all_nodes: bool,
+ /// Variable node to set
+ variable: String,
+ /// Value to set the variable to
+ value: String,
},
}
@@ -547,19 +566,6 @@ pub struct WorkerListOpt {
}
#[derive(Serialize, Deserialize, StructOpt, Debug, Eq, PartialEq, Clone)]
-pub enum WorkerSetCmd {
- /// Set tranquility of scrub operations
- #[structopt(name = "scrub-tranquility", version = garage_version())]
- ScrubTranquility { tranquility: u32 },
- /// Set number of concurrent block resync workers
- #[structopt(name = "resync-worker-count", version = garage_version())]
- ResyncWorkerCount { worker_count: usize },
- /// Set tranquility of block resync operations
- #[structopt(name = "resync-tranquility", version = garage_version())]
- ResyncTranquility { tranquility: u32 },
-}
-
-#[derive(Serialize, Deserialize, StructOpt, Debug, Eq, PartialEq, Clone)]
pub enum BlockOperation {
/// List all blocks that currently have a resync error
#[structopt(name = "list-errors", version = garage_version())]
diff --git a/src/garage/cli/util.rs b/src/garage/cli/util.rs
index 63fd9eba..2c6be2f4 100644
--- a/src/garage/cli/util.rs
+++ b/src/garage/cli/util.rs
@@ -229,7 +229,7 @@ pub fn find_matching_node(
) -> Result<Uuid, Error> {
let mut candidates = vec![];
for c in cand {
- if hex::encode(&c).starts_with(&pattern) && !candidates.contains(&c) {
+ if hex::encode(c).starts_with(pattern) && !candidates.contains(&c) {
candidates.push(c);
}
}
@@ -357,6 +357,14 @@ pub fn print_worker_info(tid: usize, info: WorkerInfo) {
format_table(table);
}
+pub fn print_worker_vars(wv: Vec<(Uuid, String, String)>) {
+ let table = wv
+ .into_iter()
+ .map(|(n, k, v)| format!("{:?}\t{}\t{}", n, k, v))
+ .collect::<Vec<_>>();
+ format_table(table);
+}
+
pub fn print_block_error_list(el: Vec<BlockResyncErrorInfo>) {
let now = now_msec();
let tf = timeago::Formatter::new();
diff --git a/src/garage/main.rs b/src/garage/main.rs
index cd1d6228..9b069d82 100644
--- a/src/garage/main.rs
+++ b/src/garage/main.rs
@@ -28,6 +28,7 @@ use structopt::StructOpt;
use netapp::util::parse_and_resolve_peer_addr;
use netapp::NetworkKey;
+use garage_util::config::Config;
use garage_util::error::*;
use garage_rpc::system::*;
@@ -49,11 +50,10 @@ struct Opt {
#[structopt(short = "h", long = "rpc-host", env = "GARAGE_RPC_HOST")]
pub rpc_host: Option<String>,
- /// RPC secret network key for admin operations
- #[structopt(short = "s", long = "rpc-secret", env = "GARAGE_RPC_SECRET")]
- pub rpc_secret: Option<String>,
+ #[structopt(flatten)]
+ pub secrets: Secrets,
- /// Configuration file (garage.toml)
+ /// Path to configuration file
#[structopt(
short = "c",
long = "config",
@@ -66,6 +66,24 @@ struct Opt {
cmd: Command,
}
+#[derive(StructOpt, Debug)]
+pub struct Secrets {
+ /// RPC secret network key, used to replace rpc_secret in config.toml when running the
+ /// daemon or doing admin operations
+ #[structopt(short = "s", long = "rpc-secret", env = "GARAGE_RPC_SECRET")]
+ pub rpc_secret: Option<String>,
+
+ /// Metrics API authentication token, replaces admin.metrics_token in config.toml when
+ /// running the Garage daemon
+ #[structopt(long = "admin-token", env = "GARAGE_ADMIN_TOKEN")]
+ pub admin_token: Option<String>,
+
+ /// Metrics API authentication token, replaces admin.metrics_token in config.toml when
+ /// running the Garage daemon
+ #[structopt(long = "metrics-token", env = "GARAGE_METRICS_TOKEN")]
+ pub metrics_token: Option<String>,
+}
+
#[tokio::main]
async fn main() {
// Initialize version and features info
@@ -148,9 +166,9 @@ async fn main() {
sodiumoxide::init().expect("Unable to init sodiumoxide");
let res = match opt.cmd {
- Command::Server => server::run_server(opt.config_file).await,
+ Command::Server => server::run_server(opt.config_file, opt.secrets).await,
Command::OfflineRepair(repair_opt) => {
- repair::offline::offline_repair(opt.config_file, repair_opt).await
+ repair::offline::offline_repair(opt.config_file, opt.secrets, repair_opt).await
}
Command::Node(NodeOperation::NodeId(node_id_opt)) => {
node_id_command(opt.config_file, node_id_opt.quiet)
@@ -165,7 +183,7 @@ async fn main() {
}
async fn cli_command(opt: Opt) -> Result<(), Error> {
- let config = if opt.rpc_secret.is_none() || opt.rpc_host.is_none() {
+ let config = if opt.secrets.rpc_secret.is_none() || opt.rpc_host.is_none() {
Some(garage_util::config::read_config(opt.config_file.clone())
.err_context(format!("Unable to read configuration file {}. Configuration file is needed because -h or -s is not provided on the command line.", opt.config_file.to_string_lossy()))?)
} else {
@@ -174,9 +192,10 @@ async fn cli_command(opt: Opt) -> Result<(), Error> {
// Find and parse network RPC secret
let net_key_hex_str = opt
+ .secrets
.rpc_secret
.as_ref()
- .or_else(|| config.as_ref().map(|c| &c.rpc_secret))
+ .or_else(|| config.as_ref().and_then(|c| c.rpc_secret.as_ref()))
.ok_or("No RPC secret provided")?;
let network_key = NetworkKey::from_slice(
&hex::decode(net_key_hex_str).err_context("Invalid RPC secret key (bad hex)")?[..],
@@ -233,3 +252,16 @@ async fn cli_command(opt: Opt) -> Result<(), Error> {
Ok(x) => Ok(x),
}
}
+
+fn fill_secrets(mut config: Config, secrets: Secrets) -> Config {
+ if secrets.rpc_secret.is_some() {
+ config.rpc_secret = secrets.rpc_secret;
+ }
+ if secrets.admin_token.is_some() {
+ config.admin.admin_token = secrets.admin_token;
+ }
+ if secrets.metrics_token.is_some() {
+ config.admin.metrics_token = secrets.metrics_token;
+ }
+ config
+}
diff --git a/src/garage/repair/offline.rs b/src/garage/repair/offline.rs
index 25193e4a..f4edcf03 100644
--- a/src/garage/repair/offline.rs
+++ b/src/garage/repair/offline.rs
@@ -6,8 +6,13 @@ use garage_util::error::*;
use garage_model::garage::Garage;
use crate::cli::structs::*;
+use crate::{fill_secrets, Secrets};
-pub async fn offline_repair(config_file: PathBuf, opt: OfflineRepairOpt) -> Result<(), Error> {
+pub async fn offline_repair(
+ config_file: PathBuf,
+ secrets: Secrets,
+ opt: OfflineRepairOpt,
+) -> Result<(), Error> {
if !opt.yes {
return Err(Error::Message(
"Please add the --yes flag to launch repair operation".into(),
@@ -15,7 +20,7 @@ pub async fn offline_repair(config_file: PathBuf, opt: OfflineRepairOpt) -> Resu
}
info!("Loading configuration...");
- let config = read_config(config_file)?;
+ let config = fill_secrets(read_config(config_file)?, secrets);
info!("Initializing Garage main data store...");
let garage = Garage::new(config)?;
diff --git a/src/garage/repair/online.rs b/src/garage/repair/online.rs
index 627e3bf3..0e14ed51 100644
--- a/src/garage/repair/online.rs
+++ b/src/garage/repair/online.rs
@@ -51,7 +51,11 @@ pub async fn launch_online_repair(
ScrubCmd::Resume => ScrubWorkerCommand::Resume,
ScrubCmd::Cancel => ScrubWorkerCommand::Cancel,
ScrubCmd::SetTranquility { tranquility } => {
- ScrubWorkerCommand::SetTranquility(tranquility)
+ garage
+ .block_manager
+ .scrub_persister
+ .set_with(|x| x.tranquility = tranquility)?;
+ return Ok(());
}
};
info!("Sending command to scrub worker: {:?}", cmd);
diff --git a/src/garage/server.rs b/src/garage/server.rs
index 16f1b625..958089c6 100644
--- a/src/garage/server.rs
+++ b/src/garage/server.rs
@@ -17,6 +17,7 @@ use garage_api::k2v::api_server::K2VApiServer;
use crate::admin::*;
#[cfg(feature = "telemetry-otlp")]
use crate::tracing_setup::*;
+use crate::{fill_secrets, Secrets};
async fn wait_from(mut chan: watch::Receiver<bool>) {
while !*chan.borrow() {
@@ -26,9 +27,9 @@ async fn wait_from(mut chan: watch::Receiver<bool>) {
}
}
-pub async fn run_server(config_file: PathBuf) -> Result<(), Error> {
+pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Error> {
info!("Loading configuration...");
- let config = read_config(config_file)?;
+ let config = fill_secrets(read_config(config_file)?, secrets);
// ---- Initialize Garage internals ----
diff --git a/src/garage/tests/admin.rs b/src/garage/tests/admin.rs
index 37aefe38..d3becf0a 100644
--- a/src/garage/tests/admin.rs
+++ b/src/garage/tests/admin.rs
@@ -21,14 +21,7 @@ async fn test_admin_bucket_perms() {
ctx.garage
.command()
- .args([
- "bucket",
- "allow",
- "--read",
- "--key",
- &ctx.garage.key.id,
- BCKT_NAME,
- ])
+ .args(["bucket", "allow", "--read", "--key", &ctx.key.id, BCKT_NAME])
.quiet()
.expect_success_status("Could not create bucket");
@@ -36,14 +29,7 @@ async fn test_admin_bucket_perms() {
ctx.garage
.command()
- .args([
- "bucket",
- "deny",
- "--read",
- "--key",
- &ctx.garage.key.name,
- BCKT_NAME,
- ])
+ .args(["bucket", "deny", "--read", "--key", &ctx.key.id, BCKT_NAME])
.quiet()
.expect_success_status("Could not create bucket");
@@ -51,14 +37,7 @@ async fn test_admin_bucket_perms() {
ctx.garage
.command()
- .args([
- "bucket",
- "allow",
- "--read",
- "--key",
- &ctx.garage.key.name,
- BCKT_NAME,
- ])
+ .args(["bucket", "allow", "--read", "--key", &ctx.key.id, BCKT_NAME])
.quiet()
.expect_success_status("Could not create bucket");
diff --git a/src/garage/tests/bucket.rs b/src/garage/tests/bucket.rs
index 9c363013..0dec3cfa 100644
--- a/src/garage/tests/bucket.rs
+++ b/src/garage/tests/bucket.rs
@@ -13,7 +13,7 @@ async fn test_bucket_all() {
ctx.garage
.command()
.args(["key", "deny"])
- .args(["--create-bucket", &ctx.garage.key.id])
+ .args(["--create-bucket", &ctx.key.id])
.quiet()
.expect_success_output("Could not deny key to create buckets");
@@ -26,7 +26,7 @@ async fn test_bucket_all() {
ctx.garage
.command()
.args(["key", "allow"])
- .args(["--create-bucket", &ctx.garage.key.id])
+ .args(["--create-bucket", &ctx.key.id])
.quiet()
.expect_success_output("Could not deny key to create buckets");
diff --git a/src/garage/tests/common/client.rs b/src/garage/tests/common/client.rs
index 212588b5..e9d4849a 100644
--- a/src/garage/tests/common/client.rs
+++ b/src/garage/tests/common/client.rs
@@ -1,15 +1,9 @@
use aws_sdk_s3::{Client, Config, Credentials, Endpoint};
-use super::garage::Instance;
+use super::garage::{Instance, Key};
-pub fn build_client(instance: &Instance) -> Client {
- let credentials = Credentials::new(
- &instance.key.id,
- &instance.key.secret,
- None,
- None,
- "garage-integ-test",
- );
+pub fn build_client(instance: &Instance, key: &Key) -> Client {
+ let credentials = Credentials::new(&key.id, &key.secret, None, None, "garage-integ-test");
let endpoint = Endpoint::immutable(instance.s3_uri());
let config = Config::builder()
diff --git a/src/garage/tests/common/custom_requester.rs b/src/garage/tests/common/custom_requester.rs
index 1700cc90..609eda97 100644
--- a/src/garage/tests/common/custom_requester.rs
+++ b/src/garage/tests/common/custom_requester.rs
@@ -14,6 +14,7 @@ use garage_api::signature;
/// You should ever only use this to send requests AWS sdk won't send,
/// like to reproduce behavior of unusual implementations found to be
/// problematic.
+#[derive(Clone)]
pub struct CustomRequester {
key: Key,
uri: Uri,
@@ -22,18 +23,18 @@ pub struct CustomRequester {
}
impl CustomRequester {
- pub fn new_s3(instance: &Instance) -> Self {
+ pub fn new_s3(instance: &Instance, key: &Key) -> Self {
CustomRequester {
- key: instance.key.clone(),
+ key: key.clone(),
uri: instance.s3_uri(),
service: "s3",
client: Client::new(),
}
}
- pub fn new_k2v(instance: &Instance) -> Self {
+ pub fn new_k2v(instance: &Instance, key: &Key) -> Self {
CustomRequester {
- key: instance.key.clone(),
+ key: key.clone(),
uri: instance.k2v_uri(),
service: "k2v",
client: Client::new(),
diff --git a/src/garage/tests/common/garage.rs b/src/garage/tests/common/garage.rs
index dbebe5b1..3beed7c4 100644
--- a/src/garage/tests/common/garage.rs
+++ b/src/garage/tests/common/garage.rs
@@ -13,7 +13,7 @@ static GARAGE_TEST_SECRET: &str =
#[derive(Debug, Default, Clone)]
pub struct Key {
- pub name: String,
+ pub name: Option<String>,
pub id: String,
pub secret: String,
}
@@ -21,10 +21,11 @@ pub struct Key {
pub struct Instance {
process: process::Child,
pub path: PathBuf,
- pub key: Key,
+ pub default_key: Key,
pub s3_port: u16,
pub k2v_port: u16,
pub web_port: u16,
+ pub admin_port: u16,
}
impl Instance {
@@ -101,22 +102,36 @@ api_bind_addr = "127.0.0.1:{admin_port}"
Instance {
process: child,
path,
- key: Key::default(),
+ default_key: Key::default(),
s3_port: port,
k2v_port: port + 1,
web_port: port + 3,
+ admin_port: port + 4,
}
}
fn setup(&mut self) {
- use std::{thread, time::Duration};
-
- // Wait for node to be ready
- thread::sleep(Duration::from_secs(2));
-
+ self.wait_for_boot();
self.setup_layout();
+ self.default_key = self.key(Some("garage_test"));
+ }
+
+ fn wait_for_boot(&mut self) {
+ use std::{thread, time::Duration};
- self.key = self.new_key("garage_test");
+ // 60 * 2 seconds = 120 seconds = 2min
+ for _ in 0..60 {
+ let termination = self
+ .command()
+ .args(["status"])
+ .quiet()
+ .status()
+ .expect("Unable to run command");
+ if termination.success() {
+ break;
+ }
+ thread::sleep(Duration::from_secs(2));
+ }
}
fn setup_layout(&self) {
@@ -167,13 +182,17 @@ api_bind_addr = "127.0.0.1:{admin_port}"
.expect("Could not build garage endpoint URI")
}
- pub fn new_key(&self, name: &str) -> Key {
+ pub fn key(&self, maybe_name: Option<&str>) -> Key {
let mut key = Key::default();
- let output = self
- .command()
- .args(["key", "create", name])
- .expect_success_output("Could not create key");
+ let mut cmd = self.command();
+ let base = cmd.args(["key", "create"]);
+ let with_name = match maybe_name {
+ Some(name) => base.args([name]),
+ None => base,
+ };
+
+ let output = with_name.expect_success_output("Could not create key");
let stdout = String::from_utf8(output.stdout).unwrap();
for line in stdout.lines() {
@@ -190,7 +209,7 @@ api_bind_addr = "127.0.0.1:{admin_port}"
assert!(!key.secret.is_empty(), "Invalid key: Key secret is empty");
Key {
- name: name.to_owned(),
+ name: maybe_name.map(String::from),
..key
}
}
diff --git a/src/garage/tests/common/mod.rs b/src/garage/tests/common/mod.rs
index 28874b02..eca3e42b 100644
--- a/src/garage/tests/common/mod.rs
+++ b/src/garage/tests/common/mod.rs
@@ -13,13 +13,16 @@ use custom_requester::CustomRequester;
const REGION: Region = Region::from_static("garage-integ-test");
+#[derive(Clone)]
pub struct Context {
pub garage: &'static garage::Instance,
+ pub key: garage::Key,
pub client: Client,
pub custom_request: CustomRequester,
pub k2v: K2VContext,
}
+#[derive(Clone)]
pub struct K2VContext {
pub request: CustomRequester,
}
@@ -27,13 +30,15 @@ pub struct K2VContext {
impl Context {
fn new() -> Self {
let garage = garage::instance();
- let client = client::build_client(garage);
- let custom_request = CustomRequester::new_s3(garage);
- let k2v_request = CustomRequester::new_k2v(garage);
+ let key = garage.key(None);
+ let client = client::build_client(garage, &key);
+ let custom_request = CustomRequester::new_s3(garage, &key);
+ let k2v_request = CustomRequester::new_k2v(garage, &key);
Context {
garage,
client,
+ key,
custom_request,
k2v: K2VContext {
request: k2v_request,
@@ -57,7 +62,7 @@ impl Context {
.args(["bucket", "allow"])
.args(["--owner", "--read", "--write"])
.arg(&bucket_name)
- .args(["--key", &self.garage.key.name])
+ .args(["--key", &self.key.id])
.quiet()
.expect_success_status("Could not allow key for bucket");
diff --git a/src/garage/tests/k2v/batch.rs b/src/garage/tests/k2v/batch.rs
index 6abba1c5..595d0ba8 100644
--- a/src/garage/tests/k2v/batch.rs
+++ b/src/garage/tests/k2v/batch.rs
@@ -3,6 +3,7 @@ use std::collections::HashMap;
use crate::common;
use assert_json_diff::assert_json_eq;
+use base64::prelude::*;
use serde_json::json;
use super::json_body;
@@ -36,12 +37,12 @@ async fn test_batch() {
{{"pk": "root", "sk": "d.2", "ct": null, "v": "{}"}},
{{"pk": "root", "sk": "e", "ct": null, "v": "{}"}}
]"#,
- base64::encode(values.get(&"a").unwrap()),
- base64::encode(values.get(&"b").unwrap()),
- base64::encode(values.get(&"c").unwrap()),
- base64::encode(values.get(&"d.1").unwrap()),
- base64::encode(values.get(&"d.2").unwrap()),
- base64::encode(values.get(&"e").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"a").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"b").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"c").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"d.1").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"d.2").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"e").unwrap()),
)
.into_bytes(),
)
@@ -120,12 +121,12 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "a", "ct": ct.get("a").unwrap(), "v": [base64::encode(values.get("a").unwrap())]},
- {"sk": "b", "ct": ct.get("b").unwrap(), "v": [base64::encode(values.get("b").unwrap())]},
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap())]},
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1").unwrap())]},
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap())]},
- {"sk": "e", "ct": ct.get("e").unwrap(), "v": [base64::encode(values.get("e").unwrap())]}
+ {"sk": "a", "ct": ct.get("a").unwrap(), "v": [BASE64_STANDARD.encode(values.get("a").unwrap())]},
+ {"sk": "b", "ct": ct.get("b").unwrap(), "v": [BASE64_STANDARD.encode(values.get("b").unwrap())]},
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap())]},
+ {"sk": "e", "ct": ct.get("e").unwrap(), "v": [BASE64_STANDARD.encode(values.get("e").unwrap())]}
],
"more": false,
"nextStart": null,
@@ -141,10 +142,10 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap())]},
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1").unwrap())]},
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap())]},
- {"sk": "e", "ct": ct.get("e").unwrap(), "v": [base64::encode(values.get("e").unwrap())]}
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap())]},
+ {"sk": "e", "ct": ct.get("e").unwrap(), "v": [BASE64_STANDARD.encode(values.get("e").unwrap())]}
],
"more": false,
"nextStart": null,
@@ -160,9 +161,9 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap())]},
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1").unwrap())]},
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap())]},
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -178,8 +179,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap())]},
- {"sk": "b", "ct": ct.get("b").unwrap(), "v": [base64::encode(values.get("b").unwrap())]},
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap())]},
+ {"sk": "b", "ct": ct.get("b").unwrap(), "v": [BASE64_STANDARD.encode(values.get("b").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -195,8 +196,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap())]},
- {"sk": "b", "ct": ct.get("b").unwrap(), "v": [base64::encode(values.get("b").unwrap())]},
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap())]},
+ {"sk": "b", "ct": ct.get("b").unwrap(), "v": [BASE64_STANDARD.encode(values.get("b").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -212,7 +213,7 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "a", "ct": ct.get("a").unwrap(), "v": [base64::encode(values.get("a").unwrap())]}
+ {"sk": "a", "ct": ct.get("a").unwrap(), "v": [BASE64_STANDARD.encode(values.get("a").unwrap())]}
],
"more": true,
"nextStart": "b",
@@ -228,8 +229,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1").unwrap())]},
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap())]}
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap())]}
],
"more": false,
"nextStart": null,
@@ -255,10 +256,10 @@ async fn test_batch() {
{{"pk": "root", "sk": "d.2", "ct": null, "v": "{}"}}
]"#,
ct.get(&"b").unwrap(),
- base64::encode(values.get(&"c'").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"c'").unwrap()),
ct.get(&"d.1").unwrap(),
- base64::encode(values.get(&"d.1'").unwrap()),
- base64::encode(values.get(&"d.2'").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"d.1'").unwrap()),
+ BASE64_STANDARD.encode(values.get(&"d.2'").unwrap()),
)
.into_bytes(),
)
@@ -333,11 +334,11 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "a", "ct": ct.get("a").unwrap(), "v": [base64::encode(values.get("a").unwrap())]},
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap()), base64::encode(values.get("c'").unwrap())]},
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1'").unwrap())]},
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap()), base64::encode(values.get("d.2'").unwrap())]},
- {"sk": "e", "ct": ct.get("e").unwrap(), "v": [base64::encode(values.get("e").unwrap())]}
+ {"sk": "a", "ct": ct.get("a").unwrap(), "v": [BASE64_STANDARD.encode(values.get("a").unwrap())]},
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap()), BASE64_STANDARD.encode(values.get("c'").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1'").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap()), BASE64_STANDARD.encode(values.get("d.2'").unwrap())]},
+ {"sk": "e", "ct": ct.get("e").unwrap(), "v": [BASE64_STANDARD.encode(values.get("e").unwrap())]}
],
"more": false,
"nextStart": null,
@@ -353,8 +354,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1'").unwrap())]},
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap()), base64::encode(values.get("d.2'").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1'").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap()), BASE64_STANDARD.encode(values.get("d.2'").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -370,7 +371,7 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1'").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1'").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -386,7 +387,7 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1'").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1'").unwrap())]},
],
"more": true,
"nextStart": "d.2",
@@ -402,7 +403,7 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap()), base64::encode(values.get("d.2'").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap()), BASE64_STANDARD.encode(values.get("d.2'").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -418,8 +419,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap()), base64::encode(values.get("d.2'").unwrap())]},
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1'").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap()), BASE64_STANDARD.encode(values.get("d.2'").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1'").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -435,8 +436,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap()), base64::encode(values.get("d.2'").unwrap())]},
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1'").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap()), BASE64_STANDARD.encode(values.get("d.2'").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1'").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -452,8 +453,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [base64::encode(values.get("d.1'").unwrap())]},
- {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [base64::encode(values.get("d.2").unwrap()), base64::encode(values.get("d.2'").unwrap())]},
+ {"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.1'").unwrap())]},
+ {"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [BASE64_STANDARD.encode(values.get("d.2").unwrap()), BASE64_STANDARD.encode(values.get("d.2'").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -563,8 +564,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap()), base64::encode(values.get("c'").unwrap())]},
- {"sk": "e", "ct": ct.get("e").unwrap(), "v": [base64::encode(values.get("e").unwrap())]}
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap()), BASE64_STANDARD.encode(values.get("c'").unwrap())]},
+ {"sk": "e", "ct": ct.get("e").unwrap(), "v": [BASE64_STANDARD.encode(values.get("e").unwrap())]}
],
"more": false,
"nextStart": null,
@@ -580,8 +581,8 @@ async fn test_batch() {
"tombstones": false,
"singleItem": false,
"items": [
- {"sk": "e", "ct": ct.get("e").unwrap(), "v": [base64::encode(values.get("e").unwrap())]},
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap()), base64::encode(values.get("c'").unwrap())]},
+ {"sk": "e", "ct": ct.get("e").unwrap(), "v": [BASE64_STANDARD.encode(values.get("e").unwrap())]},
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap()), BASE64_STANDARD.encode(values.get("c'").unwrap())]},
],
"more": false,
"nextStart": null,
@@ -599,10 +600,10 @@ async fn test_batch() {
"items": [
{"sk": "a", "ct": ct.get("a").unwrap(), "v": [null]},
{"sk": "b", "ct": ct.get("b").unwrap(), "v": [null]},
- {"sk": "c", "ct": ct.get("c").unwrap(), "v": [base64::encode(values.get("c").unwrap()), base64::encode(values.get("c'").unwrap())]},
+ {"sk": "c", "ct": ct.get("c").unwrap(), "v": [BASE64_STANDARD.encode(values.get("c").unwrap()), BASE64_STANDARD.encode(values.get("c'").unwrap())]},
{"sk": "d.1", "ct": ct.get("d.1").unwrap(), "v": [null]},
{"sk": "d.2", "ct": ct.get("d.2").unwrap(), "v": [null]},
- {"sk": "e", "ct": ct.get("e").unwrap(), "v": [base64::encode(values.get("e").unwrap())]},
+ {"sk": "e", "ct": ct.get("e").unwrap(), "v": [BASE64_STANDARD.encode(values.get("e").unwrap())]},
],
"more": false,
"nextStart": null,
diff --git a/src/garage/tests/k2v/item.rs b/src/garage/tests/k2v/item.rs
index 2641386f..588836c7 100644
--- a/src/garage/tests/k2v/item.rs
+++ b/src/garage/tests/k2v/item.rs
@@ -3,6 +3,7 @@ use std::time::Duration;
use crate::common;
use assert_json_diff::assert_json_eq;
+use base64::prelude::*;
use serde_json::json;
use super::json_body;
@@ -222,7 +223,10 @@ async fn test_items_and_indices() {
let res_json = json_body(res).await;
assert_json_eq!(
res_json,
- [base64::encode(&content2), base64::encode(&content3)]
+ [
+ BASE64_STANDARD.encode(&content2),
+ BASE64_STANDARD.encode(&content3)
+ ]
);
// ReadIndex -- now there should be some stuff
@@ -411,7 +415,7 @@ async fn test_item_return_format() {
"application/json"
);
let res_body = json_body(res).await;
- assert_json_eq!(res_body, json!([base64::encode(&single_value)]));
+ assert_json_eq!(res_body, json!([BASE64_STANDARD.encode(&single_value)]));
// f2: binary
let res = ctx
@@ -452,7 +456,7 @@ async fn test_item_return_format() {
"application/json"
);
let res_body = json_body(res).await;
- assert_json_eq!(res_body, json!([base64::encode(&single_value)]));
+ assert_json_eq!(res_body, json!([BASE64_STANDARD.encode(&single_value)]));
// -- Test with a second, concurrent value --
let res = ctx
@@ -488,8 +492,8 @@ async fn test_item_return_format() {
assert_json_eq!(
res_body,
json!([
- base64::encode(&single_value),
- base64::encode(&concurrent_value)
+ BASE64_STANDARD.encode(&single_value),
+ BASE64_STANDARD.encode(&concurrent_value)
])
);
@@ -512,8 +516,8 @@ async fn test_item_return_format() {
assert_json_eq!(
res_body,
json!([
- base64::encode(&single_value),
- base64::encode(&concurrent_value)
+ BASE64_STANDARD.encode(&single_value),
+ BASE64_STANDARD.encode(&concurrent_value)
])
);
@@ -550,8 +554,8 @@ async fn test_item_return_format() {
assert_json_eq!(
res_body,
json!([
- base64::encode(&single_value),
- base64::encode(&concurrent_value)
+ BASE64_STANDARD.encode(&single_value),
+ BASE64_STANDARD.encode(&concurrent_value)
])
);
@@ -587,7 +591,10 @@ async fn test_item_return_format() {
"application/json"
);
let res_body = json_body(res).await;
- assert_json_eq!(res_body, json!([base64::encode(&concurrent_value), null]));
+ assert_json_eq!(
+ res_body,
+ json!([BASE64_STANDARD.encode(&concurrent_value), null])
+ );
// f1: not specified
let res = ctx
@@ -612,7 +619,10 @@ async fn test_item_return_format() {
.unwrap()
.to_string();
let res_body = json_body(res).await;
- assert_json_eq!(res_body, json!([base64::encode(&concurrent_value), null]));
+ assert_json_eq!(
+ res_body,
+ json!([BASE64_STANDARD.encode(&concurrent_value), null])
+ );
// f2: binary
let res = ctx
@@ -644,7 +654,10 @@ async fn test_item_return_format() {
"application/json"
);
let res_body = json_body(res).await;
- assert_json_eq!(res_body, json!([base64::encode(&concurrent_value), null]));
+ assert_json_eq!(
+ res_body,
+ json!([BASE64_STANDARD.encode(&concurrent_value), null])
+ );
// -- Delete everything --
let res = ctx
diff --git a/src/garage/tests/k2v/poll.rs b/src/garage/tests/k2v/poll.rs
index e56705ae..dd44aed9 100644
--- a/src/garage/tests/k2v/poll.rs
+++ b/src/garage/tests/k2v/poll.rs
@@ -1,12 +1,17 @@
+use base64::prelude::*;
use hyper::{Method, StatusCode};
use std::time::Duration;
+use assert_json_diff::assert_json_eq;
+use serde_json::json;
+
+use super::json_body;
use crate::common;
#[tokio::test]
-async fn test_poll() {
+async fn test_poll_item() {
let ctx = common::context();
- let bucket = ctx.create_bucket("test-k2v-poll");
+ let bucket = ctx.create_bucket("test-k2v-poll-item");
// Write initial value
let res = ctx
@@ -52,8 +57,8 @@ async fn test_poll() {
let poll = {
let bucket = bucket.clone();
let ct = ct.clone();
+ let ctx = ctx.clone();
tokio::spawn(async move {
- let ctx = common::context();
ctx.k2v
.request
.builder(bucket.clone())
@@ -96,3 +101,165 @@ async fn test_poll() {
.to_vec();
assert_eq!(poll_res_body, b"New value");
}
+
+#[tokio::test]
+async fn test_poll_range() {
+ let ctx = common::context();
+ let bucket = ctx.create_bucket("test-k2v-poll-range");
+
+ // Write initial value
+ let res = ctx
+ .k2v
+ .request
+ .builder(bucket.clone())
+ .method(Method::PUT)
+ .path("root")
+ .query_param("sort_key", Some("test1"))
+ .body(b"Initial value".to_vec())
+ .send()
+ .await
+ .unwrap();
+ assert_eq!(res.status(), StatusCode::NO_CONTENT);
+
+ // Retrieve initial value to get its causality token
+ let res2 = ctx
+ .k2v
+ .request
+ .builder(bucket.clone())
+ .path("root")
+ .query_param("sort_key", Some("test1"))
+ .signed_header("accept", "application/octet-stream")
+ .send()
+ .await
+ .unwrap();
+ assert_eq!(res2.status(), StatusCode::OK);
+ let ct = res2
+ .headers()
+ .get("x-garage-causality-token")
+ .unwrap()
+ .to_str()
+ .unwrap()
+ .to_string();
+
+ // Initial poll range, retrieve single item and first seen_marker
+ let res2 = ctx
+ .k2v
+ .request
+ .builder(bucket.clone())
+ .method(Method::POST)
+ .path("root")
+ .query_param("poll_range", None::<String>)
+ .body(b"{}".to_vec())
+ .send()
+ .await
+ .unwrap();
+ assert_eq!(res2.status(), StatusCode::OK);
+ let json_res = json_body(res2).await;
+ let seen_marker = json_res["seenMarker"].as_str().unwrap().to_string();
+ assert_json_eq!(
+ json_res,
+ json!(
+ {
+ "items": [
+ {"sk": "test1", "ct": ct, "v": [BASE64_STANDARD.encode(b"Initial value")]},
+ ],
+ "seenMarker": seen_marker,
+ }
+ )
+ );
+
+ // Second poll range, which will complete later
+ let poll = {
+ let bucket = bucket.clone();
+ let ctx = ctx.clone();
+ tokio::spawn(async move {
+ ctx.k2v
+ .request
+ .builder(bucket.clone())
+ .method(Method::POST)
+ .path("root")
+ .query_param("poll_range", None::<String>)
+ .body(format!(r#"{{"seenMarker": "{}"}}"#, seen_marker).into_bytes())
+ .send()
+ .await
+ })
+ };
+
+ // Write new value that supersedes initial one
+ let res = ctx
+ .k2v
+ .request
+ .builder(bucket.clone())
+ .method(Method::PUT)
+ .path("root")
+ .query_param("sort_key", Some("test1"))
+ .signed_header("x-garage-causality-token", ct)
+ .body(b"New value".to_vec())
+ .send()
+ .await
+ .unwrap();
+ assert_eq!(res.status(), StatusCode::NO_CONTENT);
+
+ // Check poll finishes with correct value
+ let poll_res = tokio::select! {
+ _ = tokio::time::sleep(Duration::from_secs(10)) => panic!("poll did not terminate in time"),
+ res = poll => res.unwrap().unwrap(),
+ };
+
+ assert_eq!(poll_res.status(), StatusCode::OK);
+ let json_res = json_body(poll_res).await;
+ let seen_marker = json_res["seenMarker"].as_str().unwrap().to_string();
+ assert_eq!(json_res["items"].as_array().unwrap().len(), 1);
+ assert_json_eq!(&json_res["items"][0]["sk"], json!("test1"));
+ assert_json_eq!(
+ &json_res["items"][0]["v"],
+ json!([BASE64_STANDARD.encode(b"New value")])
+ );
+
+ // Now we will add a value on a different key
+ // Start a new poll operation
+ let poll = {
+ let bucket = bucket.clone();
+ let ctx = ctx.clone();
+ tokio::spawn(async move {
+ ctx.k2v
+ .request
+ .builder(bucket.clone())
+ .method(Method::POST)
+ .path("root")
+ .query_param("poll_range", None::<String>)
+ .body(format!(r#"{{"seenMarker": "{}"}}"#, seen_marker).into_bytes())
+ .send()
+ .await
+ })
+ };
+
+ // Write value on different key
+ let res = ctx
+ .k2v
+ .request
+ .builder(bucket.clone())
+ .method(Method::PUT)
+ .path("root")
+ .query_param("sort_key", Some("test2"))
+ .body(b"Other value".to_vec())
+ .send()
+ .await
+ .unwrap();
+ assert_eq!(res.status(), StatusCode::NO_CONTENT);
+
+ // Check poll finishes with correct value
+ let poll_res = tokio::select! {
+ _ = tokio::time::sleep(Duration::from_secs(10)) => panic!("poll did not terminate in time"),
+ res = poll => res.unwrap().unwrap(),
+ };
+
+ assert_eq!(poll_res.status(), StatusCode::OK);
+ let json_res = json_body(poll_res).await;
+ assert_eq!(json_res["items"].as_array().unwrap().len(), 1);
+ assert_json_eq!(&json_res["items"][0]["sk"], json!("test2"));
+ assert_json_eq!(
+ &json_res["items"][0]["v"],
+ json!([BASE64_STANDARD.encode(b"Other value")])
+ );
+}
diff --git a/src/garage/tests/s3/streaming_signature.rs b/src/garage/tests/s3/streaming_signature.rs
index 48da7607..b7a1acae 100644
--- a/src/garage/tests/s3/streaming_signature.rs
+++ b/src/garage/tests/s3/streaming_signature.rs
@@ -109,7 +109,7 @@ async fn test_create_bucket_streaming() {
ctx.garage
.command()
.args(["key", "allow"])
- .args(["--create-bucket", &ctx.garage.key.id])
+ .args(["--create-bucket", &ctx.key.id])
.quiet()
.expect_success_output("Could not allow key to create buckets");
diff --git a/src/garage/tests/s3/website.rs b/src/garage/tests/s3/website.rs
index 244a2fa0..f61838e4 100644
--- a/src/garage/tests/s3/website.rs
+++ b/src/garage/tests/s3/website.rs
@@ -1,5 +1,8 @@
use crate::common;
use crate::common::ext::*;
+use crate::k2v::json_body;
+
+use assert_json_diff::assert_json_eq;
use aws_sdk_s3::{
model::{CorsConfiguration, CorsRule, ErrorDocument, IndexDocument, WebsiteConfiguration},
types::ByteStream,
@@ -9,6 +12,7 @@ use hyper::{
body::{to_bytes, Body},
Client,
};
+use serde_json::json;
const BODY: &[u8; 16] = b"<h1>bonjour</h1>";
const BODY_ERR: &[u8; 6] = b"erreur";
@@ -49,6 +53,31 @@ async fn test_website() {
BODY.as_ref()
); /* check that we do not leak body */
+ let admin_req = || {
+ Request::builder()
+ .method("GET")
+ .uri(format!(
+ "http://127.0.0.1:{0}/check?domain={1}",
+ ctx.garage.admin_port,
+ BCKT_NAME.to_string()
+ ))
+ .body(Body::empty())
+ .unwrap()
+ };
+
+ let admin_resp = client.request(admin_req()).await.unwrap();
+ assert_eq!(admin_resp.status(), StatusCode::BAD_REQUEST);
+ let res_body = json_body(admin_resp).await;
+ assert_json_eq!(
+ res_body,
+ json!({
+ "code": "InvalidRequest",
+ "message": "Bad request: Bucket 'my-website' is not authorized for website hosting",
+ "region": "garage-integ-test",
+ "path": "/check",
+ })
+ );
+
ctx.garage
.command()
.args(["bucket", "website", "--allow", BCKT_NAME])
@@ -62,6 +91,25 @@ async fn test_website() {
BODY.as_ref()
);
+ let admin_req = || {
+ Request::builder()
+ .method("GET")
+ .uri(format!(
+ "http://127.0.0.1:{0}/check?domain={1}",
+ ctx.garage.admin_port,
+ BCKT_NAME.to_string()
+ ))
+ .body(Body::empty())
+ .unwrap()
+ };
+
+ let mut admin_resp = client.request(admin_req()).await.unwrap();
+ assert_eq!(admin_resp.status(), StatusCode::OK);
+ assert_eq!(
+ to_bytes(admin_resp.body_mut()).await.unwrap().as_ref(),
+ format!("Bucket '{BCKT_NAME}' is authorized for website hosting").as_bytes()
+ );
+
ctx.garage
.command()
.args(["bucket", "website", "--deny", BCKT_NAME])
@@ -74,6 +122,31 @@ async fn test_website() {
to_bytes(resp.body_mut()).await.unwrap().as_ref(),
BODY.as_ref()
); /* check that we do not leak body */
+
+ let admin_req = || {
+ Request::builder()
+ .method("GET")
+ .uri(format!(
+ "http://127.0.0.1:{0}/check?domain={1}",
+ ctx.garage.admin_port,
+ BCKT_NAME.to_string()
+ ))
+ .body(Body::empty())
+ .unwrap()
+ };
+
+ let admin_resp = client.request(admin_req()).await.unwrap();
+ assert_eq!(admin_resp.status(), StatusCode::BAD_REQUEST);
+ let res_body = json_body(admin_resp).await;
+ assert_json_eq!(
+ res_body,
+ json!({
+ "code": "InvalidRequest",
+ "message": "Bad request: Bucket 'my-website' is not authorized for website hosting",
+ "region": "garage-integ-test",
+ "path": "/check",
+ })
+ );
}
#[tokio::test]
@@ -322,3 +395,103 @@ async fn test_website_s3_api() {
);
}
}
+
+#[tokio::test]
+async fn test_website_check_website_enabled() {
+ let ctx = common::context();
+
+ let client = Client::new();
+
+ let admin_req = || {
+ Request::builder()
+ .method("GET")
+ .uri(format!("http://127.0.0.1:{}/check", ctx.garage.admin_port))
+ .body(Body::empty())
+ .unwrap()
+ };
+
+ let admin_resp = client.request(admin_req()).await.unwrap();
+ assert_eq!(admin_resp.status(), StatusCode::BAD_REQUEST);
+ let res_body = json_body(admin_resp).await;
+ assert_json_eq!(
+ res_body,
+ json!({
+ "code": "InvalidRequest",
+ "message": "Bad request: No domain query string found",
+ "region": "garage-integ-test",
+ "path": "/check",
+ })
+ );
+
+ let admin_req = || {
+ Request::builder()
+ .method("GET")
+ .uri(format!(
+ "http://127.0.0.1:{}/check?domain=",
+ ctx.garage.admin_port
+ ))
+ .body(Body::empty())
+ .unwrap()
+ };
+
+ let admin_resp = client.request(admin_req()).await.unwrap();
+ assert_eq!(admin_resp.status(), StatusCode::NOT_FOUND);
+ let res_body = json_body(admin_resp).await;
+ assert_json_eq!(
+ res_body,
+ json!({
+ "code": "NoSuchBucket",
+ "message": "Bucket not found: ",
+ "region": "garage-integ-test",
+ "path": "/check",
+ })
+ );
+
+ let admin_req = || {
+ Request::builder()
+ .method("GET")
+ .uri(format!(
+ "http://127.0.0.1:{}/check?domain=foobar",
+ ctx.garage.admin_port
+ ))
+ .body(Body::empty())
+ .unwrap()
+ };
+
+ let admin_resp = client.request(admin_req()).await.unwrap();
+ assert_eq!(admin_resp.status(), StatusCode::NOT_FOUND);
+ let res_body = json_body(admin_resp).await;
+ assert_json_eq!(
+ res_body,
+ json!({
+ "code": "NoSuchBucket",
+ "message": "Bucket not found: foobar",
+ "region": "garage-integ-test",
+ "path": "/check",
+ })
+ );
+
+ let admin_req = || {
+ Request::builder()
+ .method("GET")
+ .uri(format!(
+ "http://127.0.0.1:{}/check?domain=%E2%98%B9",
+ ctx.garage.admin_port
+ ))
+ .body(Body::empty())
+ .unwrap()
+ };
+
+ let admin_resp = client.request(admin_req()).await.unwrap();
+ assert_eq!(admin_resp.status(), StatusCode::NOT_FOUND);
+ let res_body = json_body(admin_resp).await;
+ assert_json_eq!(
+ res_body,
+ json!({
+ "code": "NoSuchBucket",
+ "message": "Bucket not found: ☹",
+ "region": "garage-integ-test",
+ "path": "/check",
+ })
+ );
+}
diff --git a/src/k2v-client/Cargo.toml b/src/k2v-client/Cargo.toml
index f57ce849..52c16d89 100644
--- a/src/k2v-client/Cargo.toml
+++ b/src/k2v-client/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "k2v-client"
-version = "0.0.1"
+version = "0.1.1"
authors = ["Trinity Pointard <trinity.pointard@gmail.com>", "Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -9,20 +9,21 @@ repository = "https://git.deuxfleurs.fr/Deuxfleurs/garage"
readme = "../../README.md"
[dependencies]
-base64 = "0.13.0"
-http = "0.2.6"
+base64 = "0.21"
+http = "0.2"
log = "0.4"
rusoto_core = { version = "0.48.0", default-features = false, features = ["rustls"] }
rusoto_credential = "0.48.0"
rusoto_signature = "0.48.0"
-serde = "1.0.137"
-serde_json = "1.0.81"
-thiserror = "1.0.31"
-tokio = "1.17.0"
+hyper-rustls = { version = "0.23", default-features = false, features = [ "http1", "http2", "tls12" ] }
+serde = "1.0"
+serde_json = "1.0"
+thiserror = "1.0"
+tokio = "1.24"
# cli deps
-clap = { version = "3.1.18", optional = true, features = ["derive", "env"] }
-garage_util = { version = "0.8.1", path = "../util", optional = true }
+clap = { version = "4.1", optional = true, features = ["derive", "env"] }
+garage_util = { version = "0.8.2", path = "../util", optional = true }
[features]
diff --git a/src/k2v-client/bin/k2v-cli.rs b/src/k2v-client/bin/k2v-cli.rs
index 925ebeb8..cdd63cce 100644
--- a/src/k2v-client/bin/k2v-cli.rs
+++ b/src/k2v-client/bin/k2v-cli.rs
@@ -1,3 +1,5 @@
+use std::collections::BTreeMap;
+use std::process::exit;
use std::time::Duration;
use k2v_client::*;
@@ -57,22 +59,39 @@ enum Command {
#[clap(flatten)]
output_kind: ReadOutputKind,
},
- /// Watch changes on a single value
- Poll {
- /// Partition key to delete from
+ /// Watch changes on a single value
+ PollItem {
+ /// Partition key of item to watch
partition_key: String,
- /// Sort key to delete from
+ /// Sort key of item to watch
sort_key: String,
/// Causality information
#[clap(short, long)]
causality: String,
/// Timeout, in seconds
- #[clap(short, long)]
+ #[clap(short = 'T', long)]
timeout: Option<u64>,
/// Output formating
#[clap(flatten)]
output_kind: ReadOutputKind,
},
+ /// Watch changes on a range of values
+ PollRange {
+ /// Partition key to poll from
+ partition_key: String,
+ /// Output only sort keys matching this filter
+ #[clap(flatten)]
+ filter: Filter,
+ /// Marker of data that had previously been seen by a PollRange
+ #[clap(short = 'S', long)]
+ seen_marker: Option<String>,
+ /// Timeout, in seconds
+ #[clap(short = 'T', long)]
+ timeout: Option<u64>,
+ /// Output formating
+ #[clap(flatten)]
+ output_kind: BatchOutputKind,
+ },
/// Delete a single value
Delete {
/// Partition key to delete from
@@ -176,7 +195,6 @@ struct ReadOutputKind {
impl ReadOutputKind {
fn display_output(&self, val: CausalValue) -> ! {
use std::io::Write;
- use std::process::exit;
if self.json {
let stdout = std::io::stdout();
@@ -254,6 +272,83 @@ struct BatchOutputKind {
json: bool,
}
+impl BatchOutputKind {
+ fn display_human_output(&self, values: BTreeMap<String, CausalValue>) -> ! {
+ for (key, values) in values {
+ println!("key: {}", key);
+ let causality: String = values.causality.into();
+ println!("causality: {}", causality);
+ for value in values.value {
+ match value {
+ K2vValue::Value(v) => {
+ if let Ok(string) = std::str::from_utf8(&v) {
+ println!(" value(utf-8): {}", string);
+ } else {
+ println!(" value(base64): {}", base64::encode(&v));
+ }
+ }
+ K2vValue::Tombstone => {
+ println!(" tombstone");
+ }
+ }
+ }
+ }
+ exit(0);
+ }
+
+ fn values_json(&self, values: BTreeMap<String, CausalValue>) -> Vec<serde_json::Value> {
+ values
+ .into_iter()
+ .map(|(k, v)| {
+ let mut value = serde_json::to_value(v).unwrap();
+ value
+ .as_object_mut()
+ .unwrap()
+ .insert("sort_key".to_owned(), k.into());
+ value
+ })
+ .collect::<Vec<_>>()
+ }
+
+ fn display_poll_range_output(
+ &self,
+ seen_marker: String,
+ values: BTreeMap<String, CausalValue>,
+ ) -> ! {
+ if self.json {
+ let json = serde_json::json!({
+ "values": self.values_json(values),
+ "seen_marker": seen_marker,
+ });
+
+ let stdout = std::io::stdout();
+ serde_json::to_writer_pretty(stdout, &json).unwrap();
+ exit(0)
+ } else {
+ println!("seen marker: {}", seen_marker);
+ self.display_human_output(values)
+ }
+ }
+
+ fn display_read_range_output(&self, res: PaginatedRange<CausalValue>) -> ! {
+ if self.json {
+ let json = serde_json::json!({
+ "next_key": res.next_start,
+ "values": self.values_json(res.items),
+ });
+
+ let stdout = std::io::stdout();
+ serde_json::to_writer_pretty(stdout, &json).unwrap();
+ exit(0)
+ } else {
+ if let Some(next) = res.next_start {
+ println!("next key: {}", next);
+ }
+ self.display_human_output(res.items)
+ }
+ }
+}
+
/// Filter for batch operations
#[derive(Parser, Debug)]
#[clap(group = clap::ArgGroup::new("filter").multiple(true).required(true))]
@@ -342,7 +437,7 @@ async fn main() -> Result<(), Error> {
let res = client.read_item(&partition_key, &sort_key).await?;
output_kind.display_output(res);
}
- Command::Poll {
+ Command::PollItem {
partition_key,
sort_key,
causality,
@@ -356,7 +451,54 @@ async fn main() -> Result<(), Error> {
if let Some(res) = res_opt {
output_kind.display_output(res);
} else {
- println!("Delay expired and value didn't change.");
+ if output_kind.json {
+ println!("null");
+ } else {
+ println!("Delay expired and value didn't change.");
+ }
+ }
+ }
+ Command::PollRange {
+ partition_key,
+ filter,
+ seen_marker,
+ timeout,
+ output_kind,
+ } => {
+ if filter.conflicts_only
+ || filter.tombstones
+ || filter.reverse
+ || filter.limit.is_some()
+ {
+ return Err(Error::Message(
+ "limit, reverse, conlicts-only, tombstones are invalid for poll-range".into(),
+ ));
+ }
+
+ let timeout = timeout.map(Duration::from_secs);
+ let res = client
+ .poll_range(
+ &partition_key,
+ Some(PollRangeFilter {
+ start: filter.start.as_deref(),
+ end: filter.end.as_deref(),
+ prefix: filter.prefix.as_deref(),
+ }),
+ seen_marker.as_deref(),
+ timeout,
+ )
+ .await?;
+ match res {
+ Some((items, seen_marker)) => {
+ output_kind.display_poll_range_output(seen_marker, items);
+ }
+ None => {
+ if output_kind.json {
+ println!("null");
+ } else {
+ println!("Delay expired and value didn't change.");
+ }
+ }
}
}
Command::ReadIndex {
@@ -419,50 +561,7 @@ async fn main() -> Result<(), Error> {
};
let mut res = client.read_batch(&[op]).await?;
let res = res.pop().unwrap();
- if output_kind.json {
- let values = res
- .items
- .into_iter()
- .map(|(k, v)| {
- let mut value = serde_json::to_value(v).unwrap();
- value
- .as_object_mut()
- .unwrap()
- .insert("sort_key".to_owned(), k.into());
- value
- })
- .collect::<Vec<_>>();
- let json = serde_json::json!({
- "next_key": res.next_start,
- "values": values,
- });
-
- let stdout = std::io::stdout();
- serde_json::to_writer_pretty(stdout, &json).unwrap();
- } else {
- if let Some(next) = res.next_start {
- println!("next key: {}", next);
- }
- for (key, values) in res.items {
- println!("key: {}", key);
- let causality: String = values.causality.into();
- println!("causality: {}", causality);
- for value in values.value {
- match value {
- K2vValue::Value(v) => {
- if let Ok(string) = std::str::from_utf8(&v) {
- println!(" value(utf-8): {}", string);
- } else {
- println!(" value(base64): {}", base64::encode(&v));
- }
- }
- K2vValue::Tombstone => {
- println!(" tombstone");
- }
- }
- }
- }
- }
+ output_kind.display_read_range_output(res);
}
Command::DeleteRange {
partition_key,
diff --git a/src/k2v-client/lib.rs b/src/k2v-client/lib.rs
index c2606af4..ca52d0cf 100644
--- a/src/k2v-client/lib.rs
+++ b/src/k2v-client/lib.rs
@@ -40,7 +40,13 @@ impl K2vClient {
creds: AwsCredentials,
user_agent: Option<String>,
) -> Result<Self, Error> {
- let mut client = HttpClient::new()?;
+ let connector = hyper_rustls::HttpsConnectorBuilder::new()
+ .with_native_roots()
+ .https_or_http()
+ .enable_http1()
+ .enable_http2()
+ .build();
+ let mut client = HttpClient::from_connector(connector);
if let Some(ua) = user_agent {
client.local_agent_prepend(ua);
} else {
@@ -153,6 +159,58 @@ impl K2vClient {
}
}
+ /// Perform a PollRange request, waiting for any change in a given range of keys
+ /// to occur
+ pub async fn poll_range(
+ &self,
+ partition_key: &str,
+ filter: Option<PollRangeFilter<'_>>,
+ seen_marker: Option<&str>,
+ timeout: Option<Duration>,
+ ) -> Result<Option<(BTreeMap<String, CausalValue>, String)>, Error> {
+ let timeout = timeout.unwrap_or(DEFAULT_POLL_TIMEOUT);
+
+ let request = PollRangeRequest {
+ filter: filter.unwrap_or_default(),
+ seen_marker,
+ timeout: timeout.as_secs(),
+ };
+
+ let mut req = SignedRequest::new(
+ "POST",
+ SERVICE,
+ &self.region,
+ &format!("/{}/{}", self.bucket, partition_key),
+ );
+ req.add_param("poll_range", "");
+
+ let payload = serde_json::to_vec(&request)?;
+ req.set_payload(Some(payload));
+ let res = self.dispatch(req, Some(timeout + DEFAULT_TIMEOUT)).await?;
+
+ if res.status == StatusCode::NOT_MODIFIED {
+ return Ok(None);
+ }
+
+ let resp: PollRangeResponse = serde_json::from_slice(&res.body)?;
+
+ let items = resp
+ .items
+ .into_iter()
+ .map(|BatchReadItem { sk, ct, v }| {
+ (
+ sk,
+ CausalValue {
+ causality: ct,
+ value: v,
+ },
+ )
+ })
+ .collect::<BTreeMap<_, _>>();
+
+ Ok(Some((items, resp.seen_marker)))
+ }
+
/// Perform an InsertItem request, inserting a value for a single pk+sk.
pub async fn insert_item(
&self,
@@ -389,6 +447,12 @@ impl From<CausalityToken> for String {
}
}
+impl AsRef<str> for CausalityToken {
+ fn as_ref(&self) -> &str {
+ &self.0
+ }
+}
+
/// A value in K2V. can be either a binary value, or a tombstone.
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum K2vValue {
@@ -466,6 +530,29 @@ pub struct Filter<'a> {
pub reverse: bool,
}
+#[derive(Debug, Default, Clone, Serialize)]
+pub struct PollRangeFilter<'a> {
+ pub start: Option<&'a str>,
+ pub end: Option<&'a str>,
+ pub prefix: Option<&'a str>,
+}
+
+#[derive(Debug, Clone, Serialize)]
+#[serde(rename_all = "camelCase")]
+struct PollRangeRequest<'a> {
+ #[serde(flatten)]
+ filter: PollRangeFilter<'a>,
+ seen_marker: Option<&'a str>,
+ timeout: u64,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+#[serde(rename_all = "camelCase")]
+struct PollRangeResponse {
+ items: Vec<BatchReadItem>,
+ seen_marker: String,
+}
+
impl<'a> Filter<'a> {
fn insert_params(&self, req: &mut SignedRequest) {
if let Some(start) = &self.start {
diff --git a/src/model/Cargo.toml b/src/model/Cargo.toml
index 323c2d64..2b525a42 100644
--- a/src/model/Cargo.toml
+++ b/src/model/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage_model"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -14,21 +14,21 @@ path = "lib.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-garage_db = { version = "0.8.1", default-features = false, path = "../db" }
-garage_rpc = { version = "0.8.1", path = "../rpc" }
-garage_table = { version = "0.8.1", path = "../table" }
-garage_block = { version = "0.8.1", path = "../block" }
-garage_util = { version = "0.8.1", path = "../util" }
+garage_db = { version = "0.8.2", default-features = false, path = "../db" }
+garage_rpc = { version = "0.8.2", path = "../rpc" }
+garage_table = { version = "0.8.2", path = "../table" }
+garage_block = { version = "0.8.2", path = "../block" }
+garage_util = { version = "0.8.2", path = "../util" }
async-trait = "0.1.7"
arc-swap = "1.0"
-blake2 = "0.9"
+blake2 = "0.10"
err-derive = "0.3"
hex = "0.4"
-base64 = "0.13"
-tracing = "0.1.30"
+base64 = "0.21"
+tracing = "0.1"
rand = "0.8"
-zstd = { version = "0.9", default-features = false }
+zstd = { version = "0.12", default-features = false }
serde = { version = "1.0", default-features = false, features = ["derive", "rc"] }
serde_bytes = "0.11"
diff --git a/src/model/garage.rs b/src/model/garage.rs
index 5bea6b4f..3daa1b33 100644
--- a/src/model/garage.rs
+++ b/src/model/garage.rs
@@ -27,12 +27,14 @@ use crate::index_counter::*;
use crate::key_table::*;
#[cfg(feature = "k2v")]
-use crate::k2v::{item_table::*, poll::*, rpc::*};
+use crate::k2v::{item_table::*, rpc::*, sub::*};
/// An entire Garage full of data
pub struct Garage {
/// The parsed configuration Garage is running
pub config: Config,
+ /// The set of background variables that can be viewed/modified at runtime
+ pub bg_vars: vars::BgVars,
/// The replication mode of this cluster
pub replication_mode: ReplicationMode,
@@ -96,7 +98,7 @@ impl Garage {
.cache_capacity(config.sled_cache_capacity)
.flush_every_ms(Some(config.sled_flush_every_ms))
.open()
- .expect("Unable to open sled DB");
+ .ok_or_message("Unable to open sled DB")?;
db::sled_adapter::SledDb::init(db)
}
#[cfg(not(feature = "sled"))]
@@ -107,7 +109,7 @@ impl Garage {
db_path.push("db.sqlite");
info!("Opening Sqlite database at: {}", db_path.display());
let db = db::sqlite_adapter::rusqlite::Connection::open(db_path)
- .expect("Unable to open sqlite DB");
+ .ok_or_message("Unable to open sqlite DB")?;
db::sqlite_adapter::SqliteDb::init(db)
}
#[cfg(not(feature = "sqlite"))]
@@ -121,7 +123,8 @@ impl Garage {
"lmdb" | "heed" => {
db_path.push("db.lmdb");
info!("Opening LMDB database at: {}", db_path.display());
- std::fs::create_dir_all(&db_path).expect("Unable to create LMDB data directory");
+ std::fs::create_dir_all(&db_path)
+ .ok_or_message("Unable to create LMDB data directory")?;
let map_size = garage_db::lmdb_adapter::recommended_map_size();
use db::lmdb_adapter::heed;
@@ -133,7 +136,16 @@ impl Garage {
env_builder.flag(heed::flags::Flags::MdbNoSync);
env_builder.flag(heed::flags::Flags::MdbNoMetaSync);
}
- let db = env_builder.open(&db_path).expect("Unable to open LMDB DB");
+ let db = match env_builder.open(&db_path) {
+ Err(heed::Error::Io(e)) if e.kind() == std::io::ErrorKind::OutOfMemory => {
+ return Err(Error::Message(
+ "OutOfMemory error while trying to open LMDB database. This can happen \
+ if your operating system is not allowing you to use sufficient virtual \
+ memory address space. Please check that no limit is set (ulimit -v). \
+ On 32-bit machines, you should probably switch to another database engine.".into()))
+ }
+ x => x.ok_or_message("Unable to open LMDB DB")?,
+ };
db::lmdb_adapter::LmdbDb::init(db)
}
#[cfg(not(feature = "lmdb"))]
@@ -156,13 +168,15 @@ impl Garage {
}
};
- let network_key = NetworkKey::from_slice(
- &hex::decode(&config.rpc_secret).expect("Invalid RPC secret key")[..],
- )
- .expect("Invalid RPC secret key");
+ let network_key = hex::decode(config.rpc_secret.as_ref().ok_or_message(
+ "rpc_secret value is missing, not present in config file or in environment",
+ )?)
+ .ok()
+ .and_then(|x| NetworkKey::from_slice(&x))
+ .ok_or_message("Invalid RPC secret key")?;
let replication_mode = ReplicationMode::parse(&config.replication_mode)
- .expect("Invalid replication_mode in config file.");
+ .ok_or_message("Invalid replication_mode in config file.")?;
info!("Initialize membership management system...");
let system = System::new(network_key, replication_mode, &config)?;
@@ -249,9 +263,14 @@ impl Garage {
#[cfg(feature = "k2v")]
let k2v = GarageK2V::new(system.clone(), &db, meta_rep_param);
+ // Initialize bg vars
+ let mut bg_vars = vars::BgVars::new();
+ block_manager.register_bg_vars(&mut bg_vars);
+
// -- done --
Ok(Arc::new(Self {
config,
+ bg_vars,
replication_mode,
db,
system,
@@ -298,8 +317,10 @@ impl GarageK2V {
fn new(system: Arc<System>, db: &db::Db, meta_rep_param: TableShardedReplication) -> Self {
info!("Initialize K2V counter table...");
let counter_table = IndexCounter::new(system.clone(), meta_rep_param.clone(), db);
+
info!("Initialize K2V subscription manager...");
let subscriptions = Arc::new(SubscriptionManager::new());
+
info!("Initialize K2V item table...");
let item_table = Table::new(
K2VItemTable {
@@ -310,7 +331,9 @@ impl GarageK2V {
system.clone(),
db,
);
- let rpc = K2VRpcHandler::new(system, item_table.clone(), subscriptions);
+
+ info!("Initialize K2V RPC handler...");
+ let rpc = K2VRpcHandler::new(system, db, item_table.clone(), subscriptions);
Self {
item_table,
diff --git a/src/model/k2v/causality.rs b/src/model/k2v/causality.rs
index 9a692870..c80ebd39 100644
--- a/src/model/k2v/causality.rs
+++ b/src/model/k2v/causality.rs
@@ -1,3 +1,14 @@
+//! Implements a CausalContext, which is a set of timestamps for each
+//! node -- a vector clock --, indicating that the versions with
+//! timestamps <= these numbers have been seen and can be
+//! overwritten by a subsequent write.
+//!
+//! The textual representation of a CausalContext, which we call a
+//! "causality token", is used in the API and must be sent along with
+//! each write or delete operation to indicate the previously seen
+//! versions that we want to overwrite or delete.
+use base64::prelude::*;
+
use std::collections::BTreeMap;
use std::convert::TryInto;
@@ -5,28 +16,44 @@ use serde::{Deserialize, Serialize};
use garage_util::data::*;
+use crate::helper::error::{Error as HelperError, OkOrBadRequest};
+
/// Node IDs used in K2V are u64 integers that are the abbreviation
/// of full Garage node IDs which are 256-bit UUIDs.
pub type K2VNodeId = u64;
+pub type VectorClock = BTreeMap<K2VNodeId, u64>;
+
pub fn make_node_id(node_id: Uuid) -> K2VNodeId {
let mut tmp = [0u8; 8];
tmp.copy_from_slice(&node_id.as_slice()[..8]);
u64::from_be_bytes(tmp)
}
-#[derive(PartialEq, Eq, Debug, Serialize, Deserialize)]
+pub fn vclock_gt(a: &VectorClock, b: &VectorClock) -> bool {
+ a.iter().any(|(n, ts)| ts > b.get(n).unwrap_or(&0))
+}
+
+pub fn vclock_max(a: &VectorClock, b: &VectorClock) -> VectorClock {
+ let mut ret = a.clone();
+ for (n, ts) in b.iter() {
+ let ent = ret.entry(*n).or_insert(0);
+ *ent = std::cmp::max(*ts, *ent);
+ }
+ ret
+}
+
+#[derive(PartialEq, Eq, Debug, Serialize, Deserialize, Default)]
pub struct CausalContext {
- pub vector_clock: BTreeMap<K2VNodeId, u64>,
+ pub vector_clock: VectorClock,
}
impl CausalContext {
/// Empty causality context
- pub fn new_empty() -> Self {
- Self {
- vector_clock: BTreeMap::new(),
- }
+ pub fn new() -> Self {
+ Self::default()
}
+
/// Make binary representation and encode in base64
pub fn serialize(&self) -> String {
let mut ints = Vec::with_capacity(2 * self.vector_clock.len());
@@ -41,14 +68,15 @@ impl CausalContext {
bytes.extend(u64::to_be_bytes(i));
}
- base64::encode_config(bytes, base64::URL_SAFE_NO_PAD)
+ BASE64_URL_SAFE_NO_PAD.encode(bytes)
}
- /// Parse from base64-encoded binary representation
- pub fn parse(s: &str) -> Result<Self, String> {
- let bytes = base64::decode_config(s, base64::URL_SAFE_NO_PAD)
- .map_err(|e| format!("bad causality token base64: {}", e))?;
+
+ /// Parse from base64-encoded binary representation.
+ /// Returns None on error.
+ pub fn parse(s: &str) -> Option<Self> {
+ let bytes = BASE64_URL_SAFE_NO_PAD.decode(s).ok()?;
if bytes.len() % 16 != 8 || bytes.len() < 8 {
- return Err("bad causality token length".into());
+ return None;
}
let checksum = u64::from_be_bytes(bytes[..8].try_into().unwrap());
@@ -65,16 +93,19 @@ impl CausalContext {
let check = ret.vector_clock.iter().fold(0, |acc, (n, t)| acc ^ *n ^ *t);
if check != checksum {
- return Err("bad causality token checksum".into());
+ return None;
}
- Ok(ret)
+ Some(ret)
}
+
+ pub fn parse_helper(s: &str) -> Result<Self, HelperError> {
+ Self::parse(s).ok_or_bad_request("Invalid causality token")
+ }
+
/// Check if this causal context contains newer items than another one
pub fn is_newer_than(&self, other: &Self) -> bool {
- self.vector_clock
- .iter()
- .any(|(k, v)| v > other.vector_clock.get(k).unwrap_or(&0))
+ vclock_gt(&self.vector_clock, &other.vector_clock)
}
}
diff --git a/src/model/k2v/item_table.rs b/src/model/k2v/item_table.rs
index ce3e4129..9e3ba5a5 100644
--- a/src/model/k2v/item_table.rs
+++ b/src/model/k2v/item_table.rs
@@ -11,7 +11,7 @@ use garage_table::*;
use crate::index_counter::*;
use crate::k2v::causality::*;
-use crate::k2v::poll::*;
+use crate::k2v::sub::*;
pub const ENTRIES: &str = "entries";
pub const CONFLICTS: &str = "conflicts";
@@ -73,7 +73,8 @@ impl K2VItem {
this_node: Uuid,
context: &Option<CausalContext>,
new_value: DvvsValue,
- ) {
+ node_ts: u64,
+ ) -> u64 {
if let Some(context) = context {
for (node, t_discard) in context.vector_clock.iter() {
if let Some(e) = self.items.get_mut(node) {
@@ -98,12 +99,14 @@ impl K2VItem {
values: vec![],
});
let t_prev = e.max_time();
- e.values.push((t_prev + 1, new_value));
+ let t_new = std::cmp::max(t_prev + 1, node_ts + 1);
+ e.values.push((t_new, new_value));
+ t_new
}
/// Extract the causality context of a K2V Item
pub fn causal_context(&self) -> CausalContext {
- let mut cc = CausalContext::new_empty();
+ let mut cc = CausalContext::new();
for (node, ent) in self.items.iter() {
cc.vector_clock.insert(*node, ent.max_time());
}
@@ -173,9 +176,9 @@ impl Crdt for DvvsEntry {
impl PartitionKey for K2VItemPartition {
fn hash(&self) -> Hash {
- use blake2::{Blake2b, Digest};
+ use blake2::{Blake2b512, Digest};
- let mut hasher = Blake2b::new();
+ let mut hasher = Blake2b512::new();
hasher.update(self.bucket_id.as_slice());
hasher.update(self.partition_key.as_bytes());
let mut hash = [0u8; 32];
@@ -310,7 +313,7 @@ mod tests {
values: vec![(6, DvvsValue::Value(vec![16])), (7, DvvsValue::Deleted)],
};
- let mut e3 = e1.clone();
+ let mut e3 = e1;
e3.merge(&e2);
assert_eq!(e2, e3);
}
diff --git a/src/model/k2v/mod.rs b/src/model/k2v/mod.rs
index f6a96151..acc1fcdc 100644
--- a/src/model/k2v/mod.rs
+++ b/src/model/k2v/mod.rs
@@ -1,6 +1,8 @@
pub mod causality;
+pub mod seen;
pub mod item_table;
-pub mod poll;
pub mod rpc;
+
+pub mod sub;
diff --git a/src/model/k2v/poll.rs b/src/model/k2v/poll.rs
deleted file mode 100644
index 93105207..00000000
--- a/src/model/k2v/poll.rs
+++ /dev/null
@@ -1,50 +0,0 @@
-use std::collections::HashMap;
-use std::sync::Mutex;
-
-use serde::{Deserialize, Serialize};
-use tokio::sync::broadcast;
-
-use crate::k2v::item_table::*;
-
-#[derive(Debug, Hash, Clone, PartialEq, Eq, Serialize, Deserialize)]
-pub struct PollKey {
- pub partition: K2VItemPartition,
- pub sort_key: String,
-}
-
-#[derive(Default)]
-pub struct SubscriptionManager {
- subscriptions: Mutex<HashMap<PollKey, broadcast::Sender<K2VItem>>>,
-}
-
-impl SubscriptionManager {
- pub fn new() -> Self {
- Self::default()
- }
-
- pub fn subscribe(&self, key: &PollKey) -> broadcast::Receiver<K2VItem> {
- let mut subs = self.subscriptions.lock().unwrap();
- if let Some(s) = subs.get(key) {
- s.subscribe()
- } else {
- let (tx, rx) = broadcast::channel(8);
- subs.insert(key.clone(), tx);
- rx
- }
- }
-
- pub fn notify(&self, item: &K2VItem) {
- let key = PollKey {
- partition: item.partition.clone(),
- sort_key: item.sort_key.clone(),
- };
- let mut subs = self.subscriptions.lock().unwrap();
- if let Some(s) = subs.get(&key) {
- if s.send(item.clone()).is_err() {
- // no more subscribers, remove channel from here
- // (we will re-create it later if we need to subscribe again)
- subs.remove(&key);
- }
- }
- }
-}
diff --git a/src/model/k2v/rpc.rs b/src/model/k2v/rpc.rs
index f64a7984..37e142f6 100644
--- a/src/model/k2v/rpc.rs
+++ b/src/model/k2v/rpc.rs
@@ -5,9 +5,10 @@
//! node does not process the entry directly, as this would
//! mean the vector clock gets much larger than needed).
-use std::collections::HashMap;
-use std::sync::Arc;
-use std::time::Duration;
+use std::collections::{BTreeMap, HashMap};
+use std::convert::TryInto;
+use std::sync::{Arc, Mutex, MutexGuard};
+use std::time::{Duration, Instant};
use async_trait::async_trait;
use futures::stream::FuturesUnordered;
@@ -15,9 +16,12 @@ use futures::StreamExt;
use serde::{Deserialize, Serialize};
use tokio::select;
+use garage_db as db;
+
use garage_util::crdt::*;
use garage_util::data::*;
use garage_util::error::*;
+use garage_util::time::now_msec;
use garage_rpc::system::System;
use garage_rpc::*;
@@ -25,9 +29,15 @@ use garage_rpc::*;
use garage_table::replication::{TableReplication, TableShardedReplication};
use garage_table::{PartitionKey, Table};
+use crate::helper::error::Error as HelperError;
use crate::k2v::causality::*;
use crate::k2v::item_table::*;
-use crate::k2v::poll::*;
+use crate::k2v::seen::*;
+use crate::k2v::sub::*;
+
+const POLL_RANGE_EXTRA_DELAY: Duration = Duration::from_millis(200);
+
+const TIMESTAMP_KEY: &[u8] = b"timestamp";
/// RPC messages for K2V
#[derive(Debug, Serialize, Deserialize)]
@@ -40,7 +50,13 @@ enum K2VRpc {
causal_context: CausalContext,
timeout_msec: u64,
},
+ PollRange {
+ range: PollRange,
+ seen_str: Option<String>,
+ timeout_msec: u64,
+ },
PollItemResponse(Option<K2VItem>),
+ PollRangeResponse(Uuid, Vec<K2VItem>),
}
#[derive(Debug, Serialize, Deserialize)]
@@ -59,6 +75,12 @@ impl Rpc for K2VRpc {
pub struct K2VRpcHandler {
system: Arc<System>,
item_table: Arc<Table<K2VItemTable, TableShardedReplication>>,
+
+ // Using a mutex on the local_timestamp_tree is not strictly necessary,
+ // but it helps to not try to do several inserts at the same time,
+ // which would create transaction conflicts and force many useless retries.
+ local_timestamp_tree: Mutex<db::Tree>,
+
endpoint: Arc<Endpoint<K2VRpc, Self>>,
subscriptions: Arc<SubscriptionManager>,
}
@@ -66,14 +88,19 @@ pub struct K2VRpcHandler {
impl K2VRpcHandler {
pub fn new(
system: Arc<System>,
+ db: &db::Db,
item_table: Arc<Table<K2VItemTable, TableShardedReplication>>,
subscriptions: Arc<SubscriptionManager>,
) -> Arc<Self> {
+ let local_timestamp_tree = db
+ .open_tree("k2v_local_timestamp")
+ .expect("Unable to open DB tree for k2v local timestamp");
let endpoint = system.netapp.endpoint("garage_model/k2v/Rpc".to_string());
let rpc_handler = Arc::new(Self {
system,
item_table,
+ local_timestamp_tree: Mutex::new(local_timestamp_tree),
endpoint,
subscriptions,
});
@@ -181,7 +208,7 @@ impl K2VRpcHandler {
Ok(())
}
- pub async fn poll(
+ pub async fn poll_item(
&self,
bucket_id: Uuid,
partition_key: String,
@@ -230,9 +257,7 @@ impl K2VRpcHandler {
resp = Some(x);
}
}
- K2VRpc::PollItemResponse(None) => {
- return Ok(None);
- }
+ K2VRpc::PollItemResponse(None) => (),
v => return Err(Error::unexpected_rpc_message(v)),
}
}
@@ -240,10 +265,117 @@ impl K2VRpcHandler {
Ok(resp)
}
+ pub async fn poll_range(
+ &self,
+ range: PollRange,
+ seen_str: Option<String>,
+ timeout_msec: u64,
+ ) -> Result<Option<(BTreeMap<String, K2VItem>, String)>, HelperError> {
+ let has_seen_marker = seen_str.is_some();
+
+ // Parse seen marker, we will use it below. This is also the first check
+ // that it is valid, which returns a bad request error if not.
+ let mut seen = seen_str
+ .as_deref()
+ .map(RangeSeenMarker::decode_helper)
+ .transpose()?
+ .unwrap_or_default();
+ seen.restrict(&range);
+
+ // Prepare PollRange RPC to send to the storage nodes responsible for the parititon
+ let nodes = self
+ .item_table
+ .data
+ .replication
+ .write_nodes(&range.partition.hash());
+ let quorum = self.item_table.data.replication.read_quorum();
+ let msg = K2VRpc::PollRange {
+ range,
+ seen_str,
+ timeout_msec,
+ };
+
+ // Send the request to all nodes, use FuturesUnordered to get the responses in any order
+ let msg = msg.into_req().map_err(netapp::error::Error::from)?;
+ let rs = RequestStrategy::with_priority(PRIO_NORMAL).without_timeout();
+ let mut requests = nodes
+ .iter()
+ .map(|node| self.system.rpc.call(&self.endpoint, *node, msg.clone(), rs))
+ .collect::<FuturesUnordered<_>>();
+
+ // Fetch responses. This procedure stops fetching responses when any of the following
+ // conditions arise:
+ // - we have a response to all requests
+ // - we have a response to a read quorum of requests (e.g. 2/3), and an extra delay
+ // has passed since the quorum was achieved
+ // - a global RPC timeout expired
+ // The extra delay after a quorum was received is usefull if the third response was to
+ // arrive during this short interval: this would allow us to consider all the data seen
+ // by that last node in the response we produce, and would likely help reduce the
+ // size of the seen marker that we will return (because we would have an info of the
+ // kind: all items produced by that node until time ts have been returned, so we can
+ // bump the entry in the global vector clock and possibly remove some item-specific
+ // vector clocks)
+ let mut deadline =
+ Instant::now() + Duration::from_millis(timeout_msec) + self.system.rpc.rpc_timeout();
+ let mut resps = vec![];
+ let mut errors = vec![];
+ loop {
+ select! {
+ _ = tokio::time::sleep_until(deadline.into()) => {
+ break;
+ }
+ res = requests.next() => match res {
+ None => break,
+ Some(Err(e)) => errors.push(e),
+ Some(Ok(r)) => {
+ resps.push(r);
+ if resps.len() >= quorum {
+ deadline = std::cmp::min(deadline, Instant::now() + POLL_RANGE_EXTRA_DELAY);
+ }
+ }
+ }
+ }
+ }
+ if errors.len() > nodes.len() - quorum {
+ let errors = errors.iter().map(|e| format!("{}", e)).collect::<Vec<_>>();
+ return Err(Error::Quorum(quorum, resps.len(), nodes.len(), errors).into());
+ }
+
+ // Take all returned items into account to produce the response.
+ let mut new_items = BTreeMap::<String, K2VItem>::new();
+ for v in resps {
+ if let K2VRpc::PollRangeResponse(node, items) = v {
+ seen.mark_seen_node_items(node, items.iter());
+ for item in items.into_iter() {
+ match new_items.get_mut(&item.sort_key) {
+ Some(ent) => {
+ ent.merge(&item);
+ }
+ None => {
+ new_items.insert(item.sort_key.clone(), item);
+ }
+ }
+ }
+ } else {
+ return Err(Error::unexpected_rpc_message(v).into());
+ }
+ }
+
+ if new_items.is_empty() && has_seen_marker {
+ Ok(None)
+ } else {
+ Ok(Some((new_items, seen.encode()?)))
+ }
+ }
+
// ---- internal handlers ----
async fn handle_insert(&self, item: &InsertedItem) -> Result<K2VRpc, Error> {
- let new = self.local_insert(item)?;
+ let new = {
+ let local_timestamp_tree = self.local_timestamp_tree.lock().unwrap();
+ self.local_insert(&local_timestamp_tree, item)?
+ };
// Propagate to rest of network
if let Some(updated) = new {
@@ -256,11 +388,14 @@ impl K2VRpcHandler {
async fn handle_insert_many(&self, items: &[InsertedItem]) -> Result<K2VRpc, Error> {
let mut updated_vec = vec![];
- for item in items {
- let new = self.local_insert(item)?;
+ {
+ let local_timestamp_tree = self.local_timestamp_tree.lock().unwrap();
+ for item in items {
+ let new = self.local_insert(&local_timestamp_tree, item)?;
- if let Some(updated) = new {
- updated_vec.push(updated);
+ if let Some(updated) = new {
+ updated_vec.push(updated);
+ }
}
}
@@ -272,10 +407,22 @@ impl K2VRpcHandler {
Ok(K2VRpc::Ok)
}
- fn local_insert(&self, item: &InsertedItem) -> Result<Option<K2VItem>, Error> {
+ fn local_insert(
+ &self,
+ local_timestamp_tree: &MutexGuard<'_, db::Tree>,
+ item: &InsertedItem,
+ ) -> Result<Option<K2VItem>, Error> {
+ let now = now_msec();
+
self.item_table
.data
- .update_entry_with(&item.partition, &item.sort_key, |ent| {
+ .update_entry_with(&item.partition, &item.sort_key, |tx, ent| {
+ let old_local_timestamp = tx
+ .get(local_timestamp_tree, TIMESTAMP_KEY)?
+ .and_then(|x| x.try_into().ok())
+ .map(u64::from_be_bytes)
+ .unwrap_or_default();
+
let mut ent = ent.unwrap_or_else(|| {
K2VItem::new(
item.partition.bucket_id,
@@ -283,13 +430,25 @@ impl K2VRpcHandler {
item.sort_key.clone(),
)
});
- ent.update(self.system.id, &item.causal_context, item.value.clone());
- ent
+ let new_local_timestamp = ent.update(
+ self.system.id,
+ &item.causal_context,
+ item.value.clone(),
+ std::cmp::max(old_local_timestamp, now),
+ );
+
+ tx.insert(
+ local_timestamp_tree,
+ TIMESTAMP_KEY,
+ u64::to_be_bytes(new_local_timestamp),
+ )?;
+
+ Ok(ent)
})
}
- async fn handle_poll(&self, key: &PollKey, ct: &CausalContext) -> Result<K2VItem, Error> {
- let mut chan = self.subscriptions.subscribe(key);
+ async fn handle_poll_item(&self, key: &PollKey, ct: &CausalContext) -> Result<K2VItem, Error> {
+ let mut chan = self.subscriptions.subscribe_item(key);
let mut value = self
.item_table
@@ -311,6 +470,71 @@ impl K2VRpcHandler {
Ok(value)
}
+
+ async fn handle_poll_range(
+ &self,
+ range: &PollRange,
+ seen_str: &Option<String>,
+ ) -> Result<Vec<K2VItem>, Error> {
+ if let Some(seen_str) = seen_str {
+ let seen = RangeSeenMarker::decode(seen_str).ok_or_message("Invalid seenMarker")?;
+
+ // Subscribe now to all changes on that partition,
+ // so that new items that are inserted while we are reading the range
+ // will be seen in the loop below
+ let mut chan = self.subscriptions.subscribe_partition(&range.partition);
+
+ // Check for the presence of any new items already stored in the item table
+ let mut new_items = self.poll_range_read_range(range, &seen)?;
+
+ // If we found no new items, wait for a matching item to arrive
+ // on the channel
+ while new_items.is_empty() {
+ let item = chan.recv().await?;
+ if range.matches(&item) && seen.is_new_item(&item) {
+ new_items.push(item);
+ }
+ }
+
+ Ok(new_items)
+ } else {
+ // If no seen marker was specified, we do not poll for anything.
+ // We return immediately with the set of known items (even if
+ // it is empty), which will give the client an inital view of
+ // the dataset and an initial seen marker for further
+ // PollRange calls.
+ self.poll_range_read_range(range, &RangeSeenMarker::default())
+ }
+ }
+
+ fn poll_range_read_range(
+ &self,
+ range: &PollRange,
+ seen: &RangeSeenMarker,
+ ) -> Result<Vec<K2VItem>, Error> {
+ let mut new_items = vec![];
+
+ let partition_hash = range.partition.hash();
+ let first_key = match &range.start {
+ None => partition_hash.to_vec(),
+ Some(sk) => self.item_table.data.tree_key(&range.partition, sk),
+ };
+ for item in self.item_table.data.store.range(first_key..)? {
+ let (key, value) = item?;
+ if &key[..32] != partition_hash.as_slice() {
+ break;
+ }
+ let item = self.item_table.data.decode_entry(&value)?;
+ if !range.matches(&item) {
+ break;
+ }
+ if seen.is_new_item(&item) {
+ new_items.push(item);
+ }
+ }
+
+ Ok(new_items)
+ }
}
#[async_trait]
@@ -326,10 +550,21 @@ impl EndpointHandler<K2VRpc> for K2VRpcHandler {
} => {
let delay = tokio::time::sleep(Duration::from_millis(*timeout_msec));
select! {
- ret = self.handle_poll(key, causal_context) => ret.map(Some).map(K2VRpc::PollItemResponse),
+ ret = self.handle_poll_item(key, causal_context) => ret.map(Some).map(K2VRpc::PollItemResponse),
_ = delay => Ok(K2VRpc::PollItemResponse(None)),
}
}
+ K2VRpc::PollRange {
+ range,
+ seen_str,
+ timeout_msec,
+ } => {
+ let delay = tokio::time::sleep(Duration::from_millis(*timeout_msec));
+ select! {
+ ret = self.handle_poll_range(range, seen_str) => ret.map(|items| K2VRpc::PollRangeResponse(self.system.id, items)),
+ _ = delay => Ok(K2VRpc::PollRangeResponse(self.system.id, vec![])),
+ }
+ }
m => Err(Error::unexpected_rpc_message(m)),
}
}
diff --git a/src/model/k2v/seen.rs b/src/model/k2v/seen.rs
new file mode 100644
index 00000000..8fe3a582
--- /dev/null
+++ b/src/model/k2v/seen.rs
@@ -0,0 +1,105 @@
+//! Implements a RangeSeenMarker, a data type used in the PollRange API
+//! to indicate which items in the range have already been seen
+//! and which have not been seen yet.
+//!
+//! It consists of a vector clock that indicates that for each node,
+//! all items produced by that node with timestamps <= the value in the
+//! vector clock has been seen, as well as a set of causal contexts for
+//! individual items.
+
+use std::collections::BTreeMap;
+
+use base64::prelude::*;
+use serde::{Deserialize, Serialize};
+
+use garage_util::data::Uuid;
+use garage_util::encode::{nonversioned_decode, nonversioned_encode};
+use garage_util::error::Error;
+
+use crate::helper::error::{Error as HelperError, OkOrBadRequest};
+use crate::k2v::causality::*;
+use crate::k2v::item_table::*;
+use crate::k2v::sub::*;
+
+#[derive(Debug, Serialize, Deserialize, Default)]
+pub struct RangeSeenMarker {
+ vector_clock: VectorClock,
+ items: BTreeMap<String, VectorClock>,
+}
+
+impl RangeSeenMarker {
+ pub fn new() -> Self {
+ Self::default()
+ }
+
+ pub fn restrict(&mut self, range: &PollRange) {
+ if let Some(start) = &range.start {
+ self.items = self.items.split_off(start);
+ }
+ if let Some(end) = &range.end {
+ self.items.split_off(end);
+ }
+ if let Some(pfx) = &range.prefix {
+ self.items.retain(|k, _v| k.starts_with(pfx));
+ }
+ }
+
+ pub fn mark_seen_node_items<'a, I: IntoIterator<Item = &'a K2VItem>>(
+ &mut self,
+ node: Uuid,
+ items: I,
+ ) {
+ let node = make_node_id(node);
+ for item in items.into_iter() {
+ let cc = item.causal_context();
+
+ if let Some(ts) = cc.vector_clock.get(&node) {
+ let ent = self.vector_clock.entry(node).or_insert(0);
+ *ent = std::cmp::max(*ent, *ts);
+ }
+
+ if vclock_gt(&cc.vector_clock, &self.vector_clock) {
+ match self.items.get_mut(&item.sort_key) {
+ None => {
+ self.items.insert(item.sort_key.clone(), cc.vector_clock);
+ }
+ Some(ent) => *ent = vclock_max(ent, &cc.vector_clock),
+ }
+ }
+ }
+ }
+
+ pub fn canonicalize(&mut self) {
+ let self_vc = &self.vector_clock;
+ self.items.retain(|_sk, vc| vclock_gt(vc, self_vc))
+ }
+
+ pub fn encode(&mut self) -> Result<String, Error> {
+ self.canonicalize();
+
+ let bytes = nonversioned_encode(&self)?;
+ let bytes = zstd::stream::encode_all(&mut &bytes[..], zstd::DEFAULT_COMPRESSION_LEVEL)?;
+ Ok(BASE64_STANDARD.encode(&bytes))
+ }
+
+ /// Decode from msgpack+zstd+b64 representation, returns None on error.
+ pub fn decode(s: &str) -> Option<Self> {
+ let bytes = BASE64_STANDARD.decode(s).ok()?;
+ let bytes = zstd::stream::decode_all(&mut &bytes[..]).ok()?;
+ nonversioned_decode(&bytes).ok()
+ }
+
+ pub fn decode_helper(s: &str) -> Result<Self, HelperError> {
+ Self::decode(s).ok_or_bad_request("Invalid causality token")
+ }
+
+ pub fn is_new_item(&self, item: &K2VItem) -> bool {
+ let cc = item.causal_context();
+ vclock_gt(&cc.vector_clock, &self.vector_clock)
+ && self
+ .items
+ .get(&item.sort_key)
+ .map(|vc| vclock_gt(&cc.vector_clock, vc))
+ .unwrap_or(true)
+ }
+}
diff --git a/src/model/k2v/sub.rs b/src/model/k2v/sub.rs
new file mode 100644
index 00000000..b1daa271
--- /dev/null
+++ b/src/model/k2v/sub.rs
@@ -0,0 +1,110 @@
+use std::collections::HashMap;
+use std::sync::Mutex;
+
+use serde::{Deserialize, Serialize};
+use tokio::sync::broadcast;
+
+use crate::k2v::item_table::*;
+
+#[derive(Debug, Hash, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct PollKey {
+ pub partition: K2VItemPartition,
+ pub sort_key: String,
+}
+
+#[derive(Debug, Hash, Clone, PartialEq, Eq, Serialize, Deserialize)]
+pub struct PollRange {
+ pub partition: K2VItemPartition,
+ pub prefix: Option<String>,
+ pub start: Option<String>,
+ pub end: Option<String>,
+}
+
+#[derive(Default)]
+pub struct SubscriptionManager(Mutex<SubscriptionManagerInner>);
+
+#[derive(Default)]
+pub struct SubscriptionManagerInner {
+ item_subscriptions: HashMap<PollKey, broadcast::Sender<K2VItem>>,
+ part_subscriptions: HashMap<K2VItemPartition, broadcast::Sender<K2VItem>>,
+}
+
+impl SubscriptionManager {
+ pub fn new() -> Self {
+ Self::default()
+ }
+
+ pub(crate) fn subscribe_item(&self, key: &PollKey) -> broadcast::Receiver<K2VItem> {
+ let mut inner = self.0.lock().unwrap();
+ if let Some(s) = inner.item_subscriptions.get(key) {
+ s.subscribe()
+ } else {
+ let (tx, rx) = broadcast::channel(8);
+ inner.item_subscriptions.insert(key.clone(), tx);
+ rx
+ }
+ }
+
+ pub(crate) fn subscribe_partition(
+ &self,
+ part: &K2VItemPartition,
+ ) -> broadcast::Receiver<K2VItem> {
+ let mut inner = self.0.lock().unwrap();
+ if let Some(s) = inner.part_subscriptions.get(part) {
+ s.subscribe()
+ } else {
+ let (tx, rx) = broadcast::channel(8);
+ inner.part_subscriptions.insert(part.clone(), tx);
+ rx
+ }
+ }
+
+ pub(crate) fn notify(&self, item: &K2VItem) {
+ let mut inner = self.0.lock().unwrap();
+
+ // 1. Notify single item subscribers,
+ // removing subscriptions with no more listeners if any
+ let key = PollKey {
+ partition: item.partition.clone(),
+ sort_key: item.sort_key.clone(),
+ };
+ if let Some(s) = inner.item_subscriptions.get(&key) {
+ if s.send(item.clone()).is_err() {
+ // no more subscribers, remove channel from here
+ // (we will re-create it later if we need to subscribe again)
+ inner.item_subscriptions.remove(&key);
+ }
+ }
+
+ // 2. Notify partition subscribers,
+ // removing subscriptions with no more listeners if any
+ if let Some(s) = inner.part_subscriptions.get(&item.partition) {
+ if s.send(item.clone()).is_err() {
+ // no more subscribers, remove channel from here
+ // (we will re-create it later if we need to subscribe again)
+ inner.part_subscriptions.remove(&item.partition);
+ }
+ }
+ }
+}
+
+impl PollRange {
+ pub fn matches(&self, item: &K2VItem) -> bool {
+ item.partition == self.partition
+ && self
+ .prefix
+ .as_ref()
+ .map(|x| item.sort_key.starts_with(x))
+ .unwrap_or(true)
+ && self
+ .start
+ .as_ref()
+ .map(|x| item.sort_key >= *x)
+ .unwrap_or(true)
+ && self
+ .end
+ .as_ref()
+ .map(|x| item.sort_key < *x)
+ .unwrap_or(true)
+ }
+}
diff --git a/src/rpc/Cargo.toml b/src/rpc/Cargo.toml
index 3d4d3ff5..57c157d0 100644
--- a/src/rpc/Cargo.toml
+++ b/src/rpc/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage_rpc"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -14,17 +14,18 @@ path = "lib.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-garage_util = { version = "0.8.1", path = "../util" }
+garage_util = { version = "0.8.2", path = "../util" }
arc-swap = "1.0"
bytes = "1.0"
bytesize = "1.1"
gethostname = "0.2"
hex = "0.4"
-tracing = "0.1.30"
+tracing = "0.1"
rand = "0.8"
itertools="0.10"
sodiumoxide = { version = "0.2.5-0", package = "kuska-sodiumoxide" }
+systemstat = "0.2.3"
async-trait = "0.1.7"
serde = { version = "1.0", default-features = false, features = ["derive", "rc"] }
@@ -38,8 +39,7 @@ k8s-openapi = { version = "0.16", features = ["v1_22"], optional = true }
schemars = { version = "0.8", optional = true }
reqwest = { version = "0.11", optional = true, default-features = false, features = ["rustls-tls-manual-roots", "json"] }
-# newer version requires rust edition 2021
-pnet_datalink = "0.28"
+pnet_datalink = "0.33"
futures = "0.3"
futures-util = "0.3"
diff --git a/src/rpc/consul.rs b/src/rpc/consul.rs
index b1772a1a..f85f789c 100644
--- a/src/rpc/consul.rs
+++ b/src/rpc/consul.rs
@@ -113,7 +113,7 @@ impl ConsulDiscovery {
let pubkey = ent
.node_meta
.get("pubkey")
- .and_then(|k| hex::decode(&k).ok())
+ .and_then(|k| hex::decode(k).ok())
.and_then(|k| NodeID::from_slice(&k[..]));
if let (Some(ip), Some(pubkey)) = (ip, pubkey) {
ret.push((pubkey, SocketAddr::new(ip, ent.service_port)));
diff --git a/src/rpc/lib.rs b/src/rpc/lib.rs
index f734942d..a5f8fc6e 100644
--- a/src/rpc/lib.rs
+++ b/src/rpc/lib.rs
@@ -3,6 +3,9 @@
#[macro_use]
extern crate tracing;
+mod metrics;
+mod system_metrics;
+
#[cfg(feature = "consul-discovery")]
mod consul;
#[cfg(feature = "kubernetes-discovery")]
@@ -14,7 +17,6 @@ pub mod replication_mode;
pub mod ring;
pub mod system;
-mod metrics;
pub mod rpc_helper;
pub use rpc_helper::*;
diff --git a/src/rpc/rpc_helper.rs b/src/rpc/rpc_helper.rs
index 1ec250c3..e59c372a 100644
--- a/src/rpc/rpc_helper.rs
+++ b/src/rpc/rpc_helper.rs
@@ -15,10 +15,9 @@ use opentelemetry::{
};
pub use netapp::endpoint::{Endpoint, EndpointHandler, StreamingEndpointHandler};
-use netapp::message::IntoReq;
pub use netapp::message::{
- Message as Rpc, OrderTag, Req, RequestPriority, Resp, PRIO_BACKGROUND, PRIO_HIGH, PRIO_NORMAL,
- PRIO_SECONDARY,
+ IntoReq, Message as Rpc, OrderTag, Req, RequestPriority, Resp, PRIO_BACKGROUND, PRIO_HIGH,
+ PRIO_NORMAL, PRIO_SECONDARY,
};
use netapp::peering::fullmesh::FullMeshPeeringStrategy;
pub use netapp::{self, NetApp, NodeID};
diff --git a/src/rpc/system.rs b/src/rpc/system.rs
index 1f4d86e7..c549d8fc 100644
--- a/src/rpc/system.rs
+++ b/src/rpc/system.rs
@@ -3,6 +3,7 @@ use std::collections::HashMap;
use std::io::{Read, Write};
use std::net::{IpAddr, SocketAddr};
use std::path::{Path, PathBuf};
+use std::sync::atomic::Ordering;
use std::sync::{Arc, RwLock};
use std::time::{Duration, Instant};
@@ -38,6 +39,8 @@ use crate::replication_mode::*;
use crate::ring::*;
use crate::rpc_helper::*;
+use crate::system_metrics::*;
+
const DISCOVERY_INTERVAL: Duration = Duration::from_secs(60);
const STATUS_EXCHANGE_INTERVAL: Duration = Duration::from_secs(10);
@@ -104,6 +107,8 @@ pub struct System {
#[cfg(feature = "kubernetes-discovery")]
kubernetes_discovery: Option<KubernetesDiscoveryConfig>,
+ metrics: SystemMetrics,
+
replication_mode: ReplicationMode,
replication_factor: usize,
@@ -113,18 +118,28 @@ pub struct System {
/// Path to metadata directory
pub metadata_dir: PathBuf,
+ /// Path to data directory
+ pub data_dir: PathBuf,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NodeStatus {
/// Hostname of the node
pub hostname: String,
+
/// Replication factor configured on the node
pub replication_factor: usize,
/// Cluster layout version
pub cluster_layout_version: u64,
/// Hash of cluster layout staging data
pub cluster_layout_staging_hash: Hash,
+
+ /// Disk usage on partition containing metadata directory (tuple: `(avail, total)`)
+ #[serde(default)]
+ pub meta_disk_avail: Option<(u64, u64)>,
+ /// Disk usage on partition containing data directory (tuple: `(avail, total)`)
+ #[serde(default)]
+ pub data_disk_avail: Option<(u64, u64)>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
@@ -200,7 +215,7 @@ pub fn gen_node_key(metadata_dir: &Path) -> Result<NodeKey, Error> {
} else {
if !metadata_dir.exists() {
info!("Metadata directory does not exist, creating it.");
- std::fs::create_dir(&metadata_dir)?;
+ std::fs::create_dir(metadata_dir)?;
}
info!("Generating new node key pair.");
@@ -266,14 +281,10 @@ impl System {
}
};
- let local_status = NodeStatus {
- hostname: gethostname::gethostname()
- .into_string()
- .unwrap_or_else(|_| "<invalid utf-8>".to_string()),
- replication_factor,
- cluster_layout_version: cluster_layout.version,
- cluster_layout_staging_hash: cluster_layout.staging_hash,
- };
+ let metrics = SystemMetrics::new(replication_factor);
+
+ let mut local_status = NodeStatus::initial(replication_factor, &cluster_layout);
+ local_status.update_disk_usage(&config.metadata_dir, &config.data_dir, &metrics);
let ring = Ring::new(cluster_layout, replication_factor);
let (update_ring, ring) = watch::channel(Arc::new(ring));
@@ -365,10 +376,12 @@ impl System {
consul_discovery,
#[cfg(feature = "kubernetes-discovery")]
kubernetes_discovery: config.kubernetes_discovery.clone(),
+ metrics,
ring,
update_ring: Mutex::new(update_ring),
metadata_dir: config.metadata_dir.clone(),
+ data_dir: config.data_dir.clone(),
});
sys.system_endpoint.set_handler(sys.clone());
Ok(sys)
@@ -406,12 +419,7 @@ impl System {
.get(&n.id.into())
.cloned()
.map(|(_, st)| st)
- .unwrap_or(NodeStatus {
- hostname: "?".to_string(),
- replication_factor: 0,
- cluster_layout_version: 0,
- cluster_layout_staging_hash: Hash::from([0u8; 32]),
- }),
+ .unwrap_or_else(NodeStatus::unknown),
})
.collect::<Vec<_>>();
known_nodes
@@ -590,6 +598,9 @@ impl System {
let ring = self.ring.borrow();
new_si.cluster_layout_version = ring.layout.version;
new_si.cluster_layout_staging_hash = ring.layout.staging_hash;
+
+ new_si.update_disk_usage(&self.metadata_dir, &self.data_dir, &self.metrics);
+
self.local_status.swap(Arc::new(new_si));
}
@@ -854,6 +865,69 @@ impl EndpointHandler<SystemRpc> for System {
}
}
+impl NodeStatus {
+ fn initial(replication_factor: usize, layout: &ClusterLayout) -> Self {
+ NodeStatus {
+ hostname: gethostname::gethostname()
+ .into_string()
+ .unwrap_or_else(|_| "<invalid utf-8>".to_string()),
+ replication_factor,
+ cluster_layout_version: layout.version,
+ cluster_layout_staging_hash: layout.staging_hash,
+ meta_disk_avail: None,
+ data_disk_avail: None,
+ }
+ }
+
+ fn unknown() -> Self {
+ NodeStatus {
+ hostname: "?".to_string(),
+ replication_factor: 0,
+ cluster_layout_version: 0,
+ cluster_layout_staging_hash: Hash::from([0u8; 32]),
+ meta_disk_avail: None,
+ data_disk_avail: None,
+ }
+ }
+
+ fn update_disk_usage(&mut self, meta_dir: &Path, data_dir: &Path, metrics: &SystemMetrics) {
+ use systemstat::{Platform, System};
+ let mounts = System::new().mounts().unwrap_or_default();
+
+ let mount_avail = |path: &Path| {
+ mounts
+ .iter()
+ .filter(|x| path.starts_with(&x.fs_mounted_on))
+ .max_by_key(|x| x.fs_mounted_on.len())
+ .map(|x| (x.avail.as_u64(), x.total.as_u64()))
+ };
+
+ self.meta_disk_avail = mount_avail(meta_dir);
+ self.data_disk_avail = mount_avail(data_dir);
+
+ if let Some((avail, total)) = self.meta_disk_avail {
+ metrics
+ .values
+ .meta_disk_avail
+ .store(avail, Ordering::Relaxed);
+ metrics
+ .values
+ .meta_disk_total
+ .store(total, Ordering::Relaxed);
+ }
+ if let Some((avail, total)) = self.data_disk_avail {
+ metrics
+ .values
+ .data_disk_avail
+ .store(avail, Ordering::Relaxed);
+ metrics
+ .values
+ .data_disk_total
+ .store(total, Ordering::Relaxed);
+ }
+ }
+}
+
fn get_default_ip() -> Option<IpAddr> {
pnet_datalink::interfaces()
.iter()
diff --git a/src/rpc/system_metrics.rs b/src/rpc/system_metrics.rs
new file mode 100644
index 00000000..af81b71f
--- /dev/null
+++ b/src/rpc/system_metrics.rs
@@ -0,0 +1,77 @@
+use std::sync::atomic::{AtomicU64, Ordering};
+use std::sync::Arc;
+
+use opentelemetry::{global, metrics::*, KeyValue};
+
+/// TableMetrics reference all counter used for metrics
+pub struct SystemMetrics {
+ pub(crate) _garage_build_info: ValueObserver<u64>,
+ pub(crate) _replication_factor: ValueObserver<u64>,
+ pub(crate) _disk_avail: ValueObserver<u64>,
+ pub(crate) _disk_total: ValueObserver<u64>,
+ pub(crate) values: Arc<SystemMetricsValues>,
+}
+
+#[derive(Default)]
+pub struct SystemMetricsValues {
+ pub(crate) data_disk_total: AtomicU64,
+ pub(crate) data_disk_avail: AtomicU64,
+ pub(crate) meta_disk_total: AtomicU64,
+ pub(crate) meta_disk_avail: AtomicU64,
+}
+
+impl SystemMetrics {
+ pub fn new(replication_factor: usize) -> Self {
+ let meter = global::meter("garage_system");
+ let values = Arc::new(SystemMetricsValues::default());
+ let values1 = values.clone();
+ let values2 = values.clone();
+ Self {
+ _garage_build_info: meter
+ .u64_value_observer("garage_build_info", move |observer| {
+ observer.observe(
+ 1,
+ &[
+ KeyValue::new("rustversion", garage_util::version::rust_version()),
+ KeyValue::new("version", garage_util::version::garage_version()),
+ ],
+ )
+ })
+ .with_description("Garage build info")
+ .init(),
+ _replication_factor: meter
+ .u64_value_observer("garage_replication_factor", move |observer| {
+ observer.observe(replication_factor as u64, &[])
+ })
+ .with_description("Garage replication factor setting")
+ .init(),
+ _disk_avail: meter
+ .u64_value_observer("garage_local_disk_avail", move |observer| {
+ match values1.data_disk_avail.load(Ordering::Relaxed) {
+ 0 => (),
+ x => observer.observe(x, &[KeyValue::new("volume", "data")]),
+ };
+ match values1.meta_disk_avail.load(Ordering::Relaxed) {
+ 0 => (),
+ x => observer.observe(x, &[KeyValue::new("volume", "metadata")]),
+ };
+ })
+ .with_description("Garage available disk space on each node")
+ .init(),
+ _disk_total: meter
+ .u64_value_observer("garage_local_disk_total", move |observer| {
+ match values2.data_disk_total.load(Ordering::Relaxed) {
+ 0 => (),
+ x => observer.observe(x, &[KeyValue::new("volume", "data")]),
+ };
+ match values2.meta_disk_total.load(Ordering::Relaxed) {
+ 0 => (),
+ x => observer.observe(x, &[KeyValue::new("volume", "metadata")]),
+ };
+ })
+ .with_description("Garage total disk space on each node")
+ .init(),
+ values,
+ }
+ }
+}
diff --git a/src/table/Cargo.toml b/src/table/Cargo.toml
index 3911c945..c794c924 100644
--- a/src/table/Cargo.toml
+++ b/src/table/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage_table"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -14,9 +14,9 @@ path = "lib.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-garage_db = { version = "0.8.1", path = "../db" }
-garage_rpc = { version = "0.8.1", path = "../rpc" }
-garage_util = { version = "0.8.1", path = "../util" }
+garage_db = { version = "0.8.2", path = "../db" }
+garage_rpc = { version = "0.8.2", path = "../rpc" }
+garage_util = { version = "0.8.2", path = "../util" }
opentelemetry = "0.17"
@@ -25,7 +25,7 @@ arc-swap = "1.0"
bytes = "1.0"
hex = "0.4"
hexdump = "0.1"
-tracing = "0.1.30"
+tracing = "0.1"
rand = "0.8"
serde = { version = "1.0", default-features = false, features = ["derive", "rc"] }
diff --git a/src/table/data.rs b/src/table/data.rs
index 5c792f1f..26cc3a5a 100644
--- a/src/table/data.rs
+++ b/src/table/data.rs
@@ -181,13 +181,17 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> {
pub(crate) fn update_entry(&self, update_bytes: &[u8]) -> Result<(), Error> {
let update = self.decode_entry(update_bytes)?;
- self.update_entry_with(update.partition_key(), update.sort_key(), |ent| match ent {
- Some(mut ent) => {
- ent.merge(&update);
- ent
- }
- None => update.clone(),
- })?;
+ self.update_entry_with(
+ update.partition_key(),
+ update.sort_key(),
+ |_tx, ent| match ent {
+ Some(mut ent) => {
+ ent.merge(&update);
+ Ok(ent)
+ }
+ None => Ok(update.clone()),
+ },
+ )?;
Ok(())
}
@@ -195,7 +199,7 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> {
&self,
partition_key: &F::P,
sort_key: &F::S,
- f: impl Fn(Option<F::E>) -> F::E,
+ update_fn: impl Fn(&mut db::Transaction, Option<F::E>) -> db::TxOpResult<F::E>,
) -> Result<Option<F::E>, Error> {
let tree_key = self.tree_key(partition_key, sort_key);
@@ -203,10 +207,10 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> {
let (old_entry, old_bytes, new_entry) = match tx.get(&self.store, &tree_key)? {
Some(old_bytes) => {
let old_entry = self.decode_entry(&old_bytes).map_err(db::TxError::Abort)?;
- let new_entry = f(Some(old_entry.clone()));
+ let new_entry = update_fn(&mut tx, Some(old_entry.clone()))?;
(Some(old_entry), Some(old_bytes), new_entry)
}
- None => (None, None, f(None)),
+ None => (None, None, update_fn(&mut tx, None)?),
};
// Changed can be true in two scenarios
diff --git a/src/util/Cargo.toml b/src/util/Cargo.toml
index 0468b7f4..387471ed 100644
--- a/src/util/Cargo.toml
+++ b/src/util/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage_util"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>"]
edition = "2018"
license = "AGPL-3.0"
@@ -14,11 +14,11 @@ path = "lib.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-garage_db = { version = "0.8.1", path = "../db" }
+garage_db = { version = "0.8.2", path = "../db" }
arc-swap = "1.0"
async-trait = "0.1"
-blake2 = "0.9"
+blake2 = "0.10"
bytes = "1.0"
digest = "0.10"
err-derive = "0.3"
@@ -27,7 +27,7 @@ hexdump = "0.1"
xxhash-rust = { version = "0.8", default-features = false, features = ["xxh3"] }
hex = "0.4"
lazy_static = "1.4"
-tracing = "0.1.30"
+tracing = "0.1"
rand = "0.8"
sha2 = "0.10"
@@ -35,7 +35,7 @@ chrono = "0.4"
rmp-serde = "1.1"
serde = { version = "1.0", default-features = false, features = ["derive", "rc"] }
serde_json = "1.0"
-toml = "0.5"
+toml = "0.6"
futures = "0.3"
tokio = { version = "1.0", default-features = false, features = ["rt", "rt-multi-thread", "io-util", "net", "time", "macros", "sync", "signal", "fs"] }
@@ -47,6 +47,11 @@ hyper = "0.14"
opentelemetry = { version = "0.17", features = [ "rt-tokio", "metrics", "trace" ] }
+[build-dependencies]
+rustc_version = "0.4.0"
+
+[dev-dependencies]
+mktemp = "0.5"
[features]
k2v = []
diff --git a/src/util/background/mod.rs b/src/util/background/mod.rs
index 41b48e93..607cd7a3 100644
--- a/src/util/background/mod.rs
+++ b/src/util/background/mod.rs
@@ -1,5 +1,6 @@
//! Job runner for futures and async functions
+pub mod vars;
pub mod worker;
use std::collections::HashMap;
diff --git a/src/util/background/vars.rs b/src/util/background/vars.rs
new file mode 100644
index 00000000..7a449c95
--- /dev/null
+++ b/src/util/background/vars.rs
@@ -0,0 +1,113 @@
+use std::collections::HashMap;
+use std::str::FromStr;
+
+use crate::error::{Error, OkOrMessage};
+use crate::migrate::Migrate;
+use crate::persister::PersisterShared;
+
+pub struct BgVars {
+ vars: HashMap<&'static str, Box<dyn BgVarTrait>>,
+}
+
+impl BgVars {
+ pub fn new() -> Self {
+ Self {
+ vars: HashMap::new(),
+ }
+ }
+
+ pub fn register_rw<V, T, GF, SF>(
+ &mut self,
+ p: &PersisterShared<V>,
+ name: &'static str,
+ get_fn: GF,
+ set_fn: SF,
+ ) where
+ V: Migrate + Default + Send + Sync,
+ T: FromStr + ToString + Send + Sync + 'static,
+ GF: Fn(&PersisterShared<V>) -> T + Send + Sync + 'static,
+ SF: Fn(&PersisterShared<V>, T) -> Result<(), Error> + Send + Sync + 'static,
+ {
+ let p1 = p.clone();
+ let get_fn = move || get_fn(&p1);
+
+ let p2 = p.clone();
+ let set_fn = move |v| set_fn(&p2, v);
+
+ self.vars.insert(name, Box::new(BgVar { get_fn, set_fn }));
+ }
+
+ pub fn register_ro<V, T, GF>(&mut self, p: &PersisterShared<V>, name: &'static str, get_fn: GF)
+ where
+ V: Migrate + Default + Send + Sync,
+ T: FromStr + ToString + Send + Sync + 'static,
+ GF: Fn(&PersisterShared<V>) -> T + Send + Sync + 'static,
+ {
+ let p1 = p.clone();
+ let get_fn = move || get_fn(&p1);
+
+ let set_fn = move |_| Err(Error::Message(format!("Cannot set value of {}", name)));
+
+ self.vars.insert(name, Box::new(BgVar { get_fn, set_fn }));
+ }
+
+ pub fn get(&self, var: &str) -> Result<String, Error> {
+ Ok(self
+ .vars
+ .get(var)
+ .ok_or_message("variable does not exist")?
+ .get())
+ }
+
+ pub fn get_all(&self) -> Vec<(&'static str, String)> {
+ self.vars.iter().map(|(k, v)| (*k, v.get())).collect()
+ }
+
+ pub fn set(&self, var: &str, val: &str) -> Result<(), Error> {
+ self.vars
+ .get(var)
+ .ok_or_message("variable does not exist")?
+ .set(val)
+ }
+}
+
+impl Default for BgVars {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
+// ----
+
+trait BgVarTrait: Send + Sync + 'static {
+ fn get(&self) -> String;
+ fn set(&self, v: &str) -> Result<(), Error>;
+}
+
+struct BgVar<T, GF, SF>
+where
+ T: FromStr + ToString + Send + Sync + 'static,
+ GF: Fn() -> T + Send + Sync + 'static,
+ SF: Fn(T) -> Result<(), Error> + Sync + Send + 'static,
+{
+ get_fn: GF,
+ set_fn: SF,
+}
+
+impl<T, GF, SF> BgVarTrait for BgVar<T, GF, SF>
+where
+ T: FromStr + ToString + Sync + Send + 'static,
+ GF: Fn() -> T + Sync + Send + 'static,
+ SF: Fn(T) -> Result<(), Error> + Sync + Send + 'static,
+{
+ fn get(&self) -> String {
+ (self.get_fn)().to_string()
+ }
+
+ fn set(&self, vstr: &str) -> Result<(), Error> {
+ let value = vstr
+ .parse()
+ .map_err(|_| Error::Message(format!("invalid value: {}", vstr)))?;
+ (self.set_fn)(value)
+ }
+}
diff --git a/src/util/build.rs b/src/util/build.rs
new file mode 100644
index 00000000..a4e955b8
--- /dev/null
+++ b/src/util/build.rs
@@ -0,0 +1,8 @@
+use rustc_version::version;
+
+fn main() {
+ // Acquire the version of Rust used to compile, this is added as a label to
+ // the garage_build_info metric.
+ let v = version().unwrap();
+ println!("cargo:rustc-env=RUSTC_VERSION={v}");
+}
diff --git a/src/util/config.rs b/src/util/config.rs
index 04f8375a..2176353e 100644
--- a/src/util/config.rs
+++ b/src/util/config.rs
@@ -34,7 +34,9 @@ pub struct Config {
pub compression_level: Option<i32>,
/// RPC secret key: 32 bytes hex encoded
- pub rpc_secret: String,
+ pub rpc_secret: Option<String>,
+ /// Optional file where RPC secret key is read from
+ pub rpc_secret_file: Option<String>,
/// Address to bind for RPC
pub rpc_bind_addr: SocketAddr,
@@ -118,10 +120,17 @@ pub struct WebConfig {
pub struct AdminConfig {
/// Address and port to bind for admin API serving
pub api_bind_addr: Option<SocketAddr>,
+
/// Bearer token to use to scrape metrics
pub metrics_token: Option<String>,
+ /// File to read metrics token from
+ pub metrics_token_file: Option<String>,
+
/// Bearer token to use to access Admin API endpoints
pub admin_token: Option<String>,
+ /// File to read admin token from
+ pub admin_token_file: Option<String>,
+
/// OTLP server to where to export traces
pub trace_sink: Option<String>,
}
@@ -177,7 +186,57 @@ pub fn read_config(config_file: PathBuf) -> Result<Config, Error> {
let mut config = String::new();
file.read_to_string(&mut config)?;
- Ok(toml::from_str(&config)?)
+ let mut parsed_config: Config = toml::from_str(&config)?;
+
+ secret_from_file(
+ &mut parsed_config.rpc_secret,
+ &parsed_config.rpc_secret_file,
+ "rpc_secret",
+ )?;
+ secret_from_file(
+ &mut parsed_config.admin.metrics_token,
+ &parsed_config.admin.metrics_token_file,
+ "admin.metrics_token",
+ )?;
+ secret_from_file(
+ &mut parsed_config.admin.admin_token,
+ &parsed_config.admin.admin_token_file,
+ "admin.admin_token",
+ )?;
+
+ Ok(parsed_config)
+}
+
+fn secret_from_file(
+ secret: &mut Option<String>,
+ secret_file: &Option<String>,
+ name: &'static str,
+) -> Result<(), Error> {
+ match (&secret, &secret_file) {
+ (_, None) => {
+ // no-op
+ }
+ (Some(_), Some(_)) => {
+ return Err(format!("only one of `{}` and `{}_file` can be set", name, name).into());
+ }
+ (None, Some(file_path)) => {
+ #[cfg(unix)]
+ if std::env::var("GARAGE_ALLOW_WORLD_READABLE_SECRETS").as_deref() != Ok("true") {
+ use std::os::unix::fs::MetadataExt;
+ let metadata = std::fs::metadata(&file_path)?;
+ if metadata.mode() & 0o077 != 0 {
+ return Err(format!("File {} is world-readable! (mode: 0{:o}, expected 0600)\nRefusing to start until this is fixed, or environment variable GARAGE_ALLOW_WORLD_READABLE_SECRETS is set to true.", file_path, metadata.mode()).into());
+ }
+ }
+ let mut file = std::fs::OpenOptions::new().read(true).open(file_path)?;
+ let mut secret_buf = String::new();
+ file.read_to_string(&mut secret_buf)?;
+ // trim_end: allows for use case such as `echo "$(openssl rand -hex 32)" > somefile`.
+ // also editors sometimes add a trailing newline
+ *secret = Some(String::from(secret_buf.trim_end()));
+ }
+ }
+ Ok(())
}
fn default_compression() -> Option<i32> {
@@ -233,3 +292,116 @@ where
deserializer.deserialize_any(OptionVisitor)
}
+
+#[cfg(test)]
+mod tests {
+ use crate::error::Error;
+ use std::fs::File;
+ use std::io::Write;
+
+ #[test]
+ fn test_rpc_secret() -> Result<(), Error> {
+ let path2 = mktemp::Temp::new_file()?;
+ let mut file2 = File::create(path2.as_path())?;
+ writeln!(
+ file2,
+ r#"
+ metadata_dir = "/tmp/garage/meta"
+ data_dir = "/tmp/garage/data"
+ replication_mode = "3"
+ rpc_bind_addr = "[::]:3901"
+ rpc_secret = "foo"
+
+ [s3_api]
+ s3_region = "garage"
+ api_bind_addr = "[::]:3900"
+ "#
+ )?;
+
+ let config = super::read_config(path2.to_path_buf())?;
+ assert_eq!("foo", config.rpc_secret.unwrap());
+ drop(path2);
+ drop(file2);
+
+ Ok(())
+ }
+
+ #[test]
+ fn test_rpc_secret_file_works() -> Result<(), Error> {
+ let path_secret = mktemp::Temp::new_file()?;
+ let mut file_secret = File::create(path_secret.as_path())?;
+ writeln!(file_secret, "foo")?;
+ drop(file_secret);
+
+ let path_config = mktemp::Temp::new_file()?;
+ let mut file_config = File::create(path_config.as_path())?;
+ let path_secret_path = path_secret.as_path();
+ writeln!(
+ file_config,
+ r#"
+ metadata_dir = "/tmp/garage/meta"
+ data_dir = "/tmp/garage/data"
+ replication_mode = "3"
+ rpc_bind_addr = "[::]:3901"
+ rpc_secret_file = "{}"
+
+ [s3_api]
+ s3_region = "garage"
+ api_bind_addr = "[::]:3900"
+ "#,
+ path_secret_path.display()
+ )?;
+ let config = super::read_config(path_config.to_path_buf())?;
+ assert_eq!("foo", config.rpc_secret.unwrap());
+
+ #[cfg(unix)]
+ {
+ use std::os::unix::fs::PermissionsExt;
+ let metadata = std::fs::metadata(&path_secret_path)?;
+ let mut perm = metadata.permissions();
+ perm.set_mode(0o660);
+ std::fs::set_permissions(&path_secret_path, perm)?;
+
+ std::env::set_var("GARAGE_ALLOW_WORLD_READABLE_SECRETS", "false");
+ assert!(super::read_config(path_config.to_path_buf()).is_err());
+
+ std::env::set_var("GARAGE_ALLOW_WORLD_READABLE_SECRETS", "true");
+ assert!(super::read_config(path_config.to_path_buf()).is_ok());
+ }
+
+ drop(path_config);
+ drop(path_secret);
+ drop(file_config);
+ Ok(())
+ }
+
+ #[test]
+ fn test_rcp_secret_and_rpc_secret_file_cannot_be_set_both() -> Result<(), Error> {
+ let path_config = mktemp::Temp::new_file()?;
+ let mut file_config = File::create(path_config.as_path())?;
+ writeln!(
+ file_config,
+ r#"
+ metadata_dir = "/tmp/garage/meta"
+ data_dir = "/tmp/garage/data"
+ replication_mode = "3"
+ rpc_bind_addr = "[::]:3901"
+ rpc_secret= "dummy"
+ rpc_secret_file = "dummy"
+
+ [s3_api]
+ s3_region = "garage"
+ api_bind_addr = "[::]:3900"
+ "#
+ )?;
+ assert_eq!(
+ "only one of `rpc_secret` and `rpc_secret_file` can be set",
+ super::read_config(path_config.to_path_buf())
+ .unwrap_err()
+ .to_string()
+ );
+ drop(path_config);
+ drop(file_config);
+ Ok(())
+ }
+}
diff --git a/src/util/data.rs b/src/util/data.rs
index 3f61e301..bdd8daee 100644
--- a/src/util/data.rs
+++ b/src/util/data.rs
@@ -115,9 +115,9 @@ pub fn sha256sum(data: &[u8]) -> Hash {
/// Compute the blake2 of a slice
pub fn blake2sum(data: &[u8]) -> Hash {
- use blake2::{Blake2b, Digest};
+ use blake2::{Blake2b512, Digest};
- let mut hasher = Blake2b::new();
+ let mut hasher = Blake2b512::new();
hasher.update(data);
let mut hash = [0u8; 32];
hash.copy_from_slice(&hasher.finalize()[..32]);
diff --git a/src/util/forwarded_headers.rs b/src/util/forwarded_headers.rs
new file mode 100644
index 00000000..6ae275aa
--- /dev/null
+++ b/src/util/forwarded_headers.rs
@@ -0,0 +1,63 @@
+use http::{HeaderMap, HeaderValue};
+use std::net::IpAddr;
+use std::str::FromStr;
+
+use crate::error::{Error, OkOrMessage};
+
+pub fn handle_forwarded_for_headers(headers: &HeaderMap<HeaderValue>) -> Result<String, Error> {
+ let forwarded_for_header = headers
+ .get("x-forwarded-for")
+ .ok_or_message("X-Forwarded-For header not provided")?;
+
+ let forwarded_for_ip_str = forwarded_for_header
+ .to_str()
+ .ok_or_message("Error parsing X-Forwarded-For header")?;
+
+ let client_ip = IpAddr::from_str(&forwarded_for_ip_str)
+ .ok_or_message("Valid IP address not found in X-Forwarded-For header")?;
+
+ Ok(client_ip.to_string())
+}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn test_handle_forwarded_for_headers_ipv4_client() {
+ let mut test_headers = HeaderMap::new();
+ test_headers.insert("X-Forwarded-For", "192.0.2.100".parse().unwrap());
+
+ if let Ok(forwarded_ip) = handle_forwarded_for_headers(&test_headers) {
+ assert_eq!(forwarded_ip, "192.0.2.100");
+ }
+ }
+
+ #[test]
+ fn test_handle_forwarded_for_headers_ipv6_client() {
+ let mut test_headers = HeaderMap::new();
+ test_headers.insert("X-Forwarded-For", "2001:db8::f00d:cafe".parse().unwrap());
+
+ if let Ok(forwarded_ip) = handle_forwarded_for_headers(&test_headers) {
+ assert_eq!(forwarded_ip, "2001:db8::f00d:cafe");
+ }
+ }
+
+ #[test]
+ fn test_handle_forwarded_for_headers_invalid_ip() {
+ let mut test_headers = HeaderMap::new();
+ test_headers.insert("X-Forwarded-For", "www.example.com".parse().unwrap());
+
+ let result = handle_forwarded_for_headers(&test_headers);
+ assert!(result.is_err());
+ }
+
+ #[test]
+ fn test_handle_forwarded_for_headers_missing() {
+ let mut test_headers = HeaderMap::new();
+ test_headers.insert("Host", "www.deuxfleurs.fr".parse().unwrap());
+
+ let result = handle_forwarded_for_headers(&test_headers);
+ assert!(result.is_err());
+ }
+}
diff --git a/src/util/lib.rs b/src/util/lib.rs
index be82061f..c9110fb2 100644
--- a/src/util/lib.rs
+++ b/src/util/lib.rs
@@ -11,10 +11,10 @@ pub mod data;
pub mod encode;
pub mod error;
pub mod formater;
+pub mod forwarded_headers;
pub mod metrics;
pub mod migrate;
pub mod persister;
pub mod time;
-pub mod token_bucket;
pub mod tranquilizer;
pub mod version;
diff --git a/src/util/persister.rs b/src/util/persister.rs
index 4b9adf51..5c66bbed 100644
--- a/src/util/persister.rs
+++ b/src/util/persister.rs
@@ -1,5 +1,6 @@
use std::io::{Read, Write};
use std::path::{Path, PathBuf};
+use std::sync::{Arc, RwLock};
use tokio::io::{AsyncReadExt, AsyncWriteExt};
@@ -84,3 +85,36 @@ impl<T: Migrate> Persister<T> {
Ok(())
}
}
+
+pub struct PersisterShared<V: Migrate + Default>(Arc<(Persister<V>, RwLock<V>)>);
+
+impl<V: Migrate + Default> Clone for PersisterShared<V> {
+ fn clone(&self) -> PersisterShared<V> {
+ PersisterShared(self.0.clone())
+ }
+}
+
+impl<V: Migrate + Default> PersisterShared<V> {
+ pub fn new(base_dir: &Path, file_name: &str) -> Self {
+ let persister = Persister::new(base_dir, file_name);
+ let value = persister.load().unwrap_or_default();
+ Self(Arc::new((persister, RwLock::new(value))))
+ }
+
+ pub fn get_with<F, R>(&self, f: F) -> R
+ where
+ F: FnOnce(&V) -> R,
+ {
+ let value = self.0 .1.read().unwrap();
+ f(&value)
+ }
+
+ pub fn set_with<F>(&self, f: F) -> Result<(), Error>
+ where
+ F: FnOnce(&mut V),
+ {
+ let mut value = self.0 .1.write().unwrap();
+ f(&mut value);
+ self.0 .0.save(&value)
+ }
+}
diff --git a/src/util/time.rs b/src/util/time.rs
index 257b4d2a..42f41a44 100644
--- a/src/util/time.rs
+++ b/src/util/time.rs
@@ -25,6 +25,6 @@ pub fn increment_logical_clock_2(prev: u64, prev2: u64) -> u64 {
pub fn msec_to_rfc3339(msecs: u64) -> String {
let secs = msecs as i64 / 1000;
let nanos = (msecs as i64 % 1000) as u32 * 1_000_000;
- let timestamp = Utc.timestamp(secs, nanos);
+ let timestamp = Utc.timestamp_opt(secs, nanos).unwrap();
timestamp.to_rfc3339_opts(SecondsFormat::Millis, true)
}
diff --git a/src/util/token_bucket.rs b/src/util/token_bucket.rs
deleted file mode 100644
index cc0dfa1f..00000000
--- a/src/util/token_bucket.rs
+++ /dev/null
@@ -1,40 +0,0 @@
-use std::time::{Duration, Instant};
-
-use tokio::time::sleep;
-
-pub struct TokenBucket {
- // Replenish rate: number of tokens per second
- replenish_rate: u64,
- // Current number of tokens
- tokens: u64,
- // Last replenish time
- last_replenish: Instant,
-}
-
-impl TokenBucket {
- pub fn new(replenish_rate: u64) -> Self {
- Self {
- replenish_rate,
- tokens: 0,
- last_replenish: Instant::now(),
- }
- }
-
- pub async fn take(&mut self, tokens: u64) {
- while self.tokens < tokens {
- let needed = tokens - self.tokens;
- let delay = (needed as f64) / (self.replenish_rate as f64);
- sleep(Duration::from_secs_f64(delay)).await;
- self.replenish();
- }
- self.tokens -= tokens;
- }
-
- pub fn replenish(&mut self) {
- let now = Instant::now();
- let new_tokens =
- ((now - self.last_replenish).as_secs_f64() * (self.replenish_rate as f64)) as u64;
- self.tokens += new_tokens;
- self.last_replenish = now;
- }
-}
diff --git a/src/util/version.rs b/src/util/version.rs
index b515dccc..2b2ea271 100644
--- a/src/util/version.rs
+++ b/src/util/version.rs
@@ -26,3 +26,7 @@ pub fn init_version(version: &'static str) {
pub fn init_features(features: &'static [&'static str]) {
FEATURES.store(Some(Arc::new(features)));
}
+
+pub fn rust_version() -> &'static str {
+ env!("RUSTC_VERSION")
+}
diff --git a/src/web/Cargo.toml b/src/web/Cargo.toml
index dbc5e5fb..d0a23af4 100644
--- a/src/web/Cargo.toml
+++ b/src/web/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "garage_web"
-version = "0.8.1"
+version = "0.8.2"
authors = ["Alex Auvolat <alex@adnab.me>", "Quentin Dufour <quentin@dufour.io>"]
edition = "2018"
license = "AGPL-3.0"
@@ -14,13 +14,13 @@ path = "lib.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
-garage_api = { version = "0.8.1", path = "../api" }
-garage_model = { version = "0.8.1", path = "../model" }
-garage_util = { version = "0.8.1", path = "../util" }
-garage_table = { version = "0.8.1", path = "../table" }
+garage_api = { version = "0.8.2", path = "../api" }
+garage_model = { version = "0.8.2", path = "../model" }
+garage_util = { version = "0.8.2", path = "../util" }
+garage_table = { version = "0.8.2", path = "../table" }
err-derive = "0.3"
-tracing = "0.1.30"
+tracing = "0.1"
percent-encoding = "2.1.0"
futures = "0.3"
diff --git a/src/web/web_server.rs b/src/web/web_server.rs
index 1541c297..0c7edf23 100644
--- a/src/web/web_server.rs
+++ b/src/web/web_server.rs
@@ -29,6 +29,7 @@ use garage_model::garage::Garage;
use garage_table::*;
use garage_util::error::Error as GarageError;
+use garage_util::forwarded_headers;
use garage_util::metrics::{gen_trace_id, RecordDuration};
struct WebMetrics {
@@ -104,7 +105,19 @@ impl WebServer {
req: Request<Body>,
addr: SocketAddr,
) -> Result<Response<Body>, Infallible> {
- info!("{} {} {}", addr, req.method(), req.uri());
+ if let Ok(forwarded_for_ip_addr) =
+ forwarded_headers::handle_forwarded_for_headers(&req.headers())
+ {
+ info!(
+ "{} (via {}) {} {}",
+ forwarded_for_ip_addr,
+ addr,
+ req.method(),
+ req.uri()
+ );
+ } else {
+ info!("{} {} {}", addr, req.method(), req.uri());
+ }
// Lots of instrumentation
let tracer = opentelemetry::global::tracer("garage");
@@ -249,7 +262,6 @@ impl WebServer {
);
*error_doc.status_mut() = error.http_status_code();
- error.add_headers(error_doc.headers_mut());
// Preserve error message in a special header
for error_line in error.to_string().split('\n') {