diff options
247 files changed, 52351 insertions, 4187 deletions
diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 00000000..d29d6c33 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,3 @@ +[target.x86_64-unknown-linux-gnu] +linker = "clang" +rustflags = ["-C", "link-arg=-fuse-ld=mold"] @@ -20,6 +20,7 @@ steps: image: nixpkgs/nix:nixos-22.05 environment: GARAGE_TEST_INTEGRATION_EXE: result-bin/bin/garage + GARAGE_TEST_INTEGRATION_PATH: tmp-garage-integration commands: - nix-build --no-build-output --attr clippy.amd64 --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} - nix-build --no-build-output --attr test.amd64 @@ -31,8 +32,9 @@ steps: - ./result/bin/garage_util-* - ./result/bin/garage_web-* - ./result/bin/garage-* - - ./result/bin/integration-* + - ./result/bin/integration-* || (cat tmp-garage-integration/stderr.log; false) - rm result + - rm -rv tmp-garage-integration - name: integration tests image: nixpkgs/nix:nixos-22.05 @@ -63,11 +65,16 @@ steps: - nix-build --no-build-output --attr pkgs.amd64.release --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} - nix-shell --attr rust --run "./script/not-dynamic.sh result-bin/bin/garage" - - name: integration + - name: integration tests image: nixpkgs/nix:nixos-22.05 commands: - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) + - name: upgrade tests + image: nixpkgs/nix:nixos-22.05 + commands: + - nix-shell --attr integration --run "./script/test-upgrade.sh v0.8.4 x86_64-unknown-linux-musl" || (cat /tmp/garage.log; false) + - name: push static binary image: nixpkgs/nix:nixos-22.05 environment: @@ -114,11 +121,16 @@ steps: - nix-build --no-build-output --attr pkgs.i386.release --argstr git_version ${DRONE_TAG:-$DRONE_COMMIT} - nix-shell --attr rust --run "./script/not-dynamic.sh result-bin/bin/garage" - - name: integration + - name: integration tests image: nixpkgs/nix:nixos-22.05 commands: - nix-shell --attr integration --run ./script/test-smoke.sh || (cat /tmp/garage.log; false) + - name: upgrade tests + image: nixpkgs/nix:nixos-22.05 + commands: + - nix-shell --attr integration --run "./script/test-upgrade.sh v0.8.4 i686-unknown-linux-musl" || (cat /tmp/garage.log; false) + - name: push static binary image: nixpkgs/nix:nixos-22.05 environment: @@ -283,6 +295,6 @@ trigger: --- kind: signature -hmac: ac09a5a8c82502f67271f93afa1e1e21ce66383b8e24a6deb26b285cc1c378ba +hmac: 0c4b57eb4b27b7c6a6ff21ab87f0767fe3eb90f5d95d5cbcdccf794e9d2a5d86 ... @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" dependencies = [ "gimli", ] @@ -31,18 +31,18 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a" dependencies = [ "memchr", ] [[package]] name = "allocator-api2" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56fc6cf8dc8c4158eed8649f9b8b0ea1518eb62b544fe9490d66fa0b349eafe9" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "android-tzdata" @@ -61,24 +61,23 @@ dependencies = [ [[package]] name = "anstream" -version = "0.3.2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c" dependencies = [ "anstyle", "anstyle-parse", "anstyle-query", "anstyle-wincon", "colorchoice", - "is-terminal", "utf8parse", ] [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" [[package]] name = "anstyle-parse" @@ -95,24 +94,24 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" dependencies = [ - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "anstyle-wincon" -version = "1.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd" dependencies = [ "anstyle", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "arc-swap" @@ -138,9 +137,9 @@ dependencies = [ [[package]] name = "async-compression" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0122885821398cc923ece939e24d1056a2384ee719432397fa9db87230ff11" +checksum = "62b74f44609f0f91493e3082d3734d98497e094777144380ea4db9f9905dd5b6" dependencies = [ "futures-core", "memchr", @@ -169,29 +168,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", ] [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", -] - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", + "syn 2.0.29", ] [[package]] @@ -218,12 +206,12 @@ dependencies = [ "aws-smithy-types", "aws-types", "bytes", - "fastrand", + "fastrand 1.9.0", "hex", "http", "hyper", "ring", - "time 0.3.22", + "time 0.3.28", "tokio", "tower", "tracing", @@ -238,7 +226,7 @@ checksum = "1fcdb2f7acbc076ff5ad05e7864bdb191ca70a6fd07668dc3a1a8bcd051de5ae" dependencies = [ "aws-smithy-async", "aws-smithy-types", - "fastrand", + "fastrand 1.9.0", "tokio", "tracing", "zeroize", @@ -393,7 +381,7 @@ dependencies = [ "percent-encoding", "regex", "sha2", - "time 0.3.22", + "time 0.3.28", "tracing", ] @@ -441,7 +429,7 @@ dependencies = [ "aws-smithy-http-tower", "aws-smithy-types", "bytes", - "fastrand", + "fastrand 1.9.0", "http", "http-body", "hyper", @@ -533,7 +521,7 @@ dependencies = [ "itoa", "num-integer", "ryu", - "time 0.3.22", + "time 0.3.28", ] [[package]] @@ -574,9 +562,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.67" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" dependencies = [ "addr2line", "cc", @@ -595,9 +583,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53" [[package]] name = "base64-simd" @@ -625,6 +613,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] +name = "bitflags" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" + +[[package]] name = "blake2" version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -678,17 +672,18 @@ dependencies = [ [[package]] name = "bytesize" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5" +checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" dependencies = [ "jobserver", + "libc", ] [[package]] @@ -725,16 +720,16 @@ version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ - "bitflags", + "bitflags 1.3.2", "textwrap", "unicode-width", ] [[package]] name = "clap" -version = "4.3.8" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9394150f5b4273a1763355bd1c2ec54cc5a2593f790587bcd6b2c947cfa9211" +checksum = "1d5f1946157a96594eb2d2c10eb7ad9a2b27518cb3000209dec700c35df9197d" dependencies = [ "clap_builder", "clap_derive", @@ -743,34 +738,33 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.3.8" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a78fbdd3cc2914ddf37ba444114bc7765bbdcb55ec9cbe6fa054f0137400717" +checksum = "78116e32a042dd73c2901f0dc30790d20ff3447f3e3472fad359e8c3d282bcd6" dependencies = [ "anstream", "anstyle", - "bitflags", "clap_lex", "strsim", ] [[package]] name = "clap_derive" -version = "4.3.2" +version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f" +checksum = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", ] [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" [[package]] name = "colorchoice" @@ -796,18 +790,18 @@ checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "cpufeatures" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" dependencies = [ "libc", ] [[package]] name = "crc32c" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dfea2db42e9927a3845fb268a10a72faed6d416065f77873f05e411457c363e" +checksum = "d8f48d60e5b4d2c53d5c2b1d8a58c849a70ae5e5509b08a48d047e3b65714a74" dependencies = [ "rustc_version", ] @@ -919,6 +913,12 @@ dependencies = [ ] [[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" + +[[package]] name = "derivative" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -963,33 +963,33 @@ dependencies = [ [[package]] name = "dyn-clone" -version = "1.0.11" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" +checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555" [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] [[package]] name = "env_logger" -version = "0.7.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36" +checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0" dependencies = [ - "atty", "humantime", + "is-terminal", "log", "regex", "termcolor", @@ -997,9 +997,9 @@ dependencies = [ [[package]] name = "equivalent" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "err-derive" @@ -1017,13 +1017,13 @@ dependencies = [ [[package]] name = "errno" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f" dependencies = [ "errno-dragonfly", "libc", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -1058,6 +1058,12 @@ dependencies = [ ] [[package]] +name = "fastrand" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" + +[[package]] name = "fixedbitset" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1148,7 +1154,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", ] [[package]] @@ -1192,14 +1198,14 @@ dependencies = [ [[package]] name = "garage" -version = "0.8.2" +version = "0.9.0" dependencies = [ "assert-json-diff", "async-trait", "aws-config", "aws-sdk-s3", "backtrace", - "base64 0.21.2", + "base64 0.21.3", "bytes", "bytesize", "chrono", @@ -1243,10 +1249,10 @@ dependencies = [ [[package]] name = "garage_api" -version = "0.8.2" +version = "0.9.0" dependencies = [ "async-trait", - "base64 0.21.2", + "base64 0.21.3", "bytes", "chrono", "crypto-common", @@ -1265,7 +1271,8 @@ dependencies = [ "http-range", "httpdate", "hyper", - "idna 0.3.0", + "hyperlocal", + "idna", "md-5", "multer", "nom", @@ -1288,12 +1295,13 @@ dependencies = [ [[package]] name = "garage_block" -version = "0.8.2" +version = "0.9.0" dependencies = [ "arc-swap", "async-compression", "async-trait", "bytes", + "bytesize", "futures", "futures-util", "garage_db", @@ -1313,9 +1321,9 @@ dependencies = [ [[package]] name = "garage_db" -version = "0.8.2" +version = "0.9.0" dependencies = [ - "clap 4.3.8", + "clap 4.4.0", "err-derive", "heed", "hexdump", @@ -1328,12 +1336,13 @@ dependencies = [ [[package]] name = "garage_model" -version = "0.8.2" +version = "0.9.0" dependencies = [ "arc-swap", "async-trait", - "base64 0.21.2", + "base64 0.21.3", "blake2", + "chrono", "err-derive", "futures", "futures-util", @@ -1355,21 +1364,26 @@ dependencies = [ [[package]] name = "garage_rpc" -version = "0.8.2" +version = "0.9.0" dependencies = [ "arc-swap", "async-trait", "bytes", + "bytesize", "err-derive", + "format_table", "futures", "futures-util", + "garage_db", "garage_util", "gethostname", "hex", + "itertools 0.10.5", "k8s-openapi", "kube", "kuska-sodiumoxide", "netapp", + "nix", "opentelemetry", "pnet_datalink", "rand", @@ -1378,7 +1392,6 @@ dependencies = [ "serde", "serde_bytes", "serde_json", - "systemstat", "tokio", "tokio-stream", "tracing", @@ -1386,7 +1399,7 @@ dependencies = [ [[package]] name = "garage_table" -version = "0.8.2" +version = "0.9.0" dependencies = [ "arc-swap", "async-trait", @@ -1408,12 +1421,13 @@ dependencies = [ [[package]] name = "garage_util" -version = "0.8.2" +version = "0.9.0" dependencies = [ "arc-swap", "async-trait", "blake2", "bytes", + "bytesize", "chrono", "digest", "err-derive", @@ -1428,7 +1442,7 @@ dependencies = [ "netapp", "opentelemetry", "rand", - "rmp-serde 0.15.5", + "rmp-serde", "rustc_version", "serde", "serde_json", @@ -1441,7 +1455,7 @@ dependencies = [ [[package]] name = "garage_web" -version = "0.8.2" +version = "0.9.0" dependencies = [ "err-derive", "futures", @@ -1451,8 +1465,10 @@ dependencies = [ "garage_util", "http", "hyper", + "hyperlocal", "opentelemetry", "percent-encoding", + "tokio", "tracing", ] @@ -1468,12 +1484,12 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.2.3" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ "libc", - "winapi", + "windows-targets", ] [[package]] @@ -1489,9 +1505,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.3" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" [[package]] name = "git-version" @@ -1517,9 +1533,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.19" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" dependencies = [ "bytes", "fnv", @@ -1614,27 +1630,9 @@ dependencies = [ [[package]] name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" [[package]] name = "hex" @@ -1691,9 +1689,9 @@ checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" [[package]] name = "http-range-header" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" +checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f" [[package]] name = "httparse" @@ -1703,24 +1701,21 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "humantime" -version = "1.3.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f" -dependencies = [ - "quick-error", -] +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.26" +version = "0.14.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" dependencies = [ "bytes", "futures-channel", @@ -1733,7 +1728,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.4.9", "tokio", "tower-service", "tracing", @@ -1757,14 +1752,15 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" dependencies = [ + "futures-util", "http", "hyper", "log", - "rustls 0.21.2", + "rustls 0.21.6", "rustls-native-certs", "tokio", "tokio-rustls 0.24.1", @@ -1783,6 +1779,19 @@ dependencies = [ ] [[package]] +name = "hyperlocal" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c" +dependencies = [ + "futures-util", + "hex", + "hyper", + "pin-project", + "tokio", +] + +[[package]] name = "iana-time-zone" version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1813,16 +1822,6 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[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 = "idna" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" @@ -1861,21 +1860,10 @@ dependencies = [ ] [[package]] -name = "io-lifetimes" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" -dependencies = [ - "hermit-abi 0.3.1", - "libc", - "windows-sys 0.48.0", -] - -[[package]] name = "ipnet" -version = "2.7.2" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" [[package]] name = "ipnetwork" @@ -1888,14 +1876,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" dependencies = [ - "hermit-abi 0.3.1", - "io-lifetimes", + "hermit-abi", "rustix", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -1915,9 +1902,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jobserver" @@ -1964,13 +1951,13 @@ name = "k2v-client" version = "0.0.4" dependencies = [ "aws-sigv4", - "base64 0.21.2", - "clap 4.3.8", + "base64 0.21.3", + "clap 4.4.0", "format_table", "hex", "http", "hyper", - "hyper-rustls 0.24.0", + "hyper-rustls 0.24.1", "log", "percent-encoding", "serde", @@ -2135,9 +2122,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.146" +version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" [[package]] name = "libsodium-sys" @@ -2153,9 +2140,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.25.2" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa" +checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326" dependencies = [ "cc", "pkg-config", @@ -2170,9 +2157,9 @@ checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" [[package]] name = "linux-raw-sys" -version = "0.3.8" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] name = "lmdb-rkv-sys" @@ -2197,9 +2184,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "matchers" @@ -2207,7 +2194,7 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" dependencies = [ - "regex-automata", + "regex-automata 0.1.10", ] [[package]] @@ -2248,9 +2235,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.6.2" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" dependencies = [ "adler", ] @@ -2263,7 +2250,7 @@ checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -2301,9 +2288,9 @@ checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" [[package]] name = "netapp" -version = "0.5.3" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb28e89e7b21d3fdf2b46e2a580ccaab68f469f2e5c27db74f61994be90b558" +checksum = "0a00b76cec93e3ae68c9ed5f08e27a1507424987ee23d5ec961ebd4da820a265" dependencies = [ "arc-swap", "async-trait", @@ -2319,7 +2306,7 @@ dependencies = [ "opentelemetry-contrib", "pin-project", "rand", - "rmp-serde 1.1.1", + "rmp-serde", "serde", "tokio", "tokio-stream", @@ -2327,6 +2314,17 @@ dependencies = [ ] [[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.0", + "cfg-if", + "libc", +] + +[[package]] name = "no-std-net" version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2431,28 +2429,28 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi", "libc", ] [[package]] name = "object" -version = "0.30.4" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" +checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe" dependencies = [ "memchr", ] @@ -2623,9 +2621,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pem" @@ -2644,39 +2642,39 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" [[package]] name = "petgraph" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 1.9.3", + "indexmap 2.0.0", ] [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -2730,9 +2728,9 @@ checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "pretty_env_logger" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d" +checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c" dependencies = [ "env_logger", "log", @@ -2770,9 +2768,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.60" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] @@ -2852,12 +2850,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94" [[package]] -name = "quick-error" -version = "1.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" - -[[package]] name = "quick-xml" version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2869,9 +2861,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.28" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -2912,7 +2904,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -2921,7 +2913,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -2937,13 +2929,14 @@ dependencies = [ [[package]] name = "regex" -version = "1.8.4" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" +checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.7.2", + "regex-automata 0.3.7", + "regex-syntax 0.7.5", ] [[package]] @@ -2956,6 +2949,17 @@ dependencies = [ ] [[package]] +name = "regex-automata" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.7.5", +] + +[[package]] name = "regex-syntax" version = "0.6.29" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2963,17 +2967,17 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.2" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" dependencies = [ - "base64 0.21.2", + "base64 0.21.3", "bytes", "encoding_rs", "futures-core", @@ -2982,7 +2986,7 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls 0.24.0", + "hyper-rustls 0.24.1", "ipnet", "js-sys", "log", @@ -2990,7 +2994,7 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.21.2", + "rustls 0.21.6", "rustls-pemfile", "serde", "serde_json", @@ -3022,9 +3026,9 @@ dependencies = [ [[package]] name = "rmp" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f" +checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20" dependencies = [ "byteorder", "num-traits", @@ -3033,20 +3037,9 @@ dependencies = [ [[package]] name = "rmp-serde" -version = "0.15.5" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723ecff9ad04f4ad92fe1c8ca6c20d2196d9286e9c60727c4cb5511629260e9d" -dependencies = [ - "byteorder", - "rmp", - "serde", -] - -[[package]] -name = "rmp-serde" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5b13be192e0220b8afb7222aa5813cb62cc269ebb5cac346ca6487681d2913e" +checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a" dependencies = [ "byteorder", "rmp", @@ -3064,11 +3057,11 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a" +checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2" dependencies = [ - "bitflags", + "bitflags 2.4.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -3093,16 +3086,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.20" +version = "0.38.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0" +checksum = "9bfe0f2582b4931a45d1fa608f8a8722e8b3c7ac54dd6d5f3b3212791fedef49" dependencies = [ - "bitflags", + "bitflags 2.4.0", "errno", - "io-lifetimes", "libc", "linux-raw-sys", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -3119,9 +3111,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.2" +version = "0.21.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f" +checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb" dependencies = [ "log", "ring", @@ -3143,18 +3135,18 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" dependencies = [ - "base64 0.21.2", + "base64 0.21.3", ] [[package]] name = "rustls-webpki" -version = "0.100.1" +version = "0.101.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" +checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" dependencies = [ "ring", "untrusted", @@ -3162,15 +3154,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "same-file" @@ -3183,11 +3175,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" dependencies = [ - "windows-sys 0.42.0", + "windows-sys", ] [[package]] @@ -3216,9 +3208,9 @@ dependencies = [ [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" @@ -3242,11 +3234,11 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -3255,9 +3247,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -3265,15 +3257,15 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" [[package]] name = "serde" -version = "1.0.164" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] @@ -3290,22 +3282,22 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.9" +version = "0.11.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.164" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", ] [[package]] @@ -3321,9 +3313,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.99" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3" +checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" dependencies = [ "indexmap 2.0.0", "itoa", @@ -3406,9 +3398,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -3431,9 +3423,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.10.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" [[package]] name = "socket2" @@ -3446,6 +3438,16 @@ dependencies = [ ] [[package]] +name = "socket2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] name = "spin" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3463,7 +3465,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg_aliases", "libc", "parking_lot 0.11.2", @@ -3534,9 +3536,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.20" +version = "2.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb8d4cebc40aa517dfb69618fa647a346562e67228e2236ae0042ee6ac14775" +checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" dependencies = [ "proc-macro2", "quote", @@ -3565,31 +3567,16 @@ dependencies = [ ] [[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.22", - "winapi", -] - -[[package]] name = "tempfile" -version = "3.6.0" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef" dependencies = [ - "autocfg", "cfg-if", - "fastrand", + "fastrand 2.0.0", "redox_syscall 0.3.5", "rustix", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -3612,22 +3599,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", ] [[package]] @@ -3653,10 +3640,11 @@ dependencies = [ [[package]] name = "time" -version = "0.3.22" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" dependencies = [ + "deranged", "serde", "time-core", "time-macros", @@ -3670,9 +3658,9 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" [[package]] name = "time-macros" -version = "0.2.9" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b" +checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572" dependencies = [ "time-core", ] @@ -3700,11 +3688,10 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.29.0" +version = "1.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374442f06ee49c3a28a8fc9f01a2596fed7559c6b99b31279c3261778e77d84f" +checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" dependencies = [ - "autocfg", "backtrace", "bytes", "libc", @@ -3713,9 +3700,9 @@ dependencies = [ "parking_lot 0.12.1", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.3", "tokio-macros", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -3736,7 +3723,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", ] [[package]] @@ -3756,7 +3743,7 @@ version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ - "rustls 0.21.2", + "rustls 0.21.6", "tokio", ] @@ -3905,7 +3892,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ "base64 0.13.1", - "bitflags", + "bitflags 1.3.2", "bytes", "futures-core", "futures-util", @@ -3951,7 +3938,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", ] [[package]] @@ -4032,9 +4019,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" @@ -4076,15 +4063,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb" dependencies = [ "form_urlencoded", - "idna 0.4.0", + "idna", "percent-encoding", ] [[package]] name = "urlencoding" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf8parse" @@ -4177,7 +4164,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", "wasm-bindgen-shared", ] @@ -4211,7 +4198,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.20", + "syn 2.0.29", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4295,21 +4282,6 @@ dependencies = [ [[package]] name = "windows-sys" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" -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-sys" version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" @@ -4319,110 +4291,69 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 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", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.48.5" 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.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[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.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[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.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[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" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[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.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys", ] [[package]] @@ -4454,18 +4385,18 @@ checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" [[package]] name = "zstd" -version = "0.12.3+zstd.1.5.2" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "6.0.5+zstd.1.5.4" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ "libc", "zstd-sys", @@ -7,13 +7,13 @@ args@{ "garage_db/default" "garage_util/default" "garage_rpc/default" + "format_table/default" "garage_table/default" "garage_block/default" "garage_model/default" "garage_api/default" "garage_web/default" "garage/default" - "format_table/default" "k2v-client/default" ], rustPackages, @@ -33,7 +33,7 @@ args@{ ignoreLockHash, }: let - nixifiedLockHash = "394eb3269e7f423c7c327bf9415e56df826125646c296e04628656d9ba027aef"; + nixifiedLockHash = "1a87886681a3ef0b83c95addc26674a538b8a93d35bc80db8998e1fcd0821f6c"; workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc; currentLockHash = builtins.hashFile "sha256" (workspaceSrc + /Cargo.lock); lockHashIgnored = if ignoreLockHash @@ -57,25 +57,25 @@ in { cargo2nixVersion = "0.11.0"; workspace = { - 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"; + garage_db = rustPackages.unknown.garage_db."0.9.0"; + garage_util = rustPackages.unknown.garage_util."0.9.0"; + garage_rpc = rustPackages.unknown.garage_rpc."0.9.0"; format_table = rustPackages.unknown.format_table."0.1.1"; + garage_table = rustPackages.unknown.garage_table."0.9.0"; + garage_block = rustPackages.unknown.garage_block."0.9.0"; + garage_model = rustPackages.unknown.garage_model."0.9.0"; + garage_api = rustPackages.unknown.garage_api."0.9.0"; + garage_web = rustPackages.unknown.garage_web."0.9.0"; + garage = rustPackages.unknown.garage."0.9.0"; k2v-client = rustPackages.unknown.k2v-client."0.0.4"; }; - "registry+https://github.com/rust-lang/crates.io-index".addr2line."0.19.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".addr2line."0.21.0" = overridableMkRustCrate (profileName: rec { name = "addr2line"; - version = "0.19.0"; + version = "0.21.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"; }; + src = fetchCratesIo { inherit name version; sha256 = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"; }; dependencies = { - gimli = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".gimli."0.27.3" { inherit profileName; }).out; + gimli = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".gimli."0.28.0" { inherit profileName; }).out; }; }); @@ -98,20 +98,20 @@ in (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "std") ]; dependencies = { - ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" || 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/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" || 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.10" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" || 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.18.0" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" || 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.18.0" { inherit profileName; }).out; }; buildDependencies = { - ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" || 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; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" || 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; }; }); - "registry+https://github.com/rust-lang/crates.io-index".aho-corasick."1.0.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".aho-corasick."1.0.4" = overridableMkRustCrate (profileName: rec { name = "aho-corasick"; - version = "1.0.2"; + version = "1.0.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"; }; + src = fetchCratesIo { inherit name version; sha256 = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"; }; features = builtins.concatLists [ [ "default" ] [ "perf-literal" ] @@ -122,13 +122,13 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".allocator-api2."0.2.15" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".allocator-api2."0.2.16" = overridableMkRustCrate (profileName: rec { name = "allocator-api2"; - version = "0.2.15"; + version = "0.2.16"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "56fc6cf8dc8c4158eed8649f9b8b0ea1518eb62b544fe9490d66fa0b349eafe9"; }; + src = fetchCratesIo { inherit name version; sha256 = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"; }; 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") "alloc") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "alloc") ]; }); @@ -145,36 +145,35 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"; }; dependencies = { - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".anstream."0.3.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".anstream."0.5.0" = overridableMkRustCrate (profileName: rec { name = "anstream"; - version = "0.3.2"; + version = "0.5.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"; }; + src = fetchCratesIo { inherit name version; sha256 = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"; }; 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.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.2" { 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.1" { 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") && hostPlatform.isWindows then "anstyle_wincon" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".anstyle-wincon."2.1.0" { 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.1" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".anstyle."1.0.2" = overridableMkRustCrate (profileName: rec { name = "anstyle"; - version = "1.0.1"; + version = "1.0.2"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"; }; + src = fetchCratesIo { inherit name version; sha256 = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"; }; 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") @@ -205,22 +204,22 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".anstyle-wincon."1.0.1" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".anstyle-wincon."2.1.0" = overridableMkRustCrate (profileName: rec { name = "anstyle-wincon"; - version = "1.0.1"; + version = "2.1.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"; }; + src = fetchCratesIo { inherit name version; sha256 = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"; }; 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.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.2" { 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.71" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".anyhow."1.0.75" = overridableMkRustCrate (profileName: rec { name = "anyhow"; - version = "1.0.71"; + version = "1.0.75"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"; }; + src = fetchCratesIo { inherit name version; sha256 = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"; }; features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "std") @@ -251,16 +250,16 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"; }; dependencies = { - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; - serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.99" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.105" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".async-compression."0.4.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".async-compression."0.4.1" = overridableMkRustCrate (profileName: rec { name = "async-compression"; - version = "0.4.0"; + version = "0.4.1"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "5b0122885821398cc923ece939e24d1056a2384ee719432397fa9db87230ff11"; }; + src = fetchCratesIo { inherit name version; sha256 = "62b74f44609f0f91493e3082d3734d98497e094777144380ea4db9f9905dd5b6"; }; features = builtins.concatLists [ [ "libzstd" ] [ "tokio" ] @@ -270,10 +269,10 @@ in dependencies = { futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.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.29.0" { inherit profileName; }).out; - libzstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.3+zstd.1.5.2" { 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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; + libzstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.4" { inherit profileName; }).out; + zstd_safe = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-safe."6.0.6" { inherit profileName; }).out; }; }); @@ -285,7 +284,7 @@ in dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_stream_impl" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-stream-impl."0.3.5" { profileName = "__noProfile"; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; }; }); @@ -295,33 +294,21 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"; }; 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.60" { 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.28" { 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."2.0.20" { 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.66" { 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.33" { 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."2.0.29" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" = overridableMkRustCrate (profileName: rec { name = "async-trait"; - version = "0.1.68"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"; }; - dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; - }; - }); - - "registry+https://github.com/rust-lang/crates.io-index".atty."0.2.14" = overridableMkRustCrate (profileName: rec { - name = "atty"; - version = "0.2.14"; + version = "0.1.73"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"; }; + src = fetchCratesIo { inherit name version; sha256 = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"; }; dependencies = { - ${ 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.146" { 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; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; }; }); @@ -360,10 +347,10 @@ in fastrand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fastrand."1.9.0" { 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.9" { inherit profileName; }).out; - hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; ring = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ring."0.16.20" { inherit profileName; }).out; - time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.3.22" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.3.28" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tower = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; zeroize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zeroize."1.6.0" { inherit profileName; }).out; @@ -379,7 +366,7 @@ in aws_smithy_async = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-async."0.55.3" { inherit profileName; }).out; aws_smithy_types = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-types."0.55.3" { inherit profileName; }).out; fastrand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fastrand."1.9.0" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; zeroize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zeroize."1.6.0" { inherit profileName; }).out; }; @@ -395,7 +382,7 @@ in aws_smithy_types = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-types."0.55.3" { inherit profileName; }).out; aws_types = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-types."0.55.3" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; - regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; + regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); @@ -415,7 +402,7 @@ in http_body = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; lazy_static = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); @@ -451,7 +438,7 @@ in http_body = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.18.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.0" { inherit profileName; }).out; - regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; + regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.14" { inherit profileName; }).out; tower = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; @@ -478,7 +465,7 @@ in aws_types = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-types."0.55.3" { inherit profileName; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; - regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; + regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.14" { inherit profileName; }).out; tower = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; @@ -506,7 +493,7 @@ in aws_types = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-types."0.55.3" { inherit profileName; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; - regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; + regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; tower = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; @@ -557,9 +544,9 @@ in http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.18.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.0" { inherit profileName; }).out; - regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; + regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.10.7" { inherit profileName; }).out; - time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.3.22" { inherit profileName; }).out; + time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.3.28" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); @@ -574,8 +561,8 @@ in ]; dependencies = { futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { 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.29.0" { inherit profileName; }).out; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.14" { inherit profileName; }).out; }; }); @@ -589,13 +576,13 @@ in aws_smithy_http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-http."0.55.3" { inherit profileName; }).out; aws_smithy_types = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-types."0.55.3" { inherit profileName; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; - crc32c = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crc32c."0.6.3" { inherit profileName; }).out; + crc32c = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crc32c."0.6.4" { inherit profileName; }).out; crc32fast = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crc32fast."1.3.2" { 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.9" { inherit profileName; }).out; http_body = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; md5 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".md-5."0.10.5" { 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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; sha1 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha1."0.10.5" { inherit profileName; }).out; sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.10.7" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; @@ -621,12 +608,12 @@ in fastrand = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fastrand."1.9.0" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { 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.26" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; hyper_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.23.2" { 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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.20.8" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tower = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; @@ -662,12 +649,12 @@ in futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { 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.26" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.18.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; pin_utils = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-utils."0.1.0" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.8" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; @@ -684,7 +671,7 @@ in bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; http_body = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { 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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; tower = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower."0.4.13" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; @@ -707,7 +694,7 @@ in src = fetchCratesIo { inherit name version; sha256 = "98819eb0b04020a1c791903533b638534ae6c12e2aceda3e6e6fba015608d51d"; }; dependencies = { aws_smithy_types = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-types."0.55.3" { inherit profileName; }).out; - urlencoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".urlencoding."2.1.2" { inherit profileName; }).out; + urlencoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".urlencoding."2.1.3" { inherit profileName; }).out; }; }); @@ -718,10 +705,10 @@ in src = fetchCratesIo { inherit name version; sha256 = "16a3d0bf4f324f4ef9793b86a1701d9700fbcdbd12a846da45eed104c634c6e8"; }; dependencies = { base64_simd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64-simd."0.8.0" { inherit profileName; }).out; - itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.6" { inherit profileName; }).out; + itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.9" { inherit profileName; }).out; num_integer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-integer."0.1.45" { inherit profileName; }).out; - ryu = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.13" { inherit profileName; }).out; - time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.3.22" { inherit profileName; }).out; + ryu = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.15" { inherit profileName; }).out; + time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.3.28" { inherit profileName; }).out; }; }); @@ -769,25 +756,25 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".backtrace."0.3.67" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".backtrace."0.3.69" = overridableMkRustCrate (profileName: rec { name = "backtrace"; - version = "0.3.67"; + version = "0.3.69"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"; }; + src = fetchCratesIo { inherit name version; sha256 = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"; }; features = builtins.concatLists [ [ "default" ] [ "std" ] ]; dependencies = { - addr2line = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".addr2line."0.19.0" { inherit profileName; }).out; + ${ if !(hostPlatform.isWindows && hostPlatform.parsed.abi.name == "msvc" && !(hostPlatform.parsed.vendor.name == "uwp")) then "addr2line" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".addr2line."0.21.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.146" { inherit profileName; }).out; - miniz_oxide = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".miniz_oxide."0.6.2" { inherit profileName; }).out; - object = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".object."0.30.4" { inherit profileName; }).out; + ${ if !(hostPlatform.isWindows && hostPlatform.parsed.abi.name == "msvc" && !(hostPlatform.parsed.vendor.name == "uwp")) then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; + ${ if !(hostPlatform.isWindows && hostPlatform.parsed.abi.name == "msvc" && !(hostPlatform.parsed.vendor.name == "uwp")) then "miniz_oxide" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".miniz_oxide."0.7.1" { inherit profileName; }).out; + ${ if !(hostPlatform.isWindows && hostPlatform.parsed.abi.name == "msvc" && !(hostPlatform.parsed.vendor.name == "uwp")) then "object" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".object."0.32.0" { inherit profileName; }).out; rustc_demangle = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustc-demangle."0.1.23" { inherit profileName; }).out; }; buildDependencies = { - cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.79" { profileName = "__noProfile"; }).out; + cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" { profileName = "__noProfile"; }).out; }; }); @@ -803,11 +790,11 @@ in ]; }); - "registry+https://github.com/rust-lang/crates.io-index".base64."0.21.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".base64."0.21.3" = overridableMkRustCrate (profileName: rec { name = "base64"; - version = "0.21.2"; + version = "0.21.3"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"; }; + src = fetchCratesIo { inherit name version; sha256 = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53"; }; features = builtins.concatLists [ [ "default" ] [ "std" ] @@ -837,7 +824,7 @@ in 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.164" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); @@ -851,6 +838,16 @@ in ]; }); + "registry+https://github.com/rust-lang/crates.io-index".bitflags."2.4.0" = overridableMkRustCrate (profileName: rec { + name = "bitflags"; + version = "2.4.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"; }; + features = builtins.concatLists [ + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "std") + ]; + }); + "registry+https://github.com/rust-lang/crates.io-index".blake2."0.10.6" = overridableMkRustCrate (profileName: rec { name = "blake2"; version = "0.10.6"; @@ -891,8 +888,8 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "extern_crate_alloc") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "extern_crate_std") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "extern_crate_alloc") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "extern_crate_std") ]; }); @@ -929,31 +926,32 @@ in ]; dependencies = { bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; - either = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".either."1.8.1" { inherit profileName; }).out; + either = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".either."1.9.0" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".bytesize."1.2.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".bytesize."1.3.0" = overridableMkRustCrate (profileName: rec { name = "bytesize"; - version = "1.2.0"; + version = "1.3.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "38fcc2979eff34a4b84e1cf9a1e3da42a7d44b3b690a40cdcb23e3d556cfb2e5"; }; + src = fetchCratesIo { inherit name version; sha256 = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"; }; features = builtins.concatLists [ [ "default" ] ]; }); - "registry+https://github.com/rust-lang/crates.io-index".cc."1.0.79" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" = overridableMkRustCrate (profileName: rec { name = "cc"; - version = "1.0.79"; + version = "1.0.83"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"; }; + src = fetchCratesIo { inherit name version; sha256 = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"; }; features = builtins.concatLists [ [ "jobserver" ] [ "parallel" ] ]; dependencies = { jobserver = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".jobserver."0.1.26" { inherit profileName; }).out; + ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; }); @@ -994,8 +992,8 @@ in ${ if hostPlatform.parsed.kernel.name == "android" then "android_tzdata" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".android-tzdata."0.1.1" { inherit profileName; }).out; ${ if hostPlatform.isUnix then "iana_time_zone" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".iana-time-zone."0.1.57" { inherit profileName; }).out; ${ if hostPlatform.parsed.cpu.name == "wasm32" && !(hostPlatform.parsed.kernel.name == "emscripten" || hostPlatform.parsed.kernel.name == "wasi") then "js_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.64" { inherit profileName; }).out; - num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { 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.164" { inherit profileName; }).out; + num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { 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.188" { inherit profileName; }).out; time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.1.45" { inherit profileName; }).out; ${ if hostPlatform.parsed.cpu.name == "wasm32" && !(hostPlatform.parsed.kernel.name == "emscripten" || hostPlatform.parsed.kernel.name == "wasi") then "wasm_bindgen" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.87" { 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; @@ -1014,11 +1012,11 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".clap."4.3.8" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".clap."4.4.0" = overridableMkRustCrate (profileName: rec { name = "clap"; - version = "4.3.8"; + version = "4.4.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d9394150f5b4273a1763355bd1c2ec54cc5a2593f790587bcd6b2c947cfa9211"; }; + src = fetchCratesIo { inherit name version; sha256 = "1d5f1946157a96594eb2d2c10eb7ad9a2b27518cb3000209dec700c35df9197d"; }; 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") "default") @@ -1031,17 +1029,17 @@ in (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 "clap_builder" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.3.8" { 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.3.2" { profileName = "__noProfile"; }).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.4.0" { 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.4.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.18.0" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.3.8" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.4.0" = overridableMkRustCrate (profileName: rec { name = "clap_builder"; - version = "4.3.8"; + version = "4.4.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "9a78fbdd3cc2914ddf37ba444114bc7765bbdcb55ec9cbe6fa054f0137400717"; }; + src = fetchCratesIo { inherit name version; sha256 = "78116e32a042dd73c2901f0dc30790d20ff3447f3e3472fad359e8c3d282bcd6"; }; 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") @@ -1052,35 +1050,34 @@ in (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.2" { 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.1" { 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_lex" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_lex."0.5.0" { inherit profileName; }).out; + ${ 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.5.0" { 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.2" { 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.5.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; }; }); - "registry+https://github.com/rust-lang/crates.io-index".clap_derive."4.3.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".clap_derive."4.4.0" = overridableMkRustCrate (profileName: rec { name = "clap_derive"; - version = "4.3.2"; + version = "4.4.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f"; }; + src = fetchCratesIo { inherit name version; sha256 = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a"; }; 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.1" { 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.60" { 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.28" { 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.20" { 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.66" { 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.33" { 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.29" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".clap_lex."0.5.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".clap_lex."0.5.1" = overridableMkRustCrate (profileName: rec { name = "clap_lex"; - version = "0.5.0"; + version = "0.5.1"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"; }; + src = fetchCratesIo { inherit name version; sha256 = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"; }; }); "registry+https://github.com/rust-lang/crates.io-index".colorchoice."1.0.0" = overridableMkRustCrate (profileName: rec { @@ -1097,7 +1094,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.4" { inherit profileName; }).out; - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; }); @@ -1108,21 +1105,21 @@ in src = fetchCratesIo { inherit name version; sha256 = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".cpufeatures."0.2.8" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".cpufeatures."0.2.9" = overridableMkRustCrate (profileName: rec { name = "cpufeatures"; - version = "0.2.8"; + version = "0.2.9"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c"; }; + src = fetchCratesIo { inherit name version; sha256 = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"; }; dependencies = { - ${ if hostPlatform.config == "aarch64-linux-android" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.vendor.name == "apple" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + ${ if hostPlatform.config == "aarch64-linux-android" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.kernel.name == "linux" || hostPlatform.parsed.cpu.name == "aarch64" && hostPlatform.parsed.vendor.name == "apple" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".crc32c."0.6.3" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".crc32c."0.6.4" = overridableMkRustCrate (profileName: rec { name = "crc32c"; - version = "0.6.3"; + version = "0.6.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "3dfea2db42e9927a3845fb268a10a72faed6d416065f77873f05e411457c363e"; }; + src = fetchCratesIo { inherit name version; sha256 = "d8f48d60e5b4d2c53d5c2b1d8a58c849a70ae5e5509b08a48d047e3b65714a74"; }; buildDependencies = { rustc_version = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".rustc_version."0.4.0" { profileName = "__noProfile"; }).out; }; @@ -1172,7 +1169,7 @@ in ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" 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/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "crossbeam_utils" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-utils."0.8.16" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "memoffset" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memoffset."0.9.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "scopeguard" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.1.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "scopeguard" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.2.0" { inherit profileName; }).out; }; buildDependencies = { ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "autocfg" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; @@ -1185,13 +1182,13 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "alloc") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "default") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "std") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "alloc") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "default") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "std") ]; dependencies = { - ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" 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/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "crossbeam_utils" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-utils."0.8.16" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" 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/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "crossbeam_utils" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-utils."0.8.16" { inherit profileName; }).out; }; }); @@ -1250,8 +1247,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.60" { 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.28" { 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.66" { 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.33" { 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.109" { inherit profileName; }).out; }; @@ -1264,7 +1261,7 @@ in src = fetchCratesIo { inherit name version; sha256 = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"; }; 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.4" { 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.28" { 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.33" { 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.109" { inherit profileName; }).out; }; }); @@ -1279,18 +1276,29 @@ in ]; dependencies = { cfg_if = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out; - num_cpus = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.15.0" { inherit profileName; }).out; + num_cpus = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.16.0" { inherit profileName; }).out; }; }); + "registry+https://github.com/rust-lang/crates.io-index".deranged."0.3.8" = overridableMkRustCrate (profileName: rec { + name = "deranged"; + version = "0.3.8"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"; }; + features = builtins.concatLists [ + [ "alloc" ] + [ "std" ] + ]; + }); + "registry+https://github.com/rust-lang/crates.io-index".derivative."2.2.0" = overridableMkRustCrate (profileName: rec { name = "derivative"; version = "2.2.0"; 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.60" { 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.28" { 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.66" { 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.33" { 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.109" { inherit profileName; }).out; }; }); @@ -1333,35 +1341,35 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"; }; dependencies = { - ${ if (rootFeatures' ? "garage/kubernetes-discovery" || 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.146" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/kubernetes-discovery" || 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.147" { inherit profileName; }).out; ${ if (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.parsed.kernel.name == "redox" then "redox_users" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_users."0.4.3" { inherit profileName; }).out; ${ if (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && 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".dyn-clone."1.0.11" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".dyn-clone."1.0.13" = overridableMkRustCrate (profileName: rec { name = "dyn-clone"; - version = "1.0.11"; + version = "1.0.13"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30"; }; + src = fetchCratesIo { inherit name version; sha256 = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".either."1.8.1" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".either."1.9.0" = overridableMkRustCrate (profileName: rec { name = "either"; - version = "1.8.1"; + version = "1.9.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"; }; + src = fetchCratesIo { inherit name version; sha256 = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"; }; features = builtins.concatLists [ [ "default" ] [ "use_std" ] ]; }); - "registry+https://github.com/rust-lang/crates.io-index".encoding_rs."0.8.32" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".encoding_rs."0.8.33" = overridableMkRustCrate (profileName: rec { name = "encoding_rs"; - version = "0.8.32"; + version = "0.8.33"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"; }; + src = fetchCratesIo { inherit name version; sha256 = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"; }; features = builtins.concatLists [ [ "alloc" ] [ "default" ] @@ -1371,32 +1379,32 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".env_logger."0.7.1" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".env_logger."0.10.0" = overridableMkRustCrate (profileName: rec { name = "env_logger"; - version = "0.7.1"; + version = "0.10.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"; }; + src = fetchCratesIo { inherit name version; sha256 = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "atty") + (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "auto-color") + (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "color") (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "default") (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "humantime") (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "regex") - (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "termcolor") ]; dependencies = { - ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" 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/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "humantime" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".humantime."1.3.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "regex" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "humantime" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".humantime."2.1.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "is_terminal" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".is-terminal."0.4.9" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "regex" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "termcolor" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".termcolor."1.2.0" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".equivalent."1.0.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".equivalent."1.0.1" = overridableMkRustCrate (profileName: rec { name = "equivalent"; - version = "1.0.0"; + version = "1.0.1"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"; }; + src = fetchCratesIo { inherit name version; sha256 = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"; }; }); "registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" = overridableMkRustCrate (profileName: rec { @@ -1410,25 +1418,25 @@ 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.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.109" { inherit profileName; }).out; synstructure = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".synstructure."0.12.6" { inherit profileName; }).out; }; buildDependencies = { - rustversion = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".rustversion."1.0.12" { profileName = "__noProfile"; }).out; + rustversion = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".rustversion."1.0.14" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".errno."0.3.1" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".errno."0.3.2" = overridableMkRustCrate (profileName: rec { name = "errno"; - version = "0.3.1"; + version = "0.3.2"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"; }; + src = fetchCratesIo { inherit name version; sha256 = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"; }; dependencies = { - ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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.146" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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; + ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && (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.147" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && 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; }; }); @@ -1438,10 +1446,10 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"; }; dependencies = { - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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.146" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; buildDependencies = { - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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.79" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "cc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" { profileName = "__noProfile"; }).out; }; }); @@ -1451,8 +1459,8 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"; }; 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") "default") - (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") "std") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "default") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "std") ]; }); @@ -1473,6 +1481,18 @@ in }; }); + "registry+https://github.com/rust-lang/crates.io-index".fastrand."2.0.0" = overridableMkRustCrate (profileName: rec { + name = "fastrand"; + version = "2.0.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"; }; + features = builtins.concatLists [ + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "alloc") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "std") + ]; + }); + "registry+https://github.com/rust-lang/crates.io-index".fixedbitset."0.4.2" = overridableMkRustCrate (profileName: rec { name = "fixedbitset"; version = "0.4.2"; @@ -1519,7 +1539,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"; }; dependencies = { - ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled") && hostPlatform.isWindows then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out; }; }); @@ -1611,9 +1631,9 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"; }; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; }; }); @@ -1669,9 +1689,9 @@ in futures_sink = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.28" { inherit profileName; }).out; futures_task = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-task."0.3.28" { inherit profileName; }).out; memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; pin_utils = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-utils."0.1.0" { inherit profileName; }).out; - slab = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".slab."0.4.8" { inherit profileName; }).out; + slab = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".slab."0.4.9" { inherit profileName; }).out; }; }); @@ -1685,9 +1705,9 @@ in }; }); - "unknown".garage."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage"; - version = "0.8.2"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/garage"); features = builtins.concatLists [ @@ -1696,47 +1716,47 @@ in (lib.optional (rootFeatures' ? "garage/default") "default") (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/k2v") "k2v") (lib.optional (rootFeatures' ? "garage/kubernetes-discovery") "kubernetes-discovery") - (lib.optional (rootFeatures' ? "garage/lmdb") "lmdb") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb") "lmdb") (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics") "metrics") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "opentelemetry-otlp") (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus") "opentelemetry-prometheus") (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/prometheus") "prometheus") (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled") "sled") - (lib.optional (rootFeatures' ? "garage/sqlite") "sqlite") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite") "sqlite") (lib.optional (rootFeatures' ? "garage/system-libs") "system-libs") (lib.optional (rootFeatures' ? "garage/telemetry-otlp") "telemetry-otlp") ]; dependencies = { - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; - backtrace = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".backtrace."0.3.67" { inherit profileName; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; + backtrace = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".backtrace."0.3.69" { inherit profileName; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; - bytesize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytesize."1.2.0" { inherit profileName; }).out; + bytesize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytesize."1.3.0" { inherit profileName; }).out; format_table = (rustPackages."unknown".format_table."0.1.1" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { 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; + garage_api = (rustPackages."unknown".garage_api."0.9.0" { inherit profileName; }).out; + garage_block = (rustPackages."unknown".garage_block."0.9.0" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_model = (rustPackages."unknown".garage_model."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; + garage_web = (rustPackages."unknown".garage_web."0.9.0" { 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; 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.3" { inherit profileName; }).out; + netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.10.0" { inherit profileName; }).out; opentelemetry = (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 "opentelemetry_otlp" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-otlp."0.10.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" then "opentelemetry_prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-prometheus."0.10.0" { inherit profileName; }).out; 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.3" { 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.164" { inherit profileName; }).out; - serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.9" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.12" { 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.4.1" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.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.37" { inherit profileName; }).out; tracing_subscriber = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.17" { inherit profileName; }).out; @@ -1745,21 +1765,21 @@ in assert_json_diff = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".assert-json-diff."2.0.2" { inherit profileName; }).out; aws_config = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-config."0.55.3" { inherit profileName; }).out; aws_sdk_s3 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-s3."0.28.0" { inherit profileName; }).out; - base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.2" { inherit profileName; }).out; + base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.3" { inherit profileName; }).out; chrono = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.26" { 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.9" { inherit profileName; }).out; - hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; k2v_client = (rustPackages."unknown".k2v-client."0.0.4" { inherit profileName; }).out; - serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.99" { inherit profileName; }).out; + serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.105" { inherit profileName; }).out; sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.10.7" { inherit profileName; }).out; static_init = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".static_init."1.0.3" { inherit profileName; }).out; }; }); - "unknown".garage_api."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage_api."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_api"; - version = "0.8.2"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/api"); features = builtins.concatLists [ @@ -1769,8 +1789,8 @@ in (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/prometheus") "prometheus") ]; dependencies = { - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; - base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.2" { inherit profileName; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; + base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.3" { inherit profileName; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; chrono = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.26" { inherit profileName; }).out; crypto_common = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crypto-common."0.1.6" { inherit profileName; }).out; @@ -1778,42 +1798,43 @@ in form_urlencoded = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".form_urlencoded."1.2.0" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { 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; + garage_block = (rustPackages."unknown".garage_block."0.9.0" { inherit profileName; }).out; + garage_model = (rustPackages."unknown".garage_model."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { 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.9" { 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."1.0.2" { inherit profileName; }).out; - hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; - idna = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".idna."0.3.0" { inherit profileName; }).out; + httpdate = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".httpdate."1.0.3" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + hyperlocal = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyperlocal."0.8.0" { inherit profileName; }).out; + idna = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".idna."0.4.0" { inherit profileName; }).out; md5 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".md-5."0.10.5" { inherit profileName; }).out; multer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".multer."2.1.0" { inherit profileName; }).out; nom = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".nom."7.1.3" { inherit profileName; }).out; opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" then "opentelemetry_prometheus" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-prometheus."0.10.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.0" { inherit profileName; }).out; - pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.0" { inherit profileName; }).out; + pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.3" { 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.3" { 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.18.0" { inherit profileName; }).out; - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; - serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.9" { inherit profileName; }).out; - serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.99" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.12" { inherit profileName; }).out; + serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.105" { inherit profileName; }).out; sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.10.7" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.14" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; url = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.4.0" { inherit profileName; }).out; }; }); - "unknown".garage_block."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage_block."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_block"; - version = "0.8.2"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/block"); features = builtins.concatLists [ @@ -1821,30 +1842,31 @@ in ]; dependencies = { arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.6.0" { inherit profileName; }).out; - async_compression = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".async-compression."0.4.0" { inherit profileName; }).out; - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; + async_compression = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".async-compression."0.4.1" { inherit profileName; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; + bytesize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytesize."1.3.0" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { 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; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { 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.164" { inherit profileName; }).out; - serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.9" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.12" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.8" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { 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; + zstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.4" { inherit profileName; }).out; }; }); - "unknown".garage_db."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage_db."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_db"; - version = "0.8.2"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/db"); features = builtins.concatLists [ @@ -1852,20 +1874,20 @@ in (lib.optional (rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli") "clap") (lib.optional (rootFeatures' ? "garage_db/cli") "cli") (lib.optional (rootFeatures' ? "garage_db/default") "default") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "heed") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "lmdb") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "heed") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "lmdb") (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "pretty_env_logger") - (lib.optional (rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite") "rusqlite") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "rusqlite") (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled") "sled") - (lib.optional (rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite") "sqlite") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || 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."4.3.8" { 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.4.0" { 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; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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.28.0" { 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.5.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "rusqlite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rusqlite."0.29.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "sled" else null } = (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.37" { inherit profileName; }).out; }; @@ -1874,46 +1896,47 @@ in }; }); - "unknown".garage_model."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage_model."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_model"; - version = "0.8.2"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/model"); features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage_model/default") "default") (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/k2v" || rootFeatures' ? "garage_api/k2v" || rootFeatures' ? "garage_model/k2v") "k2v") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_model/lmdb") "lmdb") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "lmdb") (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled") "sled") - (lib.optional (rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_model/sqlite") "sqlite") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "sqlite") ]; dependencies = { arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.6.0" { inherit profileName; }).out; - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; - base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.2" { inherit profileName; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; + base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.3" { inherit profileName; }).out; blake2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".blake2."0.10.6" { inherit profileName; }).out; + chrono = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.26" { 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.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { 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; + garage_block = (rustPackages."unknown".garage_block."0.9.0" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { 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.3" { inherit profileName; }).out; + netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.10.0" { 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.164" { inherit profileName; }).out; - serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.9" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.12" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { 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; + zstd = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.4" { inherit profileName; }).out; }; }); - "unknown".garage_rpc."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage_rpc."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_rpc"; - version = "0.8.2"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/rpc"); features = builtins.concatLists [ @@ -1928,61 +1951,65 @@ in ]; dependencies = { arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.6.0" { inherit profileName; }).out; - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; + bytesize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytesize."1.3.0" { inherit profileName; }).out; ${ 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; + format_table = (rustPackages."unknown".format_table."0.1.1" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { 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; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; + gethostname = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".gethostname."0.4.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.5" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || 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 "kube" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kube."0.75.0" { 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.3" { inherit profileName; }).out; + netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.10.0" { inherit profileName; }).out; + nix = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".nix."0.27.1" { 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.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.18" { 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.20" { 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.12" { inherit profileName; }).out; - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; - serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.9" { inherit profileName; }).out; - serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.99" { 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.29.0" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.12" { inherit profileName; }).out; + serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.105" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.14" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); - "unknown".garage_table."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage_table."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_table"; - version = "0.8.2"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/table"); dependencies = { arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.6.0" { inherit profileName; }).out; - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { 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; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { inherit profileName; }).out; + garage_rpc = (rustPackages."unknown".garage_rpc."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { 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.164" { inherit profileName; }).out; - serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.9" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.12" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); - "unknown".garage_util."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage_util."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_util"; - version = "0.8.2"; + version = "0.9.0"; registry = "unknown"; src = fetchCrateLocal (workspaceSrc + "/src/util"); features = builtins.concatLists [ @@ -1990,27 +2017,28 @@ in ]; dependencies = { arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.6.0" { inherit profileName; }).out; - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).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.4.0" { inherit profileName; }).out; + bytesize = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytesize."1.3.0" { inherit profileName; }).out; chrono = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".chrono."0.4.26" { inherit profileName; }).out; digest = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.10.7" { 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.28" { inherit profileName; }).out; - garage_db = (rustPackages."unknown".garage_db."0.8.2" { inherit profileName; }).out; + garage_db = (rustPackages."unknown".garage_db."0.9.0" { 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; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; - hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; lazy_static = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out; - netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.3" { inherit profileName; }).out; + netapp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".netapp."0.10.0" { 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; - 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.164" { inherit profileName; }).out; - serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.99" { inherit profileName; }).out; + rmp_serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."1.1.2" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.105" { inherit profileName; }).out; sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.10.7" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.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.37" { inherit profileName; }).out; xxhash_rust = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".xxhash-rust."0.8.6" { inherit profileName; }).out; @@ -2023,22 +2051,24 @@ in }; }); - "unknown".garage_web."0.8.2" = overridableMkRustCrate (profileName: rec { + "unknown".garage_web."0.9.0" = overridableMkRustCrate (profileName: rec { name = "garage_web"; - version = "0.8.2"; + version = "0.9.0"; 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.28" { 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; + garage_api = (rustPackages."unknown".garage_api."0.9.0" { inherit profileName; }).out; + garage_model = (rustPackages."unknown".garage_model."0.9.0" { inherit profileName; }).out; + garage_table = (rustPackages."unknown".garage_table."0.9.0" { inherit profileName; }).out; + garage_util = (rustPackages."unknown".garage_util."0.9.0" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; - hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + hyperlocal = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyperlocal."0.8.0" { inherit profileName; }).out; opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); @@ -2059,14 +2089,14 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".gethostname."0.2.3" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".gethostname."0.4.3" = overridableMkRustCrate (profileName: rec { name = "gethostname"; - version = "0.2.3"; + version = "0.4.3"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"; }; + src = fetchCratesIo { inherit name version; sha256 = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818"; }; dependencies = { - ${ if !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { 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; + ${ if !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; + ${ if hostPlatform.isWindows then "windows_targets" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.5" { inherit profileName; }).out; }; }); @@ -2080,16 +2110,16 @@ 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.146" { inherit profileName; }).out; + ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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; }; }); - "registry+https://github.com/rust-lang/crates.io-index".gimli."0.27.3" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".gimli."0.28.0" = overridableMkRustCrate (profileName: rec { name = "gimli"; - version = "0.27.3"; + version = "0.28.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"; }; + src = fetchCratesIo { inherit name version; sha256 = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"; }; features = builtins.concatLists [ [ "read" ] [ "read-core" ] @@ -2114,17 +2144,17 @@ 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.20+deprecated" { profileName = "__noProfile"; }).out; - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.109" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".h2."0.3.19" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".h2."0.3.21" = overridableMkRustCrate (profileName: rec { name = "h2"; - version = "0.3.19"; + version = "0.3.21"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"; }; + src = fetchCratesIo { inherit name version; sha256 = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"; }; dependencies = { bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; fnv = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; }).out; @@ -2133,8 +2163,8 @@ in futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { 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.8" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + slab = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".slab."0.4.9" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.8" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; @@ -2156,15 +2186,15 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"; }; 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") "allocator-api2") - (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") - (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") "inline-more") - (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "raw") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "allocator-api2") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "default") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "inline-more") + (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "raw") ]; 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 "ahash" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ahash."0.8.3" { 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 "allocator_api2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".allocator-api2."0.2.15" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "ahash" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ahash."0.8.3" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "allocator_api2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".allocator-api2."0.2.16" { inherit profileName; }).out; }; }); @@ -2174,7 +2204,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f"; }; 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.14.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "hashbrown" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.14.0" { inherit profileName; }).out; }; }); @@ -2204,20 +2234,20 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "269c7486ed6def5d7b59a427cec3e87b4d4dd4381d01e21c8c9f2d3985688392"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "lmdb") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "lmdb-rkv-sys") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "lmdb") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "lmdb-rkv-sys") ]; dependencies = { - ${ 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.13.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 "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.146" { 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.18.0" { 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.1" { 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.4.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "bytemuck" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytemuck."1.13.1" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.18.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "synchronoise" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".synchronoise."1.0.1" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") && hostPlatform.isWindows then "url" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.4.0" { inherit profileName; }).out; }; }); @@ -2234,57 +2264,31 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "9a6cf0a6952fcedc992602d5cddd1e3fff091fbe87d38636e3ec23a31f32acbd"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "bincode") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "default") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "serde") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "serde-bincode") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "serde-json") - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "serde_json") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "bincode") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "default") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "serde") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "serde-bincode") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "serde-json") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") "serde_json") ]; dependencies = { - ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "bincode" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bincode."1.3.3" { inherit profileName; }).out; - ${ 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.13.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.164" { 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.99" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "bincode" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bincode."1.3.3" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "bytemuck" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytemuck."1.13.1" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "serde" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "serde_json" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.105" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.1.19" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.3.2" = overridableMkRustCrate (profileName: rec { name = "hermit-abi"; - version = "0.1.19"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"; }; - features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "default") - ]; - dependencies = { - ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; - }; - }); - - "registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.2.6" = overridableMkRustCrate (profileName: rec { - name = "hermit-abi"; - version = "0.2.6"; + version = "0.3.2"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"; }; + src = fetchCratesIo { inherit name version; sha256 = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"; }; features = builtins.concatLists [ [ "default" ] ]; - dependencies = { - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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 { @@ -2328,7 +2332,7 @@ in dependencies = { bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; fnv = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; }).out; - itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.6" { inherit profileName; }).out; + itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.9" { inherit profileName; }).out; }; }); @@ -2340,7 +2344,7 @@ in dependencies = { bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { 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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; }; }); @@ -2351,11 +2355,11 @@ in src = fetchCratesIo { inherit name version; sha256 = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".http-range-header."0.3.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".http-range-header."0.3.1" = overridableMkRustCrate (profileName: rec { name = "http-range-header"; - version = "0.3.0"; + version = "0.3.1"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"; }; + src = fetchCratesIo { inherit name version; sha256 = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"; }; }); "registry+https://github.com/rust-lang/crates.io-index".httparse."1.8.0" = overridableMkRustCrate (profileName: rec { @@ -2369,28 +2373,25 @@ in ]; }); - "registry+https://github.com/rust-lang/crates.io-index".httpdate."1.0.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".httpdate."1.0.3" = overridableMkRustCrate (profileName: rec { name = "httpdate"; - version = "1.0.2"; + version = "1.0.3"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"; }; + src = fetchCratesIo { inherit name version; sha256 = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".humantime."1.3.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".humantime."2.1.0" = overridableMkRustCrate (profileName: rec { name = "humantime"; - version = "1.3.0"; + version = "2.1.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"; }; - dependencies = { - ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "quick_error" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quick-error."1.2.3" { inherit profileName; }).out; - }; + src = fetchCratesIo { inherit name version; sha256 = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" = overridableMkRustCrate (profileName: rec { name = "hyper"; - version = "0.14.26"; + version = "0.14.27"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"; }; + src = fetchCratesIo { inherit name version; sha256 = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"; }; features = builtins.concatLists [ [ "client" ] [ "default" ] @@ -2409,15 +2410,15 @@ in futures_channel = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-channel."0.3.28" { inherit profileName; }).out; futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - h2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".h2."0.3.19" { inherit profileName; }).out; + h2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".h2."0.3.21" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; http_body = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; httparse = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".httparse."1.8.0" { inherit profileName; }).out; - 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.6" { 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; + httpdate = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".httpdate."1.0.3" { inherit profileName; }).out; + itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.9" { inherit profileName; }).out; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { 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.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tower_service = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.2" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; want = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".want."0.3.1" { inherit profileName; }).out; @@ -2442,21 +2443,22 @@ in ]; dependencies = { http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; - hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.20.8" { inherit profileName; }).out; rustls_native_certs = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-native-certs."0.6.3" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.23.4" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.24.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.24.1" = overridableMkRustCrate (profileName: rec { name = "hyper-rustls"; - version = "0.24.0"; + version = "0.24.1"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7"; }; + src = fetchCratesIo { inherit name version; sha256 = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"; }; features = builtins.concatLists [ + [ "acceptor" ] [ "default" ] [ "http1" ] [ "http2" ] @@ -2468,12 +2470,13 @@ in [ "tokio-runtime" ] ]; dependencies = { + futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; - hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; - rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.21.2" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; + rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.21.6" { inherit profileName; }).out; rustls_native_certs = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-native-certs."0.6.3" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-rustls."0.24.1" { inherit profileName; }).out; }; }); @@ -2484,13 +2487,30 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"; }; 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.26" { 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.29.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 "hyper" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { 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.13" { 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.32.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; }; }); + "registry+https://github.com/rust-lang/crates.io-index".hyperlocal."0.8.0" = overridableMkRustCrate (profileName: rec { + name = "hyperlocal"; + version = "0.8.0"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "0fafdf7b2b2de7c9784f76e02c0935e65a8117ec3b768644379983ab333ac98c"; }; + features = builtins.concatLists [ + [ "server" ] + ]; + dependencies = { + futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; + hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.3" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; + }; + }); + "registry+https://github.com/rust-lang/crates.io-index".iana-time-zone."0.1.57" = overridableMkRustCrate (profileName: rec { name = "iana-time-zone"; version = "0.1.57"; @@ -2515,7 +2535,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"; }; buildDependencies = { - cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.79" { profileName = "__noProfile"; }).out; + cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" { profileName = "__noProfile"; }).out; }; }); @@ -2526,17 +2546,6 @@ in src = fetchCratesIo { inherit name version; sha256 = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"; }; }); - "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.13" { inherit profileName; }).out; - unicode_normalization = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-normalization."0.1.22" { inherit profileName; }).out; - }; - }); - "registry+https://github.com/rust-lang/crates.io-index".idna."0.4.0" = overridableMkRustCrate (profileName: rec { name = "idna"; version = "0.4.0"; @@ -2575,12 +2584,12 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "default") - (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "std") + (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "default") + (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "std") ]; dependencies = { - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "equivalent" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".equivalent."1.0.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "hashbrown" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.14.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 "equivalent" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".equivalent."1.0.1" { 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 "hashbrown" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashbrown."0.14.0" { inherit profileName; }).out; }; }); @@ -2594,32 +2603,14 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".io-lifetimes."1.0.11" = overridableMkRustCrate (profileName: rec { - name = "io-lifetimes"; - version = "1.0.11"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"; }; - features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "hermit-abi") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "libc") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "windows-sys") - ]; - dependencies = { - ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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.146" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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.7.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".ipnet."2.8.0" = overridableMkRustCrate (profileName: rec { name = "ipnet"; - version = "2.7.2"; + version = "2.8.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"; }; + src = fetchCratesIo { inherit name version; sha256 = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"; }; features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "default") + (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "std") ]; }); @@ -2633,20 +2624,19 @@ in [ "serde" ] ]; dependencies = { - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".is-terminal."0.4.7" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".is-terminal."0.4.9" = overridableMkRustCrate (profileName: rec { name = "is-terminal"; - version = "0.4.7"; + version = "0.4.9"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f"; }; + src = fetchCratesIo { inherit name version; sha256 = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"; }; 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.11" { 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.20" { 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; + ${ 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.3.2" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && !(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.38.9" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && 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; }; }); @@ -2663,20 +2653,20 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "default") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "use_alloc") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "use_std") + [ "default" ] + [ "use_alloc" ] + [ "use_std" ] ]; 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.8.1" { inherit profileName; }).out; + either = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".either."1.9.0" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.6" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.9" = overridableMkRustCrate (profileName: rec { name = "itoa"; - version = "1.0.6"; + version = "1.0.9"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"; }; + src = fetchCratesIo { inherit name version; sha256 = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"; }; }); "registry+https://github.com/rust-lang/crates.io-index".jobserver."0.1.26" = overridableMkRustCrate (profileName: rec { @@ -2685,7 +2675,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"; }; dependencies = { - ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; }); @@ -2710,8 +2700,8 @@ 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.164" { 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.99" { 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.188" { 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.105" { 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; }; }); @@ -2722,9 +2712,9 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; 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.19" { 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.164" { 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.99" { inherit profileName; }).out; + ${ 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.20" { 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.188" { 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.105" { inherit profileName; }).out; }; }); @@ -2742,20 +2732,20 @@ in ]; dependencies = { aws_sigv4 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sigv4."0.55.3" { inherit profileName; }).out; - base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.2" { 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.3.8" { inherit profileName; }).out; + base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.3" { 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.4.0" { inherit profileName; }).out; ${ if rootFeatures' ? "k2v-client/cli" || rootFeatures' ? "k2v-client/format_table" then "format_table" else null } = (rustPackages."unknown".format_table."0.1.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.9" { inherit profileName; }).out; - hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; - hyper_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.24.0" { inherit profileName; }).out; - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + hyper = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + hyper_rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.24.1" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.0" { inherit profileName; }).out; - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; - serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.99" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + serde_json = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.105" { inherit profileName; }).out; sha2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sha2."0.10.7" { inherit profileName; }).out; - thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.40" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.47" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; ${ if rootFeatures' ? "k2v-client/cli" || rootFeatures' ? "k2v-client/tracing" then "tracing" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; ${ if rootFeatures' ? "k2v-client/cli" || rootFeatures' ? "k2v-client/tracing-subscriber" then "tracing_subscriber" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.17" { inherit profileName; }).out; }; @@ -2780,9 +2770,9 @@ 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.26" { 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.9" { 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.3.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.164" { 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.188" { 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.99" { 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.105" { 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.4.0" { inherit profileName; }).out; }; }); @@ -2849,26 +2839,26 @@ in ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || 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.26" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "dirs" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".dirs-next."2.0.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "either" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".either."1.8.1" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "either" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".either."1.9.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "futures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; ${ 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.9" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http_body" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || 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.26" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || 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.27" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "hyper_rustls" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.23.2" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "hyper_timeout" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-timeout."0.4.1" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "jsonpath_lib" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".jsonpath_lib."0.3.0" { 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 "kube_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kube-core."0.75.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "pem" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pem."1.1.1" { 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.1.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.1.3" { inherit profileName; }).out; ${ 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.8" { 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.2" { 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.3" { 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.164" { 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.99" { 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.188" { 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.105" { 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.26" { 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.40" { 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.29.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.47" { 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.32.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.8" { 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.13" { 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.5" { inherit profileName; }).out; @@ -2895,9 +2885,9 @@ in ${ 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.18.0" { 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.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.164" { 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.99" { 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.40" { 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.188" { 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.105" { 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.47" { inherit profileName; }).out; }; }); @@ -2908,9 +2898,9 @@ 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.4" { 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.60" { 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.28" { 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.99" { 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.66" { 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.33" { 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.105" { 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.109" { inherit profileName; }).out; }; }); @@ -2929,12 +2919,12 @@ in ${ 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 "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.1" { 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.1.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.164" { 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.99" { 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.10.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.40" { 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.29.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.1.3" { 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.188" { 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.105" { 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.11.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.47" { 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.32.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.8" { 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.37" { inherit profileName; }).out; }; @@ -2954,8 +2944,8 @@ in futures = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { 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; - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; - thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.40" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; + thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.47" { inherit profileName; }).out; }; }); @@ -2971,9 +2961,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.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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.164" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); @@ -2984,14 +2974,14 @@ in src = fetchCratesIo { inherit name version; sha256 = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" = overridableMkRustCrate (profileName: rec { name = "libc"; - version = "0.2.146"; + version = "0.2.147"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"; }; + src = fetchCratesIo { inherit name version; sha256 = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"; }; features = builtins.concatLists [ [ "default" ] - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "extra_traits") + [ "extra_traits" ] [ "std" ] ]; }); @@ -3005,34 +2995,34 @@ 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.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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.79" { 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.146" { profileName = "__noProfile"; }).out; + ${ if !(hostPlatform.parsed.abi.name == "msvc") then "cc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" { 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.147" { profileName = "__noProfile"; }).out; pkg_config = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.27" { profileName = "__noProfile"; }).out; walkdir = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".walkdir."2.3.3" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".libsqlite3-sys."0.25.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".libsqlite3-sys."0.26.0" = overridableMkRustCrate (profileName: rec { name = "libsqlite3-sys"; - version = "0.25.2"; + version = "0.26.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"; }; + src = fetchCratesIo { inherit name version; sha256 = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"; }; 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") (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage_db/bundled-libs") "cc") - (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") - (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") "min_sqlite_version_3_6_8") - (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") "pkg-config") - (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") "vcpkg") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "default") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "min_sqlite_version_3_14_0") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "pkg-config") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite") "vcpkg") ]; buildDependencies = { - ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage_db/bundled-libs" then "cc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.79" { profileName = "__noProfile"; }).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 "pkg_config" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.27" { profileName = "__noProfile"; }).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 "vcpkg" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".vcpkg."0.2.15" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage_db/bundled-libs" then "cc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "pkg_config" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.27" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "vcpkg" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".vcpkg."0.2.15" { profileName = "__noProfile"; }).out; }; }); @@ -3043,16 +3033,16 @@ in src = fetchCratesIo { inherit name version; sha256 = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".linux-raw-sys."0.3.8" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".linux-raw-sys."0.4.5" = overridableMkRustCrate (profileName: rec { name = "linux-raw-sys"; - version = "0.3.8"; + version = "0.4.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"; }; + src = fetchCratesIo { inherit name version; sha256 = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "errno") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "general") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "ioctl") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "no_std") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "errno") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "general") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "ioctl") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "no_std") ]; }); @@ -3062,14 +3052,14 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "61b9ce6b3be08acefa3003c57b7565377432a89ec24476bbe72e11d101f852fe"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb") "default") + (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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.146" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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.79" { profileName = "__noProfile"; }).out; - ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "pkg_config" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.27" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "cc" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "pkg_config" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.27" { profileName = "__noProfile"; }).out; }; }); @@ -3083,18 +3073,18 @@ in [ "default" ] ]; dependencies = { - scopeguard = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.1.0" { inherit profileName; }).out; + scopeguard = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.2.0" { inherit profileName; }).out; }; buildDependencies = { autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" = overridableMkRustCrate (profileName: rec { name = "log"; - version = "0.4.19"; + version = "0.4.20"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"; }; + src = fetchCratesIo { inherit name version; sha256 = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"; }; features = builtins.concatLists [ [ "std" ] ]; @@ -3165,11 +3155,11 @@ in ]; }); - "registry+https://github.com/rust-lang/crates.io-index".miniz_oxide."0.6.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".miniz_oxide."0.7.1" = overridableMkRustCrate (profileName: rec { name = "miniz_oxide"; - version = "0.6.2"; + version = "0.7.1"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"; }; + src = fetchCratesIo { inherit name version; sha256 = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"; }; dependencies = { adler = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".adler."1.0.2" { inherit profileName; }).out; }; @@ -3186,7 +3176,7 @@ 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.146" { 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.147" { 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 "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out; }; @@ -3212,11 +3202,11 @@ in ]; dependencies = { bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; - encoding_rs = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".encoding_rs."0.8.32" { inherit profileName; }).out; + encoding_rs = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".encoding_rs."0.8.33" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; http = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; httparse = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".httparse."1.8.0" { inherit profileName; }).out; - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.0" { inherit profileName; }).out; mime = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mime."0.3.17" { inherit profileName; }).out; spin = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".spin."0.9.8" { inherit profileName; }).out; @@ -3233,11 +3223,11 @@ in src = fetchCratesIo { inherit name version; sha256 = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".netapp."0.5.3" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".netapp."0.10.0" = overridableMkRustCrate (profileName: rec { name = "netapp"; - version = "0.5.3"; + version = "0.10.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "0eb28e89e7b21d3fdf2b46e2a580ccaab68f469f2e5c27db74f61994be90b558"; }; + src = fetchCratesIo { inherit name version; sha256 = "0a00b76cec93e3ae68c9ed5f08e27a1507424987ee23d5ec961ebd4da820a265"; }; features = builtins.concatLists [ [ "default" ] [ "opentelemetry" ] @@ -3246,7 +3236,7 @@ in ]; dependencies = { arc_swap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".arc-swap."1.6.0" { inherit profileName; }).out; - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; cfg_if = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out; err_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".err-derive."0.3.1" { profileName = "__noProfile"; }).out; @@ -3254,19 +3244,34 @@ in hex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hex."0.4.3" { inherit profileName; }).out; kuska_handshake = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kuska-handshake."0.2.0" { inherit profileName; }).out; sodiumoxide = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".kuska-sodiumoxide."0.2.5-0" { inherit profileName; }).out; - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; opentelemetry = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry."0.17.0" { inherit profileName; }).out; opentelemetry_contrib = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".opentelemetry-contrib."0.9.0" { inherit profileName; }).out; - pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.0" { inherit profileName; }).out; + pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.3" { 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.164" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + rmp_serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp-serde."1.1.2" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.14" { inherit profileName; }).out; tokio_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-util."0.7.8" { inherit profileName; }).out; }; }); + "registry+https://github.com/rust-lang/crates.io-index".nix."0.27.1" = overridableMkRustCrate (profileName: rec { + name = "nix"; + version = "0.27.1"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"; }; + features = builtins.concatLists [ + [ "fs" ] + ]; + dependencies = { + bitflags = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."2.4.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.147" { 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"; @@ -3335,7 +3340,7 @@ in num_integer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-integer."0.1.45" { inherit profileName; }).out; num_iter = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-iter."0.1.43" { inherit profileName; }).out; num_rational = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-rational."0.2.4" { inherit profileName; }).out; - num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { inherit profileName; }).out; + num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { inherit profileName; }).out; }; }); @@ -3349,7 +3354,7 @@ in ]; dependencies = { num_integer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-integer."0.1.45" { inherit profileName; }).out; - num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { inherit profileName; }).out; + num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { inherit profileName; }).out; }; buildDependencies = { autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; @@ -3365,7 +3370,7 @@ in [ "std" ] ]; dependencies = { - num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { inherit profileName; }).out; + num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { inherit profileName; }).out; }; buildDependencies = { autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; @@ -3382,7 +3387,7 @@ in [ "std" ] ]; dependencies = { - num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { inherit profileName; }).out; + num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { inherit profileName; }).out; }; buildDependencies = { autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; @@ -3399,7 +3404,7 @@ in ]; dependencies = { num_integer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-integer."0.1.45" { inherit profileName; }).out; - num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { inherit profileName; }).out; + num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { inherit profileName; }).out; }; buildDependencies = { autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; @@ -3419,18 +3424,18 @@ in dependencies = { num_bigint = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-bigint."0.2.6" { inherit profileName; }).out; num_integer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-integer."0.1.45" { inherit profileName; }).out; - num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { inherit profileName; }).out; + num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { inherit profileName; }).out; }; buildDependencies = { autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" = overridableMkRustCrate (profileName: rec { name = "num-traits"; - version = "0.2.15"; + version = "0.2.16"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"; }; + src = fetchCratesIo { inherit name version; sha256 = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"; }; features = builtins.concatLists [ [ "std" ] ]; @@ -3439,22 +3444,22 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.15.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.16.0" = overridableMkRustCrate (profileName: rec { name = "num_cpus"; - version = "1.15.0"; + version = "1.16.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"; }; + src = fetchCratesIo { inherit name version; sha256 = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"; }; 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.2.6" { inherit profileName; }).out; - ${ if !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + ${ if hostPlatform.parsed.kernel.name == "hermit" then "hermit_abi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.3.2" { inherit profileName; }).out; + ${ if !hostPlatform.isWindows then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".object."0.30.4" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".object."0.32.0" = overridableMkRustCrate (profileName: rec { name = "object"; - version = "0.30.4"; + version = "0.32.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385"; }; + src = fetchCratesIo { inherit name version; sha256 = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"; }; features = builtins.concatLists [ [ "archive" ] [ "coff" ] @@ -3479,7 +3484,7 @@ in [ "default" ] [ "race" ] [ "std" ] - (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/sqlite" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "unstable") + (lib.optional (rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "unstable") ]; }); @@ -3511,7 +3516,7 @@ in [ "trace" ] ]; dependencies = { - async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; + async_trait = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; crossbeam_channel = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-channel."0.5.8" { inherit profileName; }).out; dashmap = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".dashmap."4.0.2" { inherit profileName; }).out; fnv = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fnv."1.0.7" { inherit profileName; }).out; @@ -3521,10 +3526,10 @@ in ${ if hostPlatform.parsed.cpu.name == "wasm32" then "js_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.64" { inherit profileName; }).out; lazy_static = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out; percent_encoding = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.0" { inherit profileName; }).out; - pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.0" { inherit profileName; }).out; + pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.3" { 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.40" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + thiserror = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.47" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tokio_stream = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-stream."0.1.14" { inherit profileName; }).out; }; }); @@ -3556,14 +3561,14 @@ in (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "tonic-build") ]; dependencies = { - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_trait" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_trait" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures."0.3.28" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; ${ 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.40" { 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.29.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.47" { 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.32.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 = { @@ -3593,7 +3598,7 @@ in (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "std") ]; dependencies = { - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "num_traits" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/k8s-openapi" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "num_traits" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { inherit profileName; }).out; }; }); @@ -3617,8 +3622,8 @@ in 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.146" { 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; + ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb") && hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || 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; }; }); @@ -3659,9 +3664,9 @@ 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.146" { inherit profileName; }).out; + ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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.16" { inherit profileName; }).out; - smallvec = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.10.0" { inherit profileName; }).out; + smallvec = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.11.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; }; }); @@ -3673,10 +3678,10 @@ in src = fetchCratesIo { inherit name version; sha256 = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"; }; dependencies = { ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || 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/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || 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.146" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || 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.147" { inherit profileName; }).out; ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || 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.3.5" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || 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.10.0" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.isWindows then "windows_targets" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || 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.11.0" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") && hostPlatform.isWindows then "windows_targets" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.5" { inherit profileName; }).out; }; }); @@ -3688,15 +3693,15 @@ in dependencies = { lazy_static = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".lazy_static."1.4.0" { inherit profileName; }).out; num = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num."0.2.1" { inherit profileName; }).out; - regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; + regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".paste."1.0.12" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".paste."1.0.14" = overridableMkRustCrate (profileName: rec { name = "paste"; - version = "1.0.12"; + version = "1.0.14"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"; }; + src = fetchCratesIo { inherit name version; sha256 = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"; }; }); "registry+https://github.com/rust-lang/crates.io-index".pem."1.1.1" = overridableMkRustCrate (profileName: rec { @@ -3721,44 +3726,44 @@ in ]; }); - "registry+https://github.com/rust-lang/crates.io-index".petgraph."0.6.3" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".petgraph."0.6.4" = overridableMkRustCrate (profileName: rec { name = "petgraph"; - version = "0.6.3"; + version = "0.6.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"; }; + src = fetchCratesIo { inherit name version; sha256 = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"; }; 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.2" { 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; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "indexmap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".indexmap."2.0.0" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.3" = overridableMkRustCrate (profileName: rec { name = "pin-project"; - version = "1.1.0"; + version = "1.1.3"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"; }; + src = fetchCratesIo { inherit name version; sha256 = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"; }; dependencies = { - pin_project_internal = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-internal."1.1.0" { profileName = "__noProfile"; }).out; + pin_project_internal = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-internal."1.1.3" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".pin-project-internal."1.1.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".pin-project-internal."1.1.3" = overridableMkRustCrate (profileName: rec { name = "pin-project-internal"; - version = "1.1.0"; + version = "1.1.3"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"; }; + src = fetchCratesIo { inherit name version; sha256 = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"; }; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.9" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" = overridableMkRustCrate (profileName: rec { name = "pin-project-lite"; - version = "0.2.9"; + version = "0.2.13"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"; }; + src = fetchCratesIo { inherit name version; sha256 = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"; }; }); "registry+https://github.com/rust-lang/crates.io-index".pin-utils."0.1.0" = overridableMkRustCrate (profileName: rec { @@ -3799,7 +3804,7 @@ in ]; dependencies = { 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.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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; @@ -3812,7 +3817,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "faf7a58b2803d818a374be9278a1fe8f88fce14b936afbe225000cfcd9c73f16"; }; dependencies = { - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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; }; }); @@ -3828,14 +3833,14 @@ in ]; }); - "registry+https://github.com/rust-lang/crates.io-index".pretty_env_logger."0.4.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".pretty_env_logger."0.5.0" = overridableMkRustCrate (profileName: rec { name = "pretty_env_logger"; - version = "0.4.0"; + version = "0.5.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d"; }; + src = fetchCratesIo { inherit name version; sha256 = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c"; }; dependencies = { - ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "env_logger" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".env_logger."0.7.1" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "env_logger" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".env_logger."0.10.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; }; }); @@ -3851,8 +3856,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.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.109" { inherit profileName; }).out; }; buildDependencies = { @@ -3866,8 +3871,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.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; }; buildDependencies = { version_check = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".version_check."0.9.4" { profileName = "__noProfile"; }).out; @@ -3881,17 +3886,17 @@ in src = fetchCratesIo { inherit name version; sha256 = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" = overridableMkRustCrate (profileName: rec { name = "proc-macro2"; - version = "1.0.60"; + version = "1.0.66"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"; }; + src = fetchCratesIo { inherit name version; sha256 = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"; }; features = builtins.concatLists [ [ "default" ] [ "proc-macro" ] ]; dependencies = { - unicode_ident = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.9" { inherit profileName; }).out; + unicode_ident = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.11" { inherit profileName; }).out; }; }); @@ -3911,7 +3916,7 @@ in ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" then "memchr" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" then "parking_lot" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.12.1" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" then "protobuf" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".protobuf."2.28.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" then "thiserror" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.40" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/metrics" || rootFeatures' ? "garage/opentelemetry-prometheus" || rootFeatures' ? "garage/prometheus" || rootFeatures' ? "garage_api/metrics" || rootFeatures' ? "garage_api/opentelemetry-prometheus" || rootFeatures' ? "garage_api/prometheus" then "thiserror" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.47" { inherit profileName; }).out; }; }); @@ -3941,13 +3946,13 @@ in ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "heck" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".heck."0.3.3" { 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.5" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" 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 "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "multimap" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".multimap."0.8.3" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "petgraph" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".petgraph."0.6.3" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "petgraph" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".petgraph."0.6.4" { 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 "prost_types" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".prost-types."0.9.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "regex" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tempfile" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tempfile."3.6.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "regex" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tempfile" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tempfile."3.8.0" { inherit profileName; }).out; }; buildDependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "which" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".which."4.4.0" { profileName = "__noProfile"; }).out; @@ -3960,10 +3965,10 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"; }; 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.71" { inherit profileName; }).out; + ${ 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.75" { 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.5" { 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.60" { 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.28" { 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.66" { 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.33" { 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.109" { inherit profileName; }).out; }; }); @@ -3986,13 +3991,6 @@ in src = fetchCratesIo { inherit name version; sha256 = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".quick-error."1.2.3" = overridableMkRustCrate (profileName: rec { - name = "quick-error"; - version = "1.2.3"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"; }; - }); - "registry+https://github.com/rust-lang/crates.io-index".quick-xml."0.26.0" = overridableMkRustCrate (profileName: rec { name = "quick-xml"; version = "0.26.0"; @@ -4005,21 +4003,21 @@ in ]; dependencies = { memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.0" { inherit profileName; }).out; - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" = overridableMkRustCrate (profileName: rec { name = "quote"; - version = "1.0.28"; + version = "1.0.33"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"; }; + src = fetchCratesIo { inherit name version; sha256 = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"; }; features = builtins.concatLists [ [ "default" ] [ "proc-macro" ] ]; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; }; }); @@ -4039,7 +4037,7 @@ in [ "std_rng" ] ]; dependencies = { - ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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.4" { inherit profileName; }).out; }; @@ -4102,24 +4100,24 @@ in dependencies = { ${ 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.10" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "syscall" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".redox_syscall."0.2.16" { 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.40" { 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.47" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" = overridableMkRustCrate (profileName: rec { name = "regex"; - version = "1.8.4"; + version = "1.9.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"; }; + src = fetchCratesIo { inherit name version; sha256 = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29"; }; features = builtins.concatLists [ - [ "aho-corasick" ] [ "default" ] - [ "memchr" ] [ "perf" ] + [ "perf-backtrack" ] [ "perf-cache" ] [ "perf-dfa" ] [ "perf-inline" ] [ "perf-literal" ] + [ "perf-onepass" ] [ "std" ] [ "unicode" ] [ "unicode-age" ] @@ -4131,9 +4129,10 @@ in [ "unicode-segment" ] ]; dependencies = { - aho_corasick = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aho-corasick."1.0.2" { inherit profileName; }).out; + aho_corasick = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aho-corasick."1.0.4" { inherit profileName; }).out; memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.0" { inherit profileName; }).out; - regex_syntax = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex-syntax."0.7.2" { inherit profileName; }).out; + regex_automata = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex-automata."0.3.7" { inherit profileName; }).out; + regex_syntax = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex-syntax."0.7.5" { inherit profileName; }).out; }; }); @@ -4152,6 +4151,42 @@ in }; }); + "registry+https://github.com/rust-lang/crates.io-index".regex-automata."0.3.7" = overridableMkRustCrate (profileName: rec { + name = "regex-automata"; + version = "0.3.7"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629"; }; + features = builtins.concatLists [ + [ "alloc" ] + [ "dfa-onepass" ] + [ "hybrid" ] + [ "meta" ] + [ "nfa-backtrack" ] + [ "nfa-pikevm" ] + [ "nfa-thompson" ] + [ "perf-inline" ] + [ "perf-literal" ] + [ "perf-literal-multisubstring" ] + [ "perf-literal-substring" ] + [ "std" ] + [ "syntax" ] + [ "unicode" ] + [ "unicode-age" ] + [ "unicode-bool" ] + [ "unicode-case" ] + [ "unicode-gencat" ] + [ "unicode-perl" ] + [ "unicode-script" ] + [ "unicode-segment" ] + [ "unicode-word-boundary" ] + ]; + dependencies = { + aho_corasick = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aho-corasick."1.0.4" { inherit profileName; }).out; + memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.0" { inherit profileName; }).out; + regex_syntax = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex-syntax."0.7.5" { inherit profileName; }).out; + }; + }); + "registry+https://github.com/rust-lang/crates.io-index".regex-syntax."0.6.29" = overridableMkRustCrate (profileName: rec { name = "regex-syntax"; version = "0.6.29"; @@ -4170,11 +4205,11 @@ in ]; }); - "registry+https://github.com/rust-lang/crates.io-index".regex-syntax."0.7.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".regex-syntax."0.7.5" = overridableMkRustCrate (profileName: rec { name = "regex-syntax"; - version = "0.7.2"; + version = "0.7.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"; }; + src = fetchCratesIo { inherit name version; sha256 = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"; }; features = builtins.concatLists [ [ "default" ] [ "std" ] @@ -4189,11 +4224,11 @@ in ]; }); - "registry+https://github.com/rust-lang/crates.io-index".reqwest."0.11.18" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".reqwest."0.11.20" = overridableMkRustCrate (profileName: rec { name = "reqwest"; - version = "0.11.18"; + version = "0.11.20"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"; }; + src = fetchCratesIo { inherit name version; sha256 = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"; }; features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "__rustls") (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "__tls") @@ -4206,36 +4241,36 @@ in (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "tokio-rustls") ]; dependencies = { - ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "base64" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.2" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "base64" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.3" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "encoding_rs" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".encoding_rs."0.8.32" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "encoding_rs" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".encoding_rs."0.8.33" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "futures_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "h2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".h2."0.3.19" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "h2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".h2."0.3.21" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."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 "http_body" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "hyper" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "hyper_rustls" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.24.0" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "ipnet" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ipnet."2.7.2" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "hyper" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "hyper_rustls" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-rustls."0.24.1" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && !(hostPlatform.parsed.cpu.name == "wasm32") then "ipnet" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ipnet."2.8.0" { inherit profileName; }).out; ${ 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.64" { 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.19" { 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.20" { 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.17" { 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.18.0" { 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.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 "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.21.2" { 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.2" { 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.164" { 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.99" { 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.13" { 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.21.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.3" { 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.188" { 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.105" { 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.29.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.32.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.24.1" { 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.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.4.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.87" { 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.37" { 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.64" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && hostPlatform.isWindows then "winreg" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winreg."0.10.1" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") && hostPlatform.isWindows then "winreg" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winreg."0.50.0" { inherit profileName; }).out; }; }); @@ -4251,7 +4286,7 @@ 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.146" { 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.147" { 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.18.0" { 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; @@ -4259,47 +4294,35 @@ in ${ 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; }; buildDependencies = { - cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.79" { profileName = "__noProfile"; }).out; + cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".rmp."0.8.11" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".rmp."0.8.12" = overridableMkRustCrate (profileName: rec { name = "rmp"; - version = "0.8.11"; + version = "0.8.12"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f"; }; + src = fetchCratesIo { inherit name version; sha256 = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20"; }; features = builtins.concatLists [ [ "default" ] [ "std" ] ]; dependencies = { byteorder = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".byteorder."1.4.3" { inherit profileName; }).out; - num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.15" { inherit profileName; }).out; - paste = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".paste."1.0.12" { profileName = "__noProfile"; }).out; - }; - }); - - "registry+https://github.com/rust-lang/crates.io-index".rmp-serde."0.15.5" = overridableMkRustCrate (profileName: rec { - name = "rmp-serde"; - version = "0.15.5"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "723ecff9ad04f4ad92fe1c8ca6c20d2196d9286e9c60727c4cb5511629260e9d"; }; - 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.164" { inherit profileName; }).out; + num_traits = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num-traits."0.2.16" { inherit profileName; }).out; + paste = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".paste."1.0.14" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".rmp-serde."1.1.1" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".rmp-serde."1.1.2" = overridableMkRustCrate (profileName: rec { name = "rmp-serde"; - version = "1.1.1"; + version = "1.1.2"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "c5b13be192e0220b8afb7222aa5813cb62cc269ebb5cac346ca6487681d2913e"; }; + src = fetchCratesIo { inherit name version; sha256 = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a"; }; 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.164" { inherit profileName; }).out; + rmp = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rmp."0.8.12" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); @@ -4318,22 +4341,22 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".rusqlite."0.28.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".rusqlite."0.29.0" = overridableMkRustCrate (profileName: rec { name = "rusqlite"; - version = "0.28.0"; + version = "0.29.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"; }; + src = fetchCratesIo { inherit name version; sha256 = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2"; }; 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") ]; 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 "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.8.3" { 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.10.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "bitflags" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."2.4.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || 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/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "hashlink" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hashlink."0.8.3" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "libsqlite3_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libsqlite3-sys."0.26.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/bundled-libs" || rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sqlite" || rootFeatures' ? "garage_db/bundled-libs" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/rusqlite" || rootFeatures' ? "garage_db/sqlite" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sqlite" then "smallvec" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.11.0" { inherit profileName; }).out; }; }); @@ -4350,31 +4373,28 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"; }; dependencies = { - semver = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".semver."1.0.17" { inherit profileName; }).out; + semver = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".semver."1.0.18" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".rustix."0.37.20" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".rustix."0.38.9" = overridableMkRustCrate (profileName: rec { name = "rustix"; - version = "0.37.20"; + version = "0.38.9"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0"; }; + src = fetchCratesIo { inherit name version; sha256 = "9bfe0f2582b4931a45d1fa608f8a8722e8b3c7ac54dd6d5f3b3212791fedef49"; }; features = builtins.concatLists [ - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "default") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "default") (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "fs") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "io-lifetimes") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "libc") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "use-libc-auxv") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "std") + (lib.optional (rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "termios") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "use-libc-auxv") ]; dependencies = { - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") && (!hostPlatform.isWindows && !(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.isWindows) 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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.11" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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.isWindows && !(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.146" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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.8" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || 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; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" then "bitflags" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bitflags."2.4.0" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && (!hostPlatform.isWindows && !(hostPlatform.parsed.kernel.name == "linux" && 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 == "riscv64" || hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64)) || hostPlatform.isWindows) then "libc_errno" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".errno."0.3.2" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && !hostPlatform.isWindows && !(hostPlatform.parsed.kernel.name == "linux" && 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 == "riscv64" || hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64)) then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && (hostPlatform.parsed.kernel.name == "linux" && 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 == "riscv64" || hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64) || (hostPlatform.parsed.kernel.name == "android" || hostPlatform.parsed.kernel.name == "linux") && !(hostPlatform.parsed.kernel.name == "linux" && 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 == "riscv64" || hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" && hostPlatform.parsed.cpu.bits == 64))) then "linux_raw_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".linux-raw-sys."0.4.5" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") && 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; }; }); @@ -4391,18 +4411,18 @@ in [ "tls12" ] ]; dependencies = { - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; ring = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ring."0.16.20" { inherit profileName; }).out; sct = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sct."0.7.0" { inherit profileName; }).out; webpki = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.22.0" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".rustls."0.21.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".rustls."0.21.6" = overridableMkRustCrate (profileName: rec { name = "rustls"; - version = "0.21.2"; + version = "0.21.6"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f"; }; + src = fetchCratesIo { inherit name version; sha256 = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"; }; features = builtins.concatLists [ (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "dangerous_configuration") (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "default") @@ -4411,9 +4431,9 @@ in [ "tls12" ] ]; dependencies = { - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; ring = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ring."0.16.20" { inherit profileName; }).out; - webpki = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-webpki."0.100.1" { inherit profileName; }).out; + webpki = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-webpki."0.101.4" { inherit profileName; }).out; sct = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sct."0.7.0" { inherit profileName; }).out; }; }); @@ -4425,27 +4445,27 @@ in src = fetchCratesIo { inherit name version; sha256 = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"; }; dependencies = { ${ if hostPlatform.isUnix && !(hostPlatform.parsed.kernel.name == "darwin") then "openssl_probe" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".openssl-probe."0.1.5" { inherit profileName; }).out; - rustls_pemfile = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-pemfile."1.0.2" { inherit profileName; }).out; - ${ if hostPlatform.isWindows then "schannel" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".schannel."0.1.21" { inherit profileName; }).out; - ${ if hostPlatform.parsed.kernel.name == "darwin" then "security_framework" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".security-framework."2.9.1" { inherit profileName; }).out; + rustls_pemfile = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls-pemfile."1.0.3" { inherit profileName; }).out; + ${ if hostPlatform.isWindows then "schannel" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".schannel."0.1.22" { inherit profileName; }).out; + ${ if hostPlatform.parsed.kernel.name == "darwin" then "security_framework" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".security-framework."2.9.2" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".rustls-pemfile."1.0.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".rustls-pemfile."1.0.3" = overridableMkRustCrate (profileName: rec { name = "rustls-pemfile"; - version = "1.0.2"; + version = "1.0.3"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"; }; + src = fetchCratesIo { inherit name version; sha256 = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"; }; dependencies = { - base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.2" { inherit profileName; }).out; + base64 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.21.3" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".rustls-webpki."0.100.1" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".rustls-webpki."0.101.4" = overridableMkRustCrate (profileName: rec { name = "rustls-webpki"; - version = "0.100.1"; + version = "0.101.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"; }; + src = fetchCratesIo { inherit name version; sha256 = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d"; }; features = builtins.concatLists [ [ "alloc" ] [ "default" ] @@ -4457,18 +4477,18 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".rustversion."1.0.12" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".rustversion."1.0.14" = overridableMkRustCrate (profileName: rec { name = "rustversion"; - version = "1.0.12"; + version = "1.0.14"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"; }; + src = fetchCratesIo { inherit name version; sha256 = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.13" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.15" = overridableMkRustCrate (profileName: rec { name = "ryu"; - version = "1.0.13"; + version = "1.0.15"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"; }; + src = fetchCratesIo { inherit name version; sha256 = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"; }; }); "registry+https://github.com/rust-lang/crates.io-index".same-file."1.0.6" = overridableMkRustCrate (profileName: rec { @@ -4481,13 +4501,13 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".schannel."0.1.21" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".schannel."0.1.22" = overridableMkRustCrate (profileName: rec { name = "schannel"; - version = "0.1.21"; + version = "0.1.22"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"; }; + src = fetchCratesIo { inherit name version; sha256 = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"; }; dependencies = { - windows_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.42.0" { inherit profileName; }).out; + windows_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out; }; }); @@ -4502,10 +4522,10 @@ in (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" || rootFeatures' ? "garage_rpc/schemars") "schemars_derive") ]; 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.11" { inherit profileName; }).out; + ${ 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.13" { 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.12" { 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.164" { 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.99" { 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.188" { 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.105" { inherit profileName; }).out; }; }); @@ -4515,18 +4535,18 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c"; }; 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.60" { 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.28" { 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.66" { 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.33" { 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.26.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.109" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.1.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".scopeguard."1.2.0" = overridableMkRustCrate (profileName: rec { name = "scopeguard"; - version = "1.1.0"; + version = "1.2.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"; }; + src = fetchCratesIo { inherit name version; sha256 = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"; }; }); "registry+https://github.com/rust-lang/crates.io-index".sct."0.7.0" = overridableMkRustCrate (profileName: rec { @@ -4551,16 +4571,16 @@ 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.164" { 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.188" { 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.6.0" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".security-framework."2.9.1" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".security-framework."2.9.2" = overridableMkRustCrate (profileName: rec { name = "security-framework"; - version = "2.9.1"; + version = "2.9.2"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"; }; + src = fetchCratesIo { inherit name version; sha256 = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"; }; features = builtins.concatLists [ [ "OSX_10_9" ] [ "default" ] @@ -4569,41 +4589,41 @@ 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.4" { inherit profileName; }).out; - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; - security_framework_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".security-framework-sys."2.9.0" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; + security_framework_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".security-framework-sys."2.9.1" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".security-framework-sys."2.9.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".security-framework-sys."2.9.1" = overridableMkRustCrate (profileName: rec { name = "security-framework-sys"; - version = "2.9.0"; + version = "2.9.1"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"; }; + src = fetchCratesIo { inherit name version; sha256 = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"; }; features = builtins.concatLists [ [ "OSX_10_9" ] ]; dependencies = { core_foundation_sys = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".core-foundation-sys."0.8.4" { inherit profileName; }).out; - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".semver."1.0.17" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".semver."1.0.18" = overridableMkRustCrate (profileName: rec { name = "semver"; - version = "1.0.17"; + version = "1.0.18"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"; }; + src = fetchCratesIo { inherit name version; sha256 = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"; }; features = builtins.concatLists [ [ "default" ] [ "std" ] ]; }); - "registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" = overridableMkRustCrate (profileName: rec { name = "serde"; - version = "1.0.164"; + version = "1.0.188"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"; }; + src = fetchCratesIo { inherit name version; sha256 = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"; }; features = builtins.concatLists [ [ "alloc" ] [ "default" ] @@ -4613,7 +4633,7 @@ in [ "std" ] ]; dependencies = { - serde_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.164" { profileName = "__noProfile"; }).out; + serde_derive = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.188" { profileName = "__noProfile"; }).out; }; }); @@ -4624,36 +4644,36 @@ 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.164" { 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.188" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.9" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".serde_bytes."0.11.12" = overridableMkRustCrate (profileName: rec { name = "serde_bytes"; - version = "0.11.9"; + version = "0.11.12"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294"; }; + src = fetchCratesIo { inherit name version; sha256 = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"; }; features = builtins.concatLists [ [ "default" ] [ "std" ] ]; dependencies = { - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.164" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".serde_derive."1.0.188" = overridableMkRustCrate (profileName: rec { name = "serde_derive"; - version = "1.0.164"; + version = "1.0.188"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"; }; + src = fetchCratesIo { inherit name version; sha256 = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"; }; features = builtins.concatLists [ [ "default" ] ]; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; }; }); @@ -4663,17 +4683,17 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"; }; 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.60" { 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.28" { 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.66" { 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.33" { 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.109" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.99" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".serde_json."1.0.105" = overridableMkRustCrate (profileName: rec { name = "serde_json"; - version = "1.0.99"; + version = "1.0.105"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"; }; + src = fetchCratesIo { inherit name version; sha256 = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"; }; 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" ] @@ -4683,9 +4703,9 @@ in ]; 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."2.0.0" { inherit profileName; }).out; - itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.6" { inherit profileName; }).out; - ryu = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.13" { inherit profileName; }).out; - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; + itoa = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".itoa."1.0.9" { inherit profileName; }).out; + ryu = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ryu."1.0.15" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); @@ -4698,7 +4718,7 @@ in [ "serde" ] ]; dependencies = { - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); @@ -4709,9 +4729,9 @@ in src = fetchCratesIo { inherit name version; sha256 = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"; }; dependencies = { ${ 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.2.0" { 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.6" { 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.13" { 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.164" { 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.9" { 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.15" { 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.188" { inherit profileName; }).out; }; }); @@ -4722,8 +4742,8 @@ in src = fetchCratesIo { inherit name version; sha256 = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"; }; 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.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.13" { 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.164" { 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.15" { 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.188" { 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; }; }); @@ -4739,7 +4759,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.parsed.cpu.name == "aarch64" || hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" then "cpufeatures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cpufeatures."0.2.8" { inherit profileName; }).out; + ${ if hostPlatform.parsed.cpu.name == "aarch64" || hostPlatform.parsed.cpu.name == "i686" || hostPlatform.parsed.cpu.name == "x86_64" then "cpufeatures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cpufeatures."0.2.9" { inherit profileName; }).out; digest = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.10.7" { inherit profileName; }).out; }; }); @@ -4755,7 +4775,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.parsed.cpu.name == "aarch64" || hostPlatform.parsed.cpu.name == "x86_64" || hostPlatform.parsed.cpu.name == "i686" then "cpufeatures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cpufeatures."0.2.8" { inherit profileName; }).out; + ${ if hostPlatform.parsed.cpu.name == "aarch64" || hostPlatform.parsed.cpu.name == "x86_64" || hostPlatform.parsed.cpu.name == "i686" then "cpufeatures" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cpufeatures."0.2.9" { inherit profileName; }).out; digest = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".digest."0.10.7" { inherit profileName; }).out; }; }); @@ -4776,15 +4796,15 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"; }; dependencies = { - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".slab."0.4.8" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".slab."0.4.9" = overridableMkRustCrate (profileName: rec { name = "slab"; - version = "0.4.8"; + version = "0.4.9"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"; }; + src = fetchCratesIo { inherit name version; sha256 = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"; }; features = builtins.concatLists [ [ "default" ] [ "std" ] @@ -4809,17 +4829,17 @@ in ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "crossbeam_utils" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-utils."0.8.16" { inherit profileName; }).out; ${ if (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled") && (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; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "fxhash" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".fxhash."0.2.1" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled" then "parking_lot" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".parking_lot."0.11.2" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".smallvec."1.10.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".smallvec."1.11.0" = overridableMkRustCrate (profileName: rec { name = "smallvec"; - version = "1.10.0"; + version = "1.11.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"; }; + src = fetchCratesIo { inherit name version; sha256 = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"; }; }); "registry+https://github.com/rust-lang/crates.io-index".socket2."0.4.9" = overridableMkRustCrate (profileName: rec { @@ -4831,11 +4851,25 @@ in [ "all" ] ]; dependencies = { - ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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".socket2."0.5.3" = overridableMkRustCrate (profileName: rec { + name = "socket2"; + version = "0.5.3"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { inherit name version; sha256 = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"; }; + 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.147" { inherit profileName; }).out; + ${ if 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".spin."0.5.2" = overridableMkRustCrate (profileName: rec { name = "spin"; version = "0.5.2"; @@ -4864,7 +4898,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.146" { 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.147" { 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.6" { 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; @@ -4882,8 +4916,8 @@ in src = fetchCratesIo { inherit name version; sha256 = "70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acf"; }; dependencies = { memchr = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".memchr."2.5.0" { inherit profileName; }).out; - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.109" { inherit profileName; }).out; }; buildDependencies = { @@ -4918,8 +4952,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.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.109" { inherit profileName; }).out; }; }); @@ -4949,17 +4983,17 @@ in [ "visit" ] ]; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - unicode_ident = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.9" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + unicode_ident = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.11" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" = overridableMkRustCrate (profileName: rec { name = "syn"; - version = "2.0.20"; + version = "2.0.29"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "fcb8d4cebc40aa517dfb69618fa647a346562e67228e2236ae0042ee6ac14775"; }; + src = fetchCratesIo { inherit name version; sha256 = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"; }; features = builtins.concatLists [ [ "clone-impls" ] [ "default" ] @@ -4974,9 +5008,9 @@ in [ "visit-mut" ] ]; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - unicode_ident = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.9" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + unicode_ident = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.11" { inherit profileName; }).out; }; }); @@ -4986,7 +5020,7 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "3dbc01390fc626ce8d1cffe3376ded2b72a11bb70e1c75f404a210e4daa4def2"; }; dependencies = { - ${ if rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/lmdb" then "crossbeam_queue" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-queue."0.3.8" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/default" || rootFeatures' ? "garage/lmdb" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/heed" || rootFeatures' ? "garage_db/lmdb" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/lmdb" then "crossbeam_queue" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".crossbeam-queue."0.3.8" { inherit profileName; }).out; }; }); @@ -5000,43 +5034,25 @@ in [ "proc-macro" ] ]; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."1.0.109" { inherit profileName; }).out; unicode_xid = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".unicode-xid."0.2.4" { 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.2.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.146" { 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.3" { inherit profileName; }).out; - time = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time."0.3.22" { 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.6.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".tempfile."3.8.0" = overridableMkRustCrate (profileName: rec { name = "tempfile"; - version = "3.6.0"; + version = "3.8.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"; }; + src = fetchCratesIo { inherit name version; sha256 = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"; }; 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.9.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."2.0.0" { 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.3.5" { inherit profileName; }).out; - ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && (hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "wasi") then "rustix" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustix."0.37.20" { inherit profileName; }).out; + ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && (hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "wasi") then "rustix" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustix."0.38.9" { inherit profileName; }).out; ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && 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; }; - buildDependencies = { - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "autocfg" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; - }; }); "registry+https://github.com/rust-lang/crates.io-index".termcolor."1.2.0" = overridableMkRustCrate (profileName: rec { @@ -5059,25 +5075,25 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.40" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.47" = overridableMkRustCrate (profileName: rec { name = "thiserror"; - version = "1.0.40"; + version = "1.0.47"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"; }; + src = fetchCratesIo { inherit name version; sha256 = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"; }; dependencies = { - thiserror_impl = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror-impl."1.0.40" { profileName = "__noProfile"; }).out; + thiserror_impl = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror-impl."1.0.47" { profileName = "__noProfile"; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".thiserror-impl."1.0.40" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".thiserror-impl."1.0.47" = overridableMkRustCrate (profileName: rec { name = "thiserror-impl"; - version = "1.0.40"; + version = "1.0.47"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"; }; + src = fetchCratesIo { inherit name version; sha256 = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"; }; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; }; }); @@ -5098,17 +5114,17 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"; }; dependencies = { - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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; }; }); - "registry+https://github.com/rust-lang/crates.io-index".time."0.3.22" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".time."0.3.28" = overridableMkRustCrate (profileName: rec { name = "time"; - version = "0.3.22"; + version = "0.3.28"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd"; }; + src = fetchCratesIo { inherit name version; sha256 = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48"; }; features = builtins.concatLists [ [ "alloc" ] [ "default" ] @@ -5116,9 +5132,10 @@ in [ "std" ] ]; dependencies = { - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; + deranged = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".deranged."0.3.8" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; time_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".time-core."0.1.1" { inherit profileName; }).out; - time_macros = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".time-macros."0.2.9" { profileName = "__noProfile"; }).out; + time_macros = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".time-macros."0.2.14" { profileName = "__noProfile"; }).out; }; }); @@ -5129,11 +5146,11 @@ in src = fetchCratesIo { inherit name version; sha256 = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".time-macros."0.2.9" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".time-macros."0.2.14" = overridableMkRustCrate (profileName: rec { name = "time-macros"; - version = "0.2.9"; + version = "0.2.14"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"; }; + src = fetchCratesIo { inherit name version; sha256 = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572"; }; features = builtins.concatLists [ [ "parsing" ] ]; @@ -5171,11 +5188,11 @@ in src = fetchCratesIo { inherit name version; sha256 = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" = overridableMkRustCrate (profileName: rec { name = "tokio"; - version = "1.29.0"; + version = "1.32.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "374442f06ee49c3a28a8fc9f01a2596fed7559c6b99b31279c3261778e77d84f"; }; + src = fetchCratesIo { inherit name version; sha256 = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"; }; features = builtins.concatLists [ [ "bytes" ] [ "default" ] @@ -5201,21 +5218,18 @@ in [ "windows-sys" ] ]; dependencies = { - ${ if false then "backtrace" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".backtrace."0.3.67" { inherit profileName; }).out; + ${ if false then "backtrace" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".backtrace."0.3.69" { inherit profileName; }).out; bytes = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; - ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + ${ if hostPlatform.isUnix then "libc" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; mio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mio."0.8.8" { inherit profileName; }).out; - num_cpus = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.15.0" { inherit profileName; }).out; + num_cpus = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".num_cpus."1.16.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.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; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { 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.1" { 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; + socket2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".socket2."0.5.3" { inherit profileName; }).out; tokio_macros = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio-macros."2.1.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.48.0" { inherit profileName; }).out; }; - buildDependencies = { - autocfg = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".autocfg."1.1.0" { profileName = "__noProfile"; }).out; - }; }); "registry+https://github.com/rust-lang/crates.io-index".tokio-io-timeout."1.2.0" = overridableMkRustCrate (profileName: rec { @@ -5224,8 +5238,8 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; 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.29.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 "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { 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.32.0" { inherit profileName; }).out; }; }); @@ -5235,9 +5249,9 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"; }; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; }; }); @@ -5252,7 +5266,7 @@ in ]; dependencies = { rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.20.8" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; webpki = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".webpki."0.22.0" { inherit profileName; }).out; }; }); @@ -5268,8 +5282,8 @@ in [ "tls12" ] ]; dependencies = { - rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.21.2" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + rustls = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rustls."0.21.6" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; }; }); @@ -5285,8 +5299,8 @@ in ]; dependencies = { futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { 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.29.0" { inherit profileName; }).out; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; }; }); @@ -5303,9 +5317,9 @@ in ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_sink" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.28" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" 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/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tokio" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "log" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "pin_project_lite" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { 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.32.0" { inherit profileName; }).out; }; }); @@ -5329,9 +5343,9 @@ in futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; futures_io = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-io."0.3.28" { inherit profileName; }).out; futures_sink = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-sink."0.3.28" { 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.8" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { inherit profileName; }).out; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { 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.9" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.0" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); @@ -5347,7 +5361,7 @@ in [ "parse" ] ]; dependencies = { - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; serde_spanned = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_spanned."0.6.3" { 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; @@ -5363,7 +5377,7 @@ in [ "serde" ] ]; dependencies = { - serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.164" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; }; }); @@ -5379,7 +5393,7 @@ in dependencies = { 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.164" { inherit profileName; }).out; + serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.188" { inherit profileName; }).out; serde_spanned = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde_spanned."0.6.3" { inherit profileName; }).out; toml_datetime = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".toml_datetime."0.5.1" { inherit profileName; }).out; }; @@ -5407,21 +5421,21 @@ in ]; dependencies = { ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_stream" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".async-stream."0.3.5" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_trait" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.68" { profileName = "__noProfile"; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "async_trait" else null } = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".async-trait."0.1.73" { profileName = "__noProfile"; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "base64" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.13.1" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "bytes" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bytes."1.4.0" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_core" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "h2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".h2."0.3.19" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "h2" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".h2."0.3.21" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "http" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."0.2.9" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "http_body" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "hyper" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.26" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "hyper" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper."0.14.27" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "hyper_timeout" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".hyper-timeout."0.4.1" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "percent_encoding" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".percent-encoding."2.3.0" { inherit profileName; }).out; - ${ 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.1.0" { inherit profileName; }).out; + ${ 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.1.3" { 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.29.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.32.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.14" { 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.10" { 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.13" { inherit profileName; }).out; @@ -5443,9 +5457,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.60" { 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.66" { 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.28" { 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.33" { 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.109" { inherit profileName; }).out; }; }); @@ -5485,11 +5499,11 @@ in futures_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-core."0.3.28" { inherit profileName; }).out; futures_util = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { 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.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; + pin_project = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project."1.1.3" { inherit profileName; }).out; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { 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.8" { inherit profileName; }).out; - tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.29.0" { 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.9" { inherit profileName; }).out; + tokio = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.32.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.8" { inherit profileName; }).out; tower_layer = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-layer."0.3.2" { inherit profileName; }).out; tower_service = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.2" { inherit profileName; }).out; @@ -5518,8 +5532,8 @@ in ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "futures_util" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".futures-util."0.3.28" { inherit profileName; }).out; ${ 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.9" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http_body" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-body."0.4.5" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http_range_header" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-range-header."0.3.0" { inherit profileName; }).out; - ${ if rootFeatures' ? "garage/kubernetes-discovery" || 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_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "http_range_header" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http-range-header."0.3.1" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/kubernetes-discovery" || 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.13" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tower_layer" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-layer."0.3.2" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery" then "tower_service" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tower-service."0.3.2" { 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.37" { inherit profileName; }).out; @@ -5554,8 +5568,8 @@ in ]; dependencies = { cfg_if = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" { inherit profileName; }).out; - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { 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; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; + pin_project_lite = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".pin-project-lite."0.2.13" { inherit profileName; }).out; tracing_attributes = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-attributes."0.1.26" { profileName = "__noProfile"; }).out; tracing_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-core."0.1.31" { inherit profileName; }).out; }; @@ -5567,9 +5581,9 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"; }; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; }; }); @@ -5602,7 +5616,7 @@ in (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") "std-future") ]; dependencies = { - ${ 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.1.0" { inherit profileName; }).out; + ${ 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.1.3" { inherit profileName; }).out; ${ if rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" then "tracing" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; }; }); @@ -5618,7 +5632,7 @@ in ]; dependencies = { 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.19" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; tracing_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-core."0.1.31" { inherit profileName; }).out; }; }); @@ -5650,9 +5664,9 @@ in matchers = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".matchers."0.1.0" { inherit profileName; }).out; nu_ansi_term = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".nu-ansi-term."0.46.0" { inherit profileName; }).out; once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.18.0" { inherit profileName; }).out; - regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.8.4" { inherit profileName; }).out; + regex = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".regex."1.9.4" { inherit profileName; }).out; sharded_slab = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".sharded-slab."0.1.4" { inherit profileName; }).out; - smallvec = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.10.0" { inherit profileName; }).out; + smallvec = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".smallvec."1.11.0" { inherit profileName; }).out; thread_local = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thread_local."1.1.7" { inherit profileName; }).out; tracing = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.37" { inherit profileName; }).out; tracing_core = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-core."0.1.31" { inherit profileName; }).out; @@ -5670,7 +5684,7 @@ in (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "with-serde-json") ]; dependencies = { - ${ 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.99" { 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.105" { inherit profileName; }).out; }; }); @@ -5694,17 +5708,16 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"; }; features = builtins.concatLists [ - [ "default" ] [ "hardcoded-data" ] [ "std" ] ]; }); - "registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.9" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".unicode-ident."1.0.11" = overridableMkRustCrate (profileName: rec { name = "unicode-ident"; - version = "1.0.9"; + version = "1.0.11"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"; }; + src = fetchCratesIo { inherit name version; sha256 = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"; }; }); "registry+https://github.com/rust-lang/crates.io-index".unicode-normalization."0.1.22" = overridableMkRustCrate (profileName: rec { @@ -5713,7 +5726,6 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"; }; features = builtins.concatLists [ - [ "default" ] [ "std" ] ]; dependencies = { @@ -5770,11 +5782,11 @@ in }; }); - "registry+https://github.com/rust-lang/crates.io-index".urlencoding."2.1.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".urlencoding."2.1.3" = overridableMkRustCrate (profileName: rec { name = "urlencoding"; - version = "2.1.2"; + version = "2.1.3"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9"; }; + src = fetchCratesIo { inherit name version; sha256 = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"; }; }); "registry+https://github.com/rust-lang/crates.io-index".utf8parse."0.2.1" = overridableMkRustCrate (profileName: rec { @@ -5910,11 +5922,11 @@ in ]; dependencies = { bumpalo = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bumpalo."3.13.0" { inherit profileName; }).out; - log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.19" { inherit profileName; }).out; + log = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".log."0.4.20" { inherit profileName; }).out; once_cell = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.18.0" { inherit profileName; }).out; - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; wasm_bindgen_shared = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.87" { inherit profileName; }).out; }; }); @@ -5941,7 +5953,7 @@ in [ "spans" ] ]; dependencies = { - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; wasm_bindgen_macro_support = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro-support."0.2.87" { inherit profileName; }).out; }; }); @@ -5955,9 +5967,9 @@ in [ "spans" ] ]; dependencies = { - proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.60" { inherit profileName; }).out; - quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.28" { inherit profileName; }).out; - syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.20" { inherit profileName; }).out; + proc_macro2 = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".proc-macro2."1.0.66" { inherit profileName; }).out; + quote = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".quote."1.0.33" { inherit profileName; }).out; + syn = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.29" { inherit profileName; }).out; wasm_bindgen_backend = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-backend."0.2.87" { inherit profileName; }).out; wasm_bindgen_shared = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.87" { inherit profileName; }).out; }; @@ -6025,8 +6037,8 @@ in registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; sha256 = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"; }; 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.8.1" { 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.146" { inherit profileName; }).out; + ${ 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.9.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.147" { inherit profileName; }).out; ${ if (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp") && hostPlatform.isWindows then "once_cell" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.18.0" { inherit profileName; }).out; }; }); @@ -6041,8 +6053,6 @@ in [ "errhandlingapi" ] [ "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") (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "knownfolders") [ "minwinbase" ] [ "minwindef" ] @@ -6050,7 +6060,6 @@ in [ "ntsecapi" ] [ "ntstatus" ] (lib.optional (rootFeatures' ? "garage/kubernetes-discovery" || rootFeatures' ? "garage_rpc/kube" || rootFeatures' ? "garage_rpc/kubernetes-discovery") "objbase") - [ "pdh" ] [ "processenv" ] (lib.optional (rootFeatures' ? "garage/default" || rootFeatures' ? "garage/sled" || rootFeatures' ? "garage_db/default" || rootFeatures' ? "garage_db/sled" || rootFeatures' ? "garage_model/default" || rootFeatures' ? "garage_model/sled") "processthreadsapi") [ "profileapi" ] @@ -6063,9 +6072,7 @@ in [ "wincon" ] [ "winerror" ] [ "winnt" ] - (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "winreg") [ "winsock2" ] - [ "ws2def" ] [ "ws2ipdef" ] [ "ws2tcpip" ] [ "wtypesbase" ] @@ -6110,35 +6117,7 @@ in [ "default" ] ]; dependencies = { - windows_targets = (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-sys."0.42.0" = overridableMkRustCrate (profileName: rec { - name = "windows-sys"; - version = "0.42.0"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"; }; - features = builtins.concatLists [ - [ "Win32" ] - [ "Win32_Foundation" ] - [ "Win32_Security" ] - [ "Win32_Security_Authentication" ] - [ "Win32_Security_Authentication_Identity" ] - [ "Win32_Security_Credentials" ] - [ "Win32_Security_Cryptography" ] - [ "Win32_System" ] - [ "Win32_System_Memory" ] - [ "default" ] - ]; - 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; + windows_targets = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.5" { inherit profileName; }).out; }; }); @@ -6150,150 +6129,109 @@ in features = builtins.concatLists [ [ "Win32" ] [ "Win32_Foundation" ] - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_NetworkManagement") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_NetworkManagement_IpHelper") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "Win32_NetworkManagement") + (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger") "Win32_NetworkManagement_IpHelper") [ "Win32_Networking" ] [ "Win32_Networking_WinSock" ] [ "Win32_Security" ] + [ "Win32_Security_Authentication" ] + [ "Win32_Security_Authentication_Identity" ] + [ "Win32_Security_Credentials" ] + [ "Win32_Security_Cryptography" ] [ "Win32_Storage" ] [ "Win32_Storage_FileSystem" ] [ "Win32_System" ] [ "Win32_System_Console" ] - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System_Diagnostics") - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System_Diagnostics_Debug") + (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "Win32_System_Diagnostics") + (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "garage_db/pretty_env_logger" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "Win32_System_Diagnostics_Debug") [ "Win32_System_IO" ] + [ "Win32_System_Memory" ] [ "Win32_System_Pipes" ] + (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "Win32_System_Registry") [ "Win32_System_SystemServices" ] - (lib.optional (rootFeatures' ? "garage/opentelemetry-otlp" || rootFeatures' ? "garage/telemetry-otlp" || rootFeatures' ? "garage_db/clap" || rootFeatures' ? "garage_db/cli" || rootFeatures' ? "k2v-client/clap" || rootFeatures' ? "k2v-client/cli") "Win32_System_Threading") + [ "Win32_System_Threading" ] + (lib.optional (rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest") "Win32_System_Time") [ "Win32_System_WindowsProgramming" ] [ "default" ] ]; dependencies = { - windows_targets = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.0" { inherit profileName; }).out; + windows_targets = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.5" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".windows-targets."0.48.5" = overridableMkRustCrate (profileName: rec { name = "windows-targets"; - version = "0.48.0"; + version = "0.48.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"; }; + src = fetchCratesIo { inherit name version; sha256 = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"; }; 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 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 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 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 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 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; + ${ 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.48.5" { inherit profileName; }).out; + ${ if 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.5" { inherit profileName; }).out; + ${ if 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.5" { inherit profileName; }).out; + ${ if 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.5" { inherit profileName; }).out; + ${ if 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.5" { 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.48.5" { inherit profileName; }).out; + ${ if 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.5" { 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 { + "registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_gnullvm."0.48.5" = overridableMkRustCrate (profileName: rec { name = "windows_aarch64_gnullvm"; - version = "0.48.0"; + version = "0.48.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"; }; + src = fetchCratesIo { inherit name version; sha256 = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_msvc."0.42.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".windows_aarch64_msvc."0.48.5" = overridableMkRustCrate (profileName: rec { name = "windows_aarch64_msvc"; - version = "0.42.2"; + version = "0.48.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"; }; + src = fetchCratesIo { inherit name version; sha256 = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"; }; }); - "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.42.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".windows_i686_gnu."0.48.5" = 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.42.2" = overridableMkRustCrate (profileName: rec { - name = "windows_i686_msvc"; - version = "0.42.2"; + version = "0.48.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"; }; + src = fetchCratesIo { inherit name version; sha256 = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".windows_i686_msvc."0.48.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".windows_i686_msvc."0.48.5" = 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.42.2" = overridableMkRustCrate (profileName: rec { - name = "windows_x86_64_gnu"; - version = "0.42.2"; + version = "0.48.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"; }; + src = fetchCratesIo { inherit name version; sha256 = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnu."0.48.0" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnu."0.48.5" = overridableMkRustCrate (profileName: rec { name = "windows_x86_64_gnu"; - version = "0.48.0"; + version = "0.48.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"; }; + src = fetchCratesIo { inherit name version; sha256 = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"; }; }); - "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnullvm."0.42.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_gnullvm."0.48.5" = overridableMkRustCrate (profileName: rec { name = "windows_x86_64_gnullvm"; - version = "0.42.2"; + version = "0.48.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"; }; + src = fetchCratesIo { inherit name version; sha256 = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"; }; }); - "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.42.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".windows_x86_64_msvc."0.48.5" = overridableMkRustCrate (profileName: rec { name = "windows_x86_64_msvc"; - version = "0.42.2"; + version = "0.48.5"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"; }; + src = fetchCratesIo { inherit name version; sha256 = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"; }; }); - "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 { + "registry+https://github.com/rust-lang/crates.io-index".winreg."0.50.0" = overridableMkRustCrate (profileName: rec { name = "winreg"; - version = "0.10.1"; + version = "0.50.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"; }; + src = fetchCratesIo { inherit name version; sha256 = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"; }; dependencies = { - ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "winapi" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".winapi."0.3.9" { inherit profileName; }).out; + ${ if rootFeatures' ? "garage/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" 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/consul-discovery" || rootFeatures' ? "garage_rpc/consul-discovery" || rootFeatures' ? "garage_rpc/reqwest" then "windows_sys" else null } = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".windows-sys."0.48.0" { inherit profileName; }).out; }; }); @@ -6339,30 +6277,30 @@ in ]; }); - "registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.3+zstd.1.5.2" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".zstd."0.12.4" = overridableMkRustCrate (profileName: rec { name = "zstd"; - version = "0.12.3+zstd.1.5.2"; + version = "0.12.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"; }; + src = fetchCratesIo { inherit name version; sha256 = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"; }; 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."6.0.5+zstd.1.5.4" { inherit profileName; }).out; + zstd_safe = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".zstd-safe."6.0.6" { inherit profileName; }).out; }; }); - "registry+https://github.com/rust-lang/crates.io-index".zstd-safe."6.0.5+zstd.1.5.4" = overridableMkRustCrate (profileName: rec { + "registry+https://github.com/rust-lang/crates.io-index".zstd-safe."6.0.6" = overridableMkRustCrate (profileName: rec { name = "zstd-safe"; - version = "6.0.5+zstd.1.5.4"; + version = "6.0.6"; registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { inherit name version; sha256 = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"; }; + src = fetchCratesIo { inherit name version; sha256 = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"; }; 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.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { 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; }; }); @@ -6377,10 +6315,10 @@ in [ "std" ] ]; dependencies = { - libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.146" { inherit profileName; }).out; + libc = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.147" { inherit profileName; }).out; }; buildDependencies = { - cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.79" { profileName = "__noProfile"; }).out; + cc = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".cc."1.0.83" { profileName = "__noProfile"; }).out; pkg_config = (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".pkg-config."0.3.27" { profileName = "__noProfile"; }).out; }; }); @@ -18,14 +18,14 @@ default-members = ["src/garage"] [workspace.dependencies] format_table = { version = "0.1.1", path = "src/format-table" } -garage_api = { version = "0.8.2", path = "src/api" } -garage_block = { version = "0.8.2", path = "src/block" } -garage_db = { version = "0.8.2", path = "src/db", default-features = false } -garage_model = { version = "0.8.2", path = "src/model", default-features = false } -garage_rpc = { version = "0.8.2", path = "src/rpc" } -garage_table = { version = "0.8.2", path = "src/table" } -garage_util = { version = "0.8.2", path = "src/util" } -garage_web = { version = "0.8.2", path = "src/web" } +garage_api = { version = "0.9.0", path = "src/api" } +garage_block = { version = "0.9.0", path = "src/block" } +garage_db = { version = "0.9.0", path = "src/db", default-features = false } +garage_model = { version = "0.9.0", path = "src/model", default-features = false } +garage_rpc = { version = "0.9.0", path = "src/rpc" } +garage_table = { version = "0.9.0", path = "src/table" } +garage_util = { version = "0.9.0", path = "src/util" } +garage_web = { version = "0.9.0", path = "src/web" } k2v-client = { version = "0.0.4", path = "src/k2v-client" } [profile.dev] diff --git a/doc/api/garage-admin-v1.html b/doc/api/garage-admin-v1.html new file mode 100644 index 00000000..783d459e --- /dev/null +++ b/doc/api/garage-admin-v1.html @@ -0,0 +1,24 @@ +<!DOCTYPE html> +<html> + <head> + <title>Garage Adminstration API v0</title> + <!-- needed for adaptive design --> + <meta charset="utf-8"/> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link href="./css/redoc.css" rel="stylesheet"> + + <!-- + Redoc doesn't change outer page styles + --> + <style> + body { + margin: 0; + padding: 0; + } + </style> + </head> + <body> + <redoc spec-url='./garage-admin-v1.yml'></redoc> + <script src="./redoc.standalone.js"> </script> + </body> +</html> diff --git a/doc/api/garage-admin-v1.yml b/doc/api/garage-admin-v1.yml new file mode 100644 index 00000000..fd78feb1 --- /dev/null +++ b/doc/api/garage-admin-v1.yml @@ -0,0 +1,1363 @@ +openapi: 3.0.0 +info: + version: v0.9.0 + title: Garage Administration API v0+garage-v0.9.0 + description: | + Administrate your Garage cluster programatically, including status, layout, keys, buckets, and maintainance tasks. + + *Disclaimer: The API is not stable yet, hence its v0 tag. The API can change at any time, and changes can include breaking backward compatibility. Read the changelog and upgrade your scripts before upgrading. Additionnaly, this specification is very early stage and can contain bugs, especially on error return codes/types that are not tested yet. Do not expect a well finished and polished product!* +paths: + /health: + get: + tags: + - Nodes + operationId: "GetHealth" + summary: "Cluster health report" + description: | + Returns the global status of the cluster, the number of connected nodes (over the number of known ones), the number of healthy storage nodes (over the declared ones), and the number of healthy partitions (over the total). + responses: + '500': + description: | + The server can not answer your request because it is in a bad state + '200': + description: | + Information about the queried node, its environment and the current layout + content: + application/json: + schema: + type: object + required: [ status, knownNodes, connectedNodes, storageNodes, storageNodesOk, partitions, partitionsQuorum, partitionsAllOk ] + properties: + status: + type: string + example: "healthy" + knownNodes: + type: integer + format: int64 + example: 4 + connectedNodes: + type: integer + format: int64 + example: 4 + storageNodes: + type: integer + format: int64 + example: 3 + storageNodesOk: + type: integer + format: int64 + example: 3 + partitions: + type: integer + format: int64 + example: 256 + partitionsQuorum: + type: integer + format: int64 + example: 256 + partitionsAllOk: + type: integer + format: int64 + example: 256 + /status: + get: + tags: + - Nodes + operationId: "GetNodes" + summary: "Describe cluster" + description: | + Returns the cluster's current status, including: + - ID of the node being queried and its version of the Garage daemon + - Live nodes + - Currently configured cluster layout + - Staged changes to the cluster layout + + *Capacity is given in bytes* + responses: + '500': + description: | + The server can not answer your request because it is in a bad state + '200': + description: | + Information about the queried node, its environment and the current layout + content: + application/json: + schema: + type: object + required: [ node, garageVersion, garageFeatures, rustVersion, dbEngine, knownNodes, layout ] + properties: + node: + type: string + example: "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f" + garageVersion: + type: string + example: "v0.9.0" + garageFeatures: + type: array + items: + type: string + example: + - "k2v" + - "sled" + - "lmdb" + - "sqlite" + - "consul-discovery" + - "kubernetes-discovery" + - "metrics" + - "telemetry-otlp" + - "bundled-libs" + rustVersion: + type: string + example: "1.68.0" + dbEngine: + type: string + example: "LMDB (using Heed crate)" + knownNodes: + type: array + example: + - id: "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f" + addr: "10.0.0.11:3901" + isUp: true + lastSeenSecsAgo: 9 + hostname: orion + - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" + addr: "10.0.0.12:3901" + isUp: true + lastSeenSecsAgo: 13 + hostname: pegasus + - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" + addr: "10.0.0.13:3901" + isUp: true + lastSeenSecsAgo: 2 + hostname: neptune + items: + $ref: '#/components/schemas/NodeNetworkInfo' + layout: + $ref: '#/components/schemas/ClusterLayout' + + /connect: + post: + tags: + - Nodes + operationId: "AddNode" + summary: "Connect a new node" + description: | + Instructs this Garage node to connect to other Garage nodes at specified `<node_id>@<net_address>`. `node_id` is generated automatically on node start. + requestBody: + required: true + content: + application/json: + schema: + type: array + example: + - "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f@10.0.0.11:3901" + - "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff@10.0.0.12:3901" + items: + type: string + + responses: + '500': + description: | + The server can not answer your request because it is in a bad state + '400': + description: | + Your request is malformed, check your JSON + '200': + description: | + The request has been handled correctly but it does not mean that all connection requests succeeded; some might have fail, you need to check the body! + content: + application/json: + schema: + type: array + example: + - success: true + error: + - success: false + error: "Handshake error" + items: + type: object + properties: + success: + type: boolean + example: true + error: + type: string + nullable: true + example: null + + /layout: + get: + tags: + - Layout + operationId: "GetLayout" + summary: "Details on the current and staged layout" + description: | + Returns the cluster's current layout, including: + - Currently configured cluster layout + - Staged changes to the cluster layout + + *Capacity is given in bytes* + *The info returned by this endpoint is a subset of the info returned by `GET /status`.* + responses: + '500': + description: | + The server can not answer your request because it is in a bad state + '200': + description: | + Returns the cluster's current cluster layout: + - Currently configured cluster layout + - Staged changes to the cluster layout + content: + application/json: + schema: + $ref: '#/components/schemas/ClusterLayout' + + post: + tags: + - Layout + operationId: "AddLayout" + summary: "Send modifications to the cluster layout" + description: | + Send modifications to the cluster layout. These modifications will be included in the staged role changes, visible in subsequent calls of `GET /layout`. Once the set of staged changes is satisfactory, the user may call `POST /layout/apply` to apply the changed changes, or `POST /layout/revert` to clear all of the staged changes in the layout. + + Setting the capacity to `null` will configure the node as a gateway. + Otherwise, capacity must be now set in bytes (before Garage 0.9 it was arbitrary weights). + For example to declare 100GB, you must set `capacity: 100000000000`. + + Garage uses internally the International System of Units (SI), it assumes that 1kB = 1000 bytes, and displays storage as kB, MB, GB (and not KiB, MiB, GiB that assume 1KiB = 1024 bytes). + requestBody: + description: | + To add a new node to the layout or to change the configuration of an existing node, simply set the values you want (`zone`, `capacity`, and `tags`). + To remove a node, simply pass the `remove: true` field. + This logic is represented in OpenAPI with a "One Of" object. + + Contrary to the CLI that may update only a subset of the fields capacity, zone and tags, when calling this API all of these values must be specified. + required: true + content: + application/json: + schema: + type: array + example: + - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" + zone: "geneva" + capacity: 100000000000 + tags: + - gateway + - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" + remove: true + items: + $ref: '#/components/schemas/NodeRoleChange' + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The layout modification has been correctly staged" + content: + application/json: + schema: + $ref: '#/components/schemas/ClusterLayout' + + /layout/apply: + post: + tags: + - Layout + operationId: "ApplyLayout" + summary: "Apply staged layout" + description: | + Applies to the cluster the layout changes currently registered as staged layout changes. + + *Note: do not try to parse the `message` field of the response, it is given as an array of string specifically because its format is not stable.* + requestBody: + description: | + Similarly to the CLI, the body must include the version of the new layout that will be created, which MUST be 1 + the value of the currently existing layout in the cluster. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LayoutVersion' + + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The staged layout has been applied as the new layout of the cluster, a rebalance has been triggered." + content: + application/json: + schema: + type: object + required: [ message, layout ] + properties: + message: + type: array + items: + type: string + example: + - "==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====" + - "" + - "Partitions are replicated 1 times on at least 1 distinct zones." + - "" + - "Optimal partition size: 419.4 MB (3 B in previous layout)" + - "Usable capacity / total cluster capacity: 107.4 GB / 107.4 GB (100.0 %)" + - "Effective capacity (replication factor 1): 107.4 GB" + - "" + - "A total of 0 new copies of partitions need to be transferred." + - "" + - "dc1 Tags Partitions Capacity Usable capacity\n 6a8e08af2aab1083 a,v 256 (0 new) 107.4 GB 107.4 GB (100.0%)\n TOTAL 256 (256 unique) 107.4 GB 107.4 GB (100.0%)\n\n" + layout: + $ref: '#/components/schemas/ClusterLayout' + + + /layout/revert: + post: + tags: + - Layout + operationId: "RevertLayout" + summary: "Clear staged layout" + description: | + Clears all of the staged layout changes. + requestBody: + description: | + Reverting the staged changes is done by incrementing the version number and clearing the contents of the staged change list. Similarly to the CLI, the body must include the incremented version number, which MUST be 1 + the value of the currently existing layout in the cluster. + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LayoutVersion' + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The staged layout has been cleared, you can start again sending modification from a fresh copy with `POST /layout`." + + "/key?list": + get: + tags: + - Key + operationId: "ListKeys" + summary: "List all keys" + description: | + Returns all API access keys in the cluster. + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: | + Returns the key identifier (aka `AWS_ACCESS_KEY_ID`) and its associated, human friendly, name if any (otherwise return an empty string) + content: + application/json: + schema: + type: array + example: + - id: "GK31c2f218a2e44f485b94239e" + name: "test-key" + - id: "GKe10061ac9c2921f09e4c5540" + name: "" + items: + type: object + required: [ id ] + properties: + id: + type: string + name: + type: string + post: + tags: + - Key + operationId: "AddKey" + summary: "Create a new API key" + description: | + Creates a new API access key. + requestBody: + description: | + You can set a friendly name for this key. + If you don't want to, you can set the name to `null`. + + *Note: the secret key is returned in the response.* + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + nullable: true + example: "test-key" + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The key has been added" + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + "/key": + get: + tags: + - Key + operationId: "GetKey" + summary: "Get key information" + description: | + Return information about a specific key like its identifiers, its permissions and buckets on which it has permissions. + You can search by specifying the exact key identifier (`id`) or by specifying a pattern (`search`). + + For confidentiality reasons, the secret key is not returned by default: you must pass the `showSecretKey` query parameter to get it. + parameters: + - name: id + in: query + description: | + The exact API access key generated by Garage. + + Incompatible with `search`. + example: "GK31c2f218a2e44f485b94239e" + schema: + type: string + - name: search + in: query + description: | + A pattern (beginning or full string) corresponding to a key identifier or friendly name. + + Incompatible with `id`. + example: "test-k" + schema: + type: string + - name: showSecretKey + in: query + schema: + type: string + default: "false" + enum: + - "true" + - "false" + example: "true" + required: false + description: "Wether or not the secret key should be returned in the response" + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: | + Returns information about the key + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + delete: + tags: + - Key + operationId: "DeleteKey" + summary: "Delete a key" + description: | + Delete a key from the cluster. Its access will be removed from all the buckets. Buckets are not automatically deleted and can be dangling. You should manually delete them before. + parameters: + - name: id + in: query + required: true + description: "The exact API access key generated by Garage" + example: "GK31c2f218a2e44f485b94239e" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: "The key has been deleted" + + + post: + tags: + - Key + operationId: "UpdateKey" + summary: "Update a key" + description: | + Updates information about the specified API access key. + + *Note: the secret key is not returned in the response, `null` is sent instead.* + parameters: + - name: id + in: query + required: true + description: "The exact API access key generated by Garage" + example: "GK31c2f218a2e44f485b94239e" + schema: + type: string + requestBody: + description: | + For a given key, provide a first set with the permissions to grant, and a second set with the permissions to remove + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + example: "test-key" + allow: + type: object + example: + properties: + createBucket: + type: boolean + example: true + deny: + type: object + properties: + createBucket: + type: boolean + example: true + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: | + Returns information about the key + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + + /key/import: + post: + tags: + - Key + operationId: "ImportKey" + summary: "Import an existing key" + description: | + Imports an existing API key. This feature must only be used for migrations and backup restore. + + **Do not use it to generate custom key identifiers or you will break your Garage cluster.** + requestBody: + description: | + Information on the key to import + required: true + content: + application/json: + schema: + type: object + required: [ name, accessKeyId, secretAccessKey ] + properties: + name: + type: string + example: "test-key" + nullable: true + accessKeyId: + type: string + example: "GK31c2f218a2e44f485b94239e" + secretAccessKey: + type: string + example: "b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835" + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Invalid syntax or requested change" + '200': + description: "The key has been imported into the system" + content: + application/json: + schema: + $ref: '#/components/schemas/KeyInfo' + + "/bucket?list": + get: + tags: + - Bucket + operationId: "ListBuckets" + summary: "List all buckets" + description: | + List all the buckets on the cluster with their UUID and their global and local aliases. + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '200': + description: | + Returns the UUID of the bucket and all its aliases + content: + application/json: + schema: + type: array + example: + - id: "70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033" + globalAliases: + - "container_registry" + - id: "96470e0df00ec28807138daf01915cfda2bee8eccc91dea9558c0b4855b5bf95" + localAliases: + - alias: "my_documents" + accessKeyid: "GK31c2f218a2e44f485b94239e" + - id: "d7452a935e663fc1914f3a5515163a6d3724010ce8dfd9e4743ca8be5974f995" + globalAliases: + - "example.com" + - "www.example.com" + localAliases: + - alias: "corp_website" + accessKeyId: "GKe10061ac9c2921f09e4c5540" + - alias: "web" + accessKeyid: "GK31c2f218a2e44f485b94239e" + - id: "" + items: + type: object + required: [ id ] + properties: + id: + type: string + globalAliases: + type: array + items: + type: string + localAliases: + type: array + items: + type: object + required: [ alias, accessKeyId ] + properties: + alias: + type: string + accessKeyId: + type: string + + /bucket: + post: + tags: + - Bucket + operationId: "CreateBucket" + summary: "Create a bucket" + description: | + Creates a new bucket, either with a global alias, a local one, or no alias at all. + Technically, you can also specify both `globalAlias` and `localAlias` and that would create two aliases. + requestBody: + description: | + Aliases to put on the new bucket + required: true + content: + application/json: + schema: + type: object + required: [ ] + properties: + globalAlias: + type: string + example: "my_documents" + localAlias: + type: object + properties: + accessKeyId: + type: string + alias: + type: string + allow: + type: object + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: true + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "The payload is not formatted correctly" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + get: + tags: + - Bucket + operationId: "GetBucketInfo" + summary: "Get a bucket" + description: | + Given a bucket identifier (`id`) or a global alias (`alias`), get its information. + It includes its aliases, its web configuration, keys that have some permissions + on it, some statistics (number of objects, size), number of dangling multipart uploads, + and its quotas (if any). + parameters: + - name: id + in: query + description: | + The exact bucket identifier, a 32 bytes hexadecimal string. + + Incompatible with `alias`. + example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" + schema: + type: string + - name: alias + in: query + description: | + The exact global alias of one of the existing buckets. + + Incompatible with `id`. + example: "my_documents" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + + delete: + tags: + - Bucket + operationId: "DeleteBucket" + summary: "Delete a bucket" + description: | + Delete a bucket.Deletes a storage bucket. A bucket cannot be deleted if it is not empty. + + **Warning:** this will delete all aliases associated with the bucket! + parameters: + - name: id + in: query + required: true + description: "The exact bucket identifier, a 32 bytes hexadecimal string" + example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bucket is not empty" + '404': + description: "Bucket not found" + '204': + description: Bucket has been deleted + + + + put: + tags: + - Bucket + operationId: "UpdateBucket" + summary: "Update a bucket" + description: | + All fields (`websiteAccess` and `quotas`) are optional. + If they are present, the corresponding modifications are applied to the bucket, otherwise nothing is changed. + + In `websiteAccess`: if `enabled` is `true`, `indexDocument` must be specified. + The field `errorDocument` is optional, if no error document is set a generic + error message is displayed when errors happen. Conversely, if `enabled` is + `false`, neither `indexDocument` nor `errorDocument` must be specified. + + In `quotas`: new values of `maxSize` and `maxObjects` must both be specified, or set to `null` + to remove the quotas. An absent value will be considered the same as a `null`. It is not possible + to change only one of the two quotas. + parameters: + - name: id + in: query + required: true + description: "The exact bucket identifier, a 32 bytes hexadecimal string" + example: "b4018dc61b27ccb5c64ec1b24f53454bbbd180697c758c4d47a22a8921864a87" + schema: + type: string + requestBody: + description: | + Requested changes on the bucket. Both root fields are optionals. + required: true + content: + application/json: + schema: + type: object + required: [ ] + properties: + websiteAccess: + type: object + properties: + enabled: + type: boolean + example: true + indexDocument: + type: string + example: "index.html" + errorDocument: + type: string + example: "error/400.html" + quotas: + type: object + properties: + maxSize: + type: integer + format: int64 + nullable: true + example: 19029801 + maxObjects: + type: integer + format: int64 + nullable: true + example: null + + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your body." + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + /bucket/allow: + post: + tags: + - Bucket + operationId: "AllowBucketKey" + summary: "Allow key" + description: | + ⚠️ **DISCLAIMER**: Garage's developers are aware that this endpoint has an unconventional semantic. Be extra careful when implementing it, its behavior is not obvious. + + Allows a key to do read/write/owner operations on a bucket. + + Flags in permissions which have the value true will be activated. Other flags will remain unchanged (ie. they will keep their internal value). + + For example, if you set read to true, the key will be allowed to read the bucket. + If you set it to false, the key will keeps its previous read permission. + If you want to disallow read for the key, check the DenyBucketKey operation. + + requestBody: + description: | + Aliases to put on the new bucket + required: true + content: + application/json: + schema: + type: object + required: [ bucketId, accessKeyId, permissions ] + properties: + bucketId: + type: string + example: "e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b" + accessKeyId: + type: string + example: "GK31c2f218a2e44f485b94239e" + permissions: + type: object + required: [ read, write, owner ] + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: true + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + /bucket/deny: + post: + tags: + - Bucket + operationId: "DenyBucketKey" + summary: "Deny key" + description: | + ⚠️ **DISCLAIMER**: Garage's developers are aware that this endpoint has an unconventional semantic. Be extra careful when implementing it, its behavior is not obvious. + + Denies a key from doing read/write/owner operations on a bucket. + + Flags in permissions which have the value true will be deactivated. Other flags will remain unchanged. + + For example, if you set read to true, the key will be denied from reading. + If you set read to false, the key will keep its previous permissions. + If you want the key to have the reading permission, check the AllowBucketKey operation. + + requestBody: + description: | + Aliases to put on the new bucket + required: true + content: + application/json: + schema: + type: object + required: [ bucketId, accessKeyId, permissions ] + properties: + bucketId: + type: string + example: "e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b" + accessKeyId: + type: string + example: "GK31c2f218a2e44f485b94239e" + permissions: + type: object + required: [ read, write, owner ] + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: true + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + /bucket/alias/global: + put: + tags: + - Bucket + operationId: "PutBucketGlobalAlias" + summary: "Add a global alias" + description: | + Add a global alias to the target bucket + parameters: + - name: id + in: query + required: true + schema: + type: string + example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b + - name: alias + in: query + required: true + example: my_documents + schema: + type: string + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + delete: + tags: + - Bucket + operationId: "DeleteBucketGlobalAlias" + summary: "Delete a global alias" + description: | + Delete a global alias from the target bucket + parameters: + - name: id + in: query + required: true + schema: + type: string + example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b + - name: alias + in: query + required: true + schema: + type: string + example: my_documents + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + /bucket/alias/local: + put: + tags: + - Bucket + operationId: "PutBucketLocalAlias" + summary: "Add a local alias" + description: | + Add a local alias, bound to specified account, to the target bucket + parameters: + - name: id + in: query + required: true + schema: + type: string + example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b + - name: accessKeyId + in: query + required: true + schema: + type: string + example: GK31c2f218a2e44f485b94239e + - name: alias + in: query + required: true + schema: + type: string + example: my_documents + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + + delete: + tags: + - Bucket + operationId: "DeleteBucketLocalAlias" + summary: "Delete a local alias" + description: | + Delete a local alias, bound to specified account, from the target bucket + parameters: + - name: id + in: query + required: true + schema: + type: string + example: e6a14cd6a27f48684579ec6b381c078ab11697e6bc8513b72b2f5307e25fff9b + - name: accessKeyId + in: query + schema: + type: string + required: true + example: GK31c2f218a2e44f485b94239e + - name: alias + in: query + schema: + type: string + required: true + example: my_documents + responses: + '500': + description: "The server can not handle your request. Check your connectivity with the rest of the cluster." + '400': + description: "Bad request, check your request body" + '404': + description: "Bucket not found" + '200': + description: Returns exhaustive information about the bucket + content: + application/json: + schema: + $ref: '#/components/schemas/BucketInfo' + +components: + securitySchemes: + bearerAuth: + type: http + scheme: bearer + schemas: + NodeNetworkInfo: + type: object + required: [ addr, isUp, lastSeenSecsAgo, hostname ] + properties: + id: + type: string + example: "6a8e08af2aab1083ebab9b22165ea8b5b9d333b60a39ecd504e85cc1f432c36f" + addr: + type: string + example: "10.0.0.11:3901" + isUp: + type: boolean + example: true + lastSeenSecsAgo: + type: integer + nullable: true + example: 9 + hostname: + type: string + example: "node1" + NodeClusterInfo: + type: object + required: [ id, zone, tags ] + properties: + zone: + type: string + example: dc1 + capacity: + type: integer + format: int64 + nullable: true + example: 4 + tags: + type: array + description: | + User defined tags, put whatever makes sense for you, these tags are not interpreted by Garage + example: + - gateway + - fast + items: + type: string + NodeRoleChange: + oneOf: + - $ref: '#/components/schemas/NodeRoleRemove' + - $ref: '#/components/schemas/NodeRoleUpdate' + NodeRoleRemove: + type: object + required: [ id, remove ] + properties: + id: + type: string + example: "6a8e08af2aab1083ebab9b22165ea8b5b9d333b60a39ecd504e85cc1f432c36f" + remove: + type: boolean + example: true + NodeRoleUpdate: + type: object + required: [ id, zone, capacity, tags ] + properties: + id: + type: string + example: "6a8e08af2aab1083ebab9b22165ea8b5b9d333b60a39ecd504e85cc1f432c36f" + zone: + type: string + example: "dc1" + capacity: + type: integer + format: int64 + nullable: true + example: 150000000000 + tags: + type: array + items: + type: string + example: + - gateway + - fast + + ClusterLayout: + type: object + required: [ version, roles, stagedRoleChanges ] + properties: + version: + type: integer + example: 12 + roles: + type: array + example: + - id: "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f" + zone: "madrid" + capacity: 300000000000 + tags: + - fast + - amd64 + - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" + zone: "geneva" + capacity: 700000000000 + tags: + - arm64 + items: + $ref: '#/components/schemas/NodeClusterInfo' + stagedRoleChanges: + type: array + example: + - id: "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b" + zone: "geneva" + capacity: 800000000000 + tags: + - gateway + - id: "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff" + remove: true + items: + $ref: '#/components/schemas/NodeRoleChange' + LayoutVersion: + type: object + required: [ version ] + properties: + version: + type: integer + #format: int64 + example: 13 + + KeyInfo: + type: object + properties: + name: + type: string + example: "test-key" + accessKeyId: + type: string + example: "GK31c2f218a2e44f485b94239e" + secretAccessKey: + type: string + nullable: true + example: "b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835" + permissions: + type: object + properties: + createBucket: + type: boolean + example: false + buckets: + type: array + items: + type: object + properties: + id: + type: string + example: "70dc3bed7fe83a75e46b66e7ddef7d56e65f3c02f9f80b6749fb97eccb5e1033" + globalAliases: + type: array + items: + type: string + example: "my-bucket" + localAliases: + type: array + items: + type: string + example: "GK31c2f218a2e44f485b94239e:localname" + permissions: + type: object + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: false + BucketInfo: + type: object + properties: + id: + type: string + example: afa8f0a22b40b1247ccd0affb869b0af5cff980924a20e4b5e0720a44deb8d39 + globalAliases: + type: array + items: + type: string + example: "my_documents" + websiteAccess: + type: boolean + example: true + websiteConfig: + type: object + nullable: true + properties: + indexDocument: + type: string + example: "index.html" + errorDocument: + type: string + example: "error/400.html" + keys: + type: array + items: + $ref: '#/components/schemas/BucketKeyInfo' + objects: + type: integer + format: int64 + example: 14827 + bytes: + type: integer + format: int64 + example: 13189855625 + unfinishedUploads: + type: integer + example: 0 + quotas: + type: object + properties: + maxSize: + nullable: true + type: integer + format: int64 + example: null + maxObjects: + nullable: true + type: integer + format: int64 + example: null + + + BucketKeyInfo: + type: object + properties: + accessKeyId: + type: string + name: + type: string + permissions: + type: object + properties: + read: + type: boolean + example: true + write: + type: boolean + example: true + owner: + type: boolean + example: true + bucketLocalAliases: + type: array + items: + type: string + example: "my_documents" + + +security: + - bearerAuth: [] + +servers: + - description: A local server + url: http://localhost:3903/v1/ diff --git a/doc/book/build/golang.md b/doc/book/build/golang.md index a508260e..f3f28a40 100644 --- a/doc/book/build/golang.md +++ b/doc/book/build/golang.md @@ -37,30 +37,84 @@ import ( "context" "fmt" "os" + "strings" garage "git.deuxfleurs.fr/garage-sdk/garage-admin-sdk-golang" ) func main() { - // Set Host and other parameters + // Initialization configuration := garage.NewConfiguration() configuration.Host = "127.0.0.1:3903" - - - // We can now generate a client client := garage.NewAPIClient(configuration) - - // Authentication is handled through the context pattern ctx := context.WithValue(context.Background(), garage.ContextAccessToken, "s3cr3t") - // Send a request - resp, r, err := client.NodesApi.GetNodes(ctx).Execute() - if err != nil { - fmt.Fprintf(os.Stderr, "Error when calling `NodesApi.GetNodes``: %v\n", err) - fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + // Nodes + fmt.Println("--- nodes ---") + nodes, _, _ := client.NodesApi.GetNodes(ctx).Execute() + fmt.Fprintf(os.Stdout, "First hostname: %v\n", nodes.KnownNodes[0].Hostname) + capa := int64(1000000000) + change := []garage.NodeRoleChange{ + garage.NodeRoleChange{NodeRoleUpdate: &garage.NodeRoleUpdate { + Id: *nodes.KnownNodes[0].Id, + Zone: "dc1", + Capacity: *garage.NewNullableInt64(&capa), + Tags: []string{ "fast", "amd64" }, + }}, } - - // Process the response - fmt.Fprintf(os.Stdout, "Target hostname: %v\n", resp.KnownNodes[resp.Node].Hostname) + staged, _, _ := client.LayoutApi.AddLayout(ctx).NodeRoleChange(change).Execute() + msg, _, _ := client.LayoutApi.ApplyLayout(ctx).LayoutVersion(*garage.NewLayoutVersion(staged.Version + 1)).Execute() + fmt.Printf(strings.Join(msg.Message, "\n")) // Layout configured + + health, _, _ := client.NodesApi.GetHealth(ctx).Execute() + fmt.Printf("Status: %s, nodes: %v/%v, storage: %v/%v, partitions: %v/%v\n", health.Status, health.ConnectedNodes, health.KnownNodes, health.StorageNodesOk, health.StorageNodes, health.PartitionsAllOk, health.Partitions) + + // Key + fmt.Println("\n--- key ---") + key := "openapi-key" + keyInfo, _, _ := client.KeyApi.AddKey(ctx).AddKeyRequest(garage.AddKeyRequest{Name: *garage.NewNullableString(&key) }).Execute() + defer client.KeyApi.DeleteKey(ctx).Id(*keyInfo.AccessKeyId).Execute() + fmt.Printf("AWS_ACCESS_KEY_ID=%s\nAWS_SECRET_ACCESS_KEY=%s\n", *keyInfo.AccessKeyId, *keyInfo.SecretAccessKey.Get()) + + id := *keyInfo.AccessKeyId + canCreateBucket := true + updateKeyRequest := *garage.NewUpdateKeyRequest() + updateKeyRequest.SetName("openapi-key-updated") + updateKeyRequest.SetAllow(garage.UpdateKeyRequestAllow { CreateBucket: &canCreateBucket }) + update, _, _ := client.KeyApi.UpdateKey(ctx).Id(id).UpdateKeyRequest(updateKeyRequest).Execute() + fmt.Printf("Updated %v with key name %v\n", *update.AccessKeyId, *update.Name) + + keyList, _, _ := client.KeyApi.ListKeys(ctx).Execute() + fmt.Printf("Keys count: %v\n", len(keyList)) + + // Bucket + fmt.Println("\n--- bucket ---") + global_name := "global-ns-openapi-bucket" + local_name := "local-ns-openapi-bucket" + bucketInfo, _, _ := client.BucketApi.CreateBucket(ctx).CreateBucketRequest(garage.CreateBucketRequest{ + GlobalAlias: &global_name, + LocalAlias: &garage.CreateBucketRequestLocalAlias { + AccessKeyId: keyInfo.AccessKeyId, + Alias: &local_name, + }, + }).Execute() + defer client.BucketApi.DeleteBucket(ctx).Id(*bucketInfo.Id).Execute() + fmt.Printf("Bucket id: %s\n", *bucketInfo.Id) + + updateBucketRequest := *garage.NewUpdateBucketRequest() + website := garage.NewUpdateBucketRequestWebsiteAccess() + website.SetEnabled(true) + website.SetIndexDocument("index.html") + website.SetErrorDocument("errors/4xx.html") + updateBucketRequest.SetWebsiteAccess(*website) + quotas := garage.NewUpdateBucketRequestQuotas() + quotas.SetMaxSize(1000000000) + quotas.SetMaxObjects(999999999) + updateBucketRequest.SetQuotas(*quotas) + updatedBucket, _, _ := client.BucketApi.UpdateBucket(ctx).Id(*bucketInfo.Id).UpdateBucketRequest(updateBucketRequest).Execute() + fmt.Printf("Bucket %v website activation: %v\n", *updatedBucket.Id, *updatedBucket.WebsiteAccess) + + bucketList, _, _ := client.BucketApi.ListBuckets(ctx).Execute() + fmt.Printf("Bucket count: %v\n", len(bucketList)) } ``` diff --git a/doc/book/build/javascript.md b/doc/book/build/javascript.md index ff009ffe..a065c595 100644 --- a/doc/book/build/javascript.md +++ b/doc/book/build/javascript.md @@ -31,9 +31,9 @@ npm install --save git+https://git.deuxfleurs.fr/garage-sdk/garage-admin-sdk-js. A short example: ```javascript -const garage = require('garage_administration_api_v0garage_v0_8_0'); +const garage = require('garage_administration_api_v1garage_v0_9_0'); -const api = new garage.ApiClient("http://127.0.0.1:3903/v0"); +const api = new garage.ApiClient("http://127.0.0.1:3903/v1"); api.authentications['bearerAuth'].accessToken = "s3cr3t"; const [node, layout, key, bucket] = [ diff --git a/doc/book/build/python.md b/doc/book/build/python.md index 5b797897..896c99d3 100644 --- a/doc/book/build/python.md +++ b/doc/book/build/python.md @@ -80,7 +80,7 @@ from garage_admin_sdk.apis import * from garage_admin_sdk.models import * configuration = garage_admin_sdk.Configuration( - host = "http://localhost:3903/v0", + host = "http://localhost:3903/v1", access_token = "s3cr3t" ) @@ -94,13 +94,14 @@ print(f"running garage {status.garage_version}, node_id {status.node}") # Change layout of this node current = layout.get_layout() -layout.add_layout({ - status.node: NodeClusterInfo( +layout.add_layout([ + NodeRoleChange( + id = status.node, zone = "dc1", - capacity = 1, + capacity = 1000000000, tags = [ "dev" ], ) -}) +]) layout.apply_layout(LayoutVersion( version = current.version + 1 )) diff --git a/doc/book/connect/apps/index.md b/doc/book/connect/apps/index.md index baf6ba50..c8571fac 100644 --- a/doc/book/connect/apps/index.md +++ b/doc/book/connect/apps/index.md @@ -37,7 +37,7 @@ Second, we suppose you have created a key and a bucket. As a reminder, you can create a key for your nextcloud instance as follow: ```bash -garage key new --name nextcloud-key +garage key create nextcloud-key ``` Keep the Key ID and the Secret key in a pad, they will be needed later. @@ -139,7 +139,7 @@ a reasonable trade-off for some instances. Create a key for Peertube: ```bash -garage key new --name peertube-key +garage key create peertube-key ``` Keep the Key ID and the Secret key in a pad, they will be needed later. @@ -253,7 +253,7 @@ As such, your Garage cluster should be configured appropriately for good perform This is the usual Garage setup: ```bash -garage key new --name mastodon-key +garage key create mastodon-key garage bucket create mastodon-data garage bucket allow mastodon-data --read --write --key mastodon-key ``` @@ -379,7 +379,7 @@ Supposing you have a working synapse installation, you can add the module with p Now create a bucket and a key for your matrix instance (note your Key ID and Secret Key somewhere, they will be needed later): ```bash -garage key new --name matrix-key +garage key create matrix-key garage bucket create matrix garage bucket allow matrix --read --write --key matrix-key ``` @@ -421,7 +421,7 @@ Now we can write a simple script (eg `~/.local/bin/matrix-cache-gc`): ## CONFIGURATION ## AWS_ACCESS_KEY_ID=GKxxx AWS_SECRET_ACCESS_KEY=xxxx -S3_ENDPOINT=http://localhost:3900 +AWS_ENDPOINT_URL=http://localhost:3900 S3_BUCKET=matrix MEDIA_STORE=/var/lib/matrix-synapse/media PG_USER=matrix @@ -442,7 +442,7 @@ EOF s3_media_upload update-db 1d s3_media_upload --no-progress check-deleted $MEDIA_STORE -s3_media_upload --no-progress upload $MEDIA_STORE $S3_BUCKET --delete --endpoint-url $S3_ENDPOINT +s3_media_upload --no-progress upload $MEDIA_STORE $S3_BUCKET --delete --endpoint-url $AWS_ENDPOINT_URL ``` This script will list all the medias that were not accessed in the 24 hours according to your database. diff --git a/doc/book/connect/backup.md b/doc/book/connect/backup.md index f51dda30..585ec469 100644 --- a/doc/book/connect/backup.md +++ b/doc/book/connect/backup.md @@ -54,7 +54,7 @@ how to configure this. Create your key and bucket: ```bash -garage key new my-key +garage key create my-key garage bucket create backup garage bucket allow backup --read --write --key my-key ``` @@ -105,6 +105,7 @@ restic restore 79766175 --target /var/lib/postgresql Restic has way more features than the ones presented here. You can discover all of them by accessing its documentation from the link below. +Files on Android devices can also be backed up with [restic-android](https://github.com/lhns/restic-android). *External links:* [Restic Documentation > Amazon S3](https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html#amazon-s3) diff --git a/doc/book/connect/cli.md b/doc/book/connect/cli.md index 591ac151..c9ffd4f4 100644 --- a/doc/book/connect/cli.md +++ b/doc/book/connect/cli.md @@ -70,16 +70,17 @@ Then a file named `~/.aws/config` and put: ```toml [default] region=garage +endpoint_url=http://127.0.0.1:3900 ``` Now, supposing Garage is listening on `http://127.0.0.1:3900`, you can list your buckets with: ```bash -aws --endpoint-url http://127.0.0.1:3900 s3 ls +aws s3 ls ``` -Passing the `--endpoint-url` parameter to each command is annoying but AWS developers do not provide a corresponding configuration entry. -As a workaround, you can redefine the aws command by editing the file `~/.bashrc`: +If you're using awscli `<1.29.0` or `<2.13.0`, you need to pass `--endpoint-url` to each CLI invocation explicitly. +As a workaround, you can redefine the aws command by editing the file `~/.bashrc` in this case: ``` function aws { command aws --endpoint-url http://127.0.0.1:3900 $@ ; } diff --git a/doc/book/connect/repositories.md b/doc/book/connect/repositories.md index 4b14bb46..66365d64 100644 --- a/doc/book/connect/repositories.md +++ b/doc/book/connect/repositories.md @@ -23,7 +23,7 @@ You can configure a different target for each data type (check `[lfs]` and `[att Let's start by creating a key and a bucket (your key id and secret will be needed later, keep them somewhere): ```bash -garage key new --name gitea-key +garage key create gitea-key garage bucket create gitea garage bucket allow gitea --read --write --key gitea-key ``` @@ -118,7 +118,7 @@ through another support, like a git repository. As a first step, we will need to create a bucket on Garage and enabling website access on it: ```bash -garage key new --name nix-key +garage key create nix-key garage bucket create nix.example.com garage bucket allow nix.example.com --read --write --key nix-key garage bucket website nix.example.com --allow diff --git a/doc/book/cookbook/binary-packages.md b/doc/book/cookbook/binary-packages.md index 606de2b6..0a6ad8fc 100644 --- a/doc/book/cookbook/binary-packages.md +++ b/doc/book/cookbook/binary-packages.md @@ -7,10 +7,23 @@ Garage is also available in binary packages on: ## Alpine Linux +If you use Alpine Linux, you can simply install the +[garage](https://pkgs.alpinelinux.org/packages?name=garage) package from the +Alpine Linux repositories (available since v3.17): + ```bash -apk install garage +apk add garage ``` +The default configuration file is installed to `/etc/garage.toml`. You can run +Garage using: `rc-service garage start`. If you don't specify `rpc_secret`, it +will be automatically replaced with a random string on the first start. + +Please note that this package is built without Consul discovery, Kubernetes +discovery, OpenTelemetry exporter, and K2V features (K2V will be enabled once +it's stable). + + ## Arch Linux Garage is available in the [AUR](https://aur.archlinux.org/packages/garage). diff --git a/doc/book/cookbook/exposing-websites.md b/doc/book/cookbook/exposing-websites.md index 5f6a5a28..9382a541 100644 --- a/doc/book/cookbook/exposing-websites.md +++ b/doc/book/cookbook/exposing-websites.md @@ -38,7 +38,7 @@ Our website serving logic is as follow: Now we need to infer the URL of your website through your bucket name. Let assume: - - we set `root_domain = ".web.example.com"` in `garage.toml` ([ref](@/documentation/reference-manual/configuration.md#root_domain)) + - we set `root_domain = ".web.example.com"` in `garage.toml` ([ref](@/documentation/reference-manual/configuration.md#web_root_domain)) - our bucket name is `garagehq.deuxfleurs.fr`. Our bucket will be served if the Host field matches one of these 2 values (the port is ignored): diff --git a/doc/book/cookbook/real-world.md b/doc/book/cookbook/real-world.md index 7061069f..ea4ce1f9 100644 --- a/doc/book/cookbook/real-world.md +++ b/doc/book/cookbook/real-world.md @@ -19,9 +19,10 @@ 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. 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 +- Each machine has an IP address which makes it directly reachable by all other machines. + In many cases, nodes will be behind a NAT and will not each have a public + IPv4 addresses. In this case, is recommended that you use IPv6 for this + end-to-end connectivity if it is available. Otherwise, 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. @@ -42,7 +43,7 @@ For our example, we will suppose the following infrastructure with IPv6 connecti | Brussels | Mars | fc00:F::1 | 1.5 TB | Note that Garage will **always** store the three copies of your data on nodes at different -locations. This means that in the case of this small example, the available capacity +locations. This means that in the case of this small example, the usable capacity of the cluster is in fact only 1.5 TB, because nodes in Brussels can't store more than that. This also means that nodes in Paris and London will be under-utilized. To make better use of the available hardware, you should ensure that the capacity @@ -75,28 +76,23 @@ to store 2 TB of data in total. - For the metadata storage, Garage does not do checksumming and integrity verification on its own. If you are afraid of bitrot/data corruption, - put your metadata directory on a BTRFS partition. Otherwise, just use regular + put your metadata directory on a ZFS or BTRFS partition. Otherwise, just use regular EXT4 or XFS. -- Having a single server with several storage drives is currently not very well - supported in Garage ([#218](https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/218)). - For an easy setup, just put all your drives in a RAID0 or a ZFS RAIDZ array. - If you're adventurous, you can try to format each of your disk as - a separate XFS partition, and then run one `garage` daemon per disk drive, - or use something like [`mergerfs`](https://github.com/trapexit/mergerfs) to merge - all your disks in a single union filesystem that spreads load over them. +- Servers with multiple HDDs are supported natively by Garage without resorting + to RAID, see [our dedicated documentation page](@/documentation/operations/multi-hdd.md). ## Get a Docker image Our docker image is currently named `dxflrs/garage` and is stored on the [Docker Hub](https://hub.docker.com/r/dxflrs/garage/tags?page=1&ordering=last_updated). -We encourage you to use a fixed tag (eg. `v0.8.0`) and not the `latest` tag. -For this example, we will use the latest published version at the time of the writing which is `v0.8.0` but it's up to you +We encourage you to use a fixed tag (eg. `v0.9.0`) and not the `latest` tag. +For this example, we will use the latest published version at the time of the writing which is `v0.9.0` but it's up to you to check [the most recent versions on the Docker Hub](https://hub.docker.com/r/dxflrs/garage/tags?page=1&ordering=last_updated). For example: ``` -sudo docker pull dxflrs/garage:v0.8.0 +sudo docker pull dxflrs/garage:v0.9.0 ``` ## Deploying and configuring Garage @@ -161,12 +157,13 @@ docker run \ -v /etc/garage.toml:/etc/garage.toml \ -v /var/lib/garage/meta:/var/lib/garage/meta \ -v /var/lib/garage/data:/var/lib/garage/data \ - dxflrs/garage:v0.8.0 + dxflrs/garage:v0.9.0 ``` -It should be restarted automatically at each reboot. -Please note that we use host networking as otherwise Docker containers -can not communicate with IPv6. +With this command line, Garage should be started automatically at each boot. +Please note that we use host networking as otherwise the network indirection +added by Docker would prevent Garage nodes from communicating with one another +(especially if using IPv6). If you want to use `docker-compose`, you may use the following `docker-compose.yml` file as a reference: @@ -174,7 +171,7 @@ If you want to use `docker-compose`, you may use the following `docker-compose.y version: "3" services: garage: - image: dxflrs/garage:v0.8.0 + image: dxflrs/garage:v0.9.0 network_mode: "host" restart: unless-stopped volumes: @@ -183,10 +180,12 @@ services: - /var/lib/garage/data:/var/lib/garage/data ``` -Upgrading between Garage versions should be supported transparently, -but please check the relase notes before doing so! -To upgrade, simply stop and remove this container and -start again the command with a new version of Garage. +If you wish to upgrade your cluster, make sure to read the corresponding +[documentation page](@/documentation/operations/upgrading.md) first, as well as +the documentation relevant to your version of Garage in the case of major +upgrades. With the containerized setup proposed here, the upgrade process +will require stopping and removing the existing container, and re-creating it +with the upgraded version. ## Controling the daemon @@ -270,12 +269,12 @@ of a role that is assigned to each active cluster node. For our example, we will suppose we have the following infrastructure (Capacity, Identifier and Zone are specific values to Garage described in the following): -| Location | Name | Disk Space | `Capacity` | `Identifier` | `Zone` | -|----------|---------|------------|------------|--------------|--------------| -| Paris | Mercury | 1 TB | `10` | `563e` | `par1` | -| Paris | Venus | 2 TB | `20` | `86f0` | `par1` | -| London | Earth | 2 TB | `20` | `6814` | `lon1` | -| Brussels | Mars | 1.5 TB | `15` | `212f` | `bru1` | +| Location | Name | Disk Space | Identifier | Zone (`-z`) | Capacity (`-c`) | +|----------|---------|------------|------------|-------------|-----------------| +| Paris | Mercury | 1 TB | `563e` | `par1` | `1T` | +| Paris | Venus | 2 TB | `86f0` | `par1` | `2T` | +| London | Earth | 2 TB | `6814` | `lon1` | `2T` | +| Brussels | Mars | 1.5 TB | `212f` | `bru1` | `1.5T` | #### Node identifiers @@ -297,6 +296,8 @@ garage status It will display the IP address associated with each node; from the IP address you will be able to recognize the node. +We will now use the `garage layout assign` command to configure the correct parameters for each node. + #### Zones Zones are simply a user-chosen identifier that identify a group of server that are grouped together logically. @@ -306,29 +307,29 @@ In most cases, a zone will correspond to a geographical location (i.e. a datacen Behind the scene, Garage will use zone definition to try to store the same data on different zones, in order to provide high availability despite failure of a zone. +Zones are passed to Garage using the `-z` flag of `garage layout assign` (see below). + #### Capacity -Garage reasons on an abstract metric about disk storage that is named the *capacity* of a node. -The capacity configured in Garage must be proportional to the disk space dedicated to the node. +Garage needs to know the storage capacity (disk space) it can/should use on +each node, to be able to correctly balance data. + +Capacity values are expressed in bytes and are passed to Garage using the `-c` flag of `garage layout assign` (see below). -Capacity values must be **integers** but can be given any signification. -Here we chose that 1 unit of capacity = 100 GB. +#### Tags -Note that the amount of data stored by Garage on each server may not be strictly proportional to -its capacity value, as Garage will priorize having 3 copies of data in different zones, -even if this means that capacities will not be strictly respected. For example in our above examples, -nodes Earth and Mars will always store a copy of everything each, and the third copy will -have 66% chance of being stored by Venus and 33% chance of being stored by Mercury. +You can add additional tags to nodes using the `-t` flag of `garage layout assign` (see below). +Tags have no specific meaning for Garage and can be used at your convenience. #### Injecting the topology Given the information above, we will configure our cluster as follow: ```bash -garage layout assign 563e -z par1 -c 10 -t mercury -garage layout assign 86f0 -z par1 -c 20 -t venus -garage layout assign 6814 -z lon1 -c 20 -t earth -garage layout assign 212f -z bru1 -c 15 -t mars +garage layout assign 563e -z par1 -c 1T -t mercury +garage layout assign 86f0 -z par1 -c 2T -t venus +garage layout assign 6814 -z lon1 -c 2T -t earth +garage layout assign 212f -z bru1 -c 1.5T -t mars ``` At this point, the changes in the cluster layout have not yet been applied. @@ -338,6 +339,7 @@ To show the new layout that will be applied, call: garage layout show ``` +Make sure to read carefully the output of `garage layout show`. Once you are satisfied with your new layout, apply it with: ```bash diff --git a/doc/book/cookbook/reverse-proxy.md b/doc/book/cookbook/reverse-proxy.md index 9c833ad0..b715193e 100644 --- a/doc/book/cookbook/reverse-proxy.md +++ b/doc/book/cookbook/reverse-proxy.md @@ -378,6 +378,47 @@ admin.garage.tld { 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. +### Caching + +Caddy can compiled with a +[cache plugin](https://github.com/caddyserver/cache-handler) which can be used +to provide a hot-cache at the webserver-level for static websites hosted by +Garage. + +This can be configured as follows: + +```caddy +# Caddy global configuration section +{ + # Bare minimum configuration to enable cache. + order cache before rewrite + + cache + + #cache + # allowed_http_verbs GET + # default_cache_control public + # ttl 8h + #} +} + +# Site specific section +https:// { + cache + + #cache { + # timeout { + # backend 30s + # } + #} + + reverse_proxy ... +} +``` + +Caching is a complicated subject, and the reader is encouraged to study the +available options provided by the plugin. + ### On-demand TLS Caddy supports a technique called @@ -428,3 +469,6 @@ https:// { reverse_proxy localhost:3902 192.168.1.2:3902 example.tld:3902 } ``` + +More information on how this endpoint is implemented in Garage is available +in the [Admin API Reference](@/documentation/reference-manual/admin-api.md) page. diff --git a/doc/book/operations/durability-repairs.md b/doc/book/operations/durability-repairs.md index 498c8fda..b0d2c78a 100644 --- a/doc/book/operations/durability-repairs.md +++ b/doc/book/operations/durability-repairs.md @@ -91,6 +91,16 @@ is definitely lost, then there is no other choice than to declare your S3 object as unrecoverable, and to delete them properly from the data store. This can be done using the `garage block purge` command. +## Rebalancing data directories + +In [multi-HDD setups](@/documentation/operations/multi-hdd.md), to ensure that +data blocks are well balanced between storage locations, you may run a +rebalance operation using `garage repair rebalance`. This is usefull when +adding storage locations or when capacities of the storage locations have been +changed. Once this is finished, Garage will know for each block of a single +possible location where it can be, which can increase access speed. This +operation will also move out all data from locations marked as read-only. + # Metadata operations @@ -114,4 +124,3 @@ in your cluster, you can run one of the following repair procedures: - `garage repair versions`: checks that all versions belong to a non-deleted object, and purges any orphan version - `garage repair block_refs`: checks that all block references belong to a non-deleted object version, and purges any orphan block reference (this will then allow the blocks to be garbage-collected) - diff --git a/doc/book/operations/layout.md b/doc/book/operations/layout.md index 5e314246..ee05aba1 100644 --- a/doc/book/operations/layout.md +++ b/doc/book/operations/layout.md @@ -9,18 +9,30 @@ a certain capacity, or a gateway node that does not store data and is only used as an API entry point for faster cluster access. An introduction to building cluster layouts can be found in the [production deployment](@/documentation/cookbook/real-world.md) page. +In Garage, all of the data that can be stored in a given cluster is divided +into slices which we call *partitions*. Each partition is stored by +one or several nodes in the cluster +(see [`replication_mode`](@/documentation/reference-manual/configuration.md#replication_mode)). +The layout determines the correspondence between these partition, +which exist on a logical level, and actual storage nodes. + ## How cluster layouts work in Garage -In Garage, a cluster layout is composed of the following components: +A cluster layout is composed of the following components: -- a table of roles assigned to nodes +- a table of roles assigned to nodes, defined by the user +- an optimal assignation of partitions to nodes, computed by an algorithm that is ran once when calling `garage layout apply` or the ApplyClusterLayout API endpoint - a version number Garage nodes will always use the cluster layout with the highest version number. Garage nodes also maintain and synchronize between them a set of proposed role changes that haven't yet been applied. These changes will be applied (or -canceled) in the next version of the layout +canceled) in the next version of the layout. + +All operations on the layout can be realized using the `garage` CLI or using the +[administration API endpoint](@/documentation/reference-manual/admin-api.md). +We give here a description of CLI commands, the admin API semantics are very similar. The following commands insert modifications to the set of proposed role changes for the next layout version (but they do not create the new layout immediately): @@ -51,7 +63,7 @@ commands will fail otherwise. ## Warnings about Garage cluster layout management -**Warning: never make several calls to `garage layout apply` or `garage layout +**⚠️ Never make several calls to `garage layout apply` or `garage layout revert` with the same value of the `--version` flag. Doing so can lead to the creation of several different layouts with the same version number, in which case your Garage cluster will become inconsistent until fixed.** If a call to @@ -65,13 +77,198 @@ shell, you shouldn't have much issues as long as you run commands one after the other and take care of checking the output of `garage layout show` before applying any changes. -If you are using the `garage` CLI to script layout changes, follow the following recommendations: +If you are using the `garage` CLI or the admin API to script layout changes, +follow the following recommendations: + +- If using the CLI, make all of your `garage` CLI calls to the same RPC host. + If using the admin API, make all of your API calls to the same Garage node. Do + not connect to individual nodes to send them each a piece of the layout changes + you are making, as the changes propagate asynchronously between nodes and might + not all be taken into account at the time when the new layout is applied. + +- **Only call `garage layout apply`/ApplyClusterLayout once**, and call it + **strictly after** all of the `layout assign` and `layout remove` + commands/UpdateClusterLayout API calls have returned. + + +## Understanding unexpected layout calculations + +When adding, removing or modifying nodes in a cluster layout, sometimes +unexpected assigntations of partitions to node can occur. These assignations +are in fact normal and logical, given the objectives of the algorihtm. Indeed, +**the layout algorithm prioritizes moving less data between nodes over the fact +of achieving equal distribution of load. It also tries to use all links between +pairs of nodes in equal proportions when moving data.** This section presents +two examples and illustrates how one can control Garage's behavior to obtain +the desired results. + +### Example 1 + +In this example, a cluster is originally composed of 3 nodes in 3 different +zones (data centers). The three nodes are of equal capacity, therefore they +are all fully exploited and all store a copy of all of the data in the cluster. + +Then, a fourth node of the same size is added in the datacenter `dc1`. +As illustrated by the following, **Garage will by default not store any data on the new node**: + +``` +$ garage layout show +==== CURRENT CLUSTER LAYOUT ==== +ID Tags Zone Capacity Usable capacity +b10c110e4e854e5a node1 dc1 1000.0 MB 1000.0 MB (100.0%) +a235ac7695e0c54d node2 dc2 1000.0 MB 1000.0 MB (100.0%) +62b218d848e86a64 node3 dc3 1000.0 MB 1000.0 MB (100.0%) + +Zone redundancy: maximum + +Current cluster layout version: 6 + +==== STAGED ROLE CHANGES ==== +ID Tags Zone Capacity +a11c7cf18af29737 node4 dc1 1000.0 MB + + +==== NEW CLUSTER LAYOUT AFTER APPLYING CHANGES ==== +ID Tags Zone Capacity Usable capacity +b10c110e4e854e5a node1 dc1 1000.0 MB 1000.0 MB (100.0%) +a11c7cf18af29737 node4 dc1 1000.0 MB 0 B (0.0%) +a235ac7695e0c54d node2 dc2 1000.0 MB 1000.0 MB (100.0%) +62b218d848e86a64 node3 dc3 1000.0 MB 1000.0 MB (100.0%) + +Zone redundancy: maximum + +==== COMPUTATION OF A NEW PARTITION ASSIGNATION ==== + +Partitions are replicated 3 times on at least 3 distinct zones. + +Optimal partition size: 3.9 MB (3.9 MB in previous layout) +Usable capacity / total cluster capacity: 3.0 GB / 4.0 GB (75.0 %) +Effective capacity (replication factor 3): 1000.0 MB + +A total of 0 new copies of partitions need to be transferred. + +dc1 Tags Partitions Capacity Usable capacity + b10c110e4e854e5a node1 256 (0 new) 1000.0 MB 1000.0 MB (100.0%) + a11c7cf18af29737 node4 0 (0 new) 1000.0 MB 0 B (0.0%) + TOTAL 256 (256 unique) 2.0 GB 1000.0 MB (50.0%) + +dc2 Tags Partitions Capacity Usable capacity + a235ac7695e0c54d node2 256 (0 new) 1000.0 MB 1000.0 MB (100.0%) + TOTAL 256 (256 unique) 1000.0 MB 1000.0 MB (100.0%) + +dc3 Tags Partitions Capacity Usable capacity + 62b218d848e86a64 node3 256 (0 new) 1000.0 MB 1000.0 MB (100.0%) + TOTAL 256 (256 unique) 1000.0 MB 1000.0 MB (100.0%) +``` + +While unexpected, this is logical because of the following facts: + +- storing some data on the new node does not help increase the total quantity + of data that can be stored on the cluster, as the two other zones (`dc2` and + `dc3`) still need to store a full copy of everything, and their capacity is + still the same; + +- there is therefore no need to move any data on the new node as this would be pointless; + +- moving data to the new node has a cost which the algorithm decides to not pay if not necessary. + +This distribution of data can however not be what the administrator wanted: if +they added a new node to `dc1`, it might be because the existing node is too +slow, and they wish to divide its load by half. In that case, what they need to +do to force Garage to distribute the data between the two nodes is to attribute +only half of the capacity to each node in `dc1` (in our example, 500M instead of 1G). +In that case, Garage would determine that to be able to store 1G in total, it +would need to store 500M on the old node and 500M on the added one. + + +### Example 2 + +The following example is a slightly different scenario, where `dc1` had two +nodes that were used at 50%, and `dc2` and `dc3` each have one node that is +100% used. All node capacities are the same. + +Then, a node from `dc1` is moved into `dc3`. One could expect that the roles of +`dc1` and `dc3` would simply be swapped: the remaining node in `dc1` would be +used at 100%, and the two nodes now in `dc3` would be used at 50%. Instead, +this happens: + +``` +==== CURRENT CLUSTER LAYOUT ==== +ID Tags Zone Capacity Usable capacity +b10c110e4e854e5a node1 dc1 1000.0 MB 500.0 MB (50.0%) +a11c7cf18af29737 node4 dc1 1000.0 MB 500.0 MB (50.0%) +a235ac7695e0c54d node2 dc2 1000.0 MB 1000.0 MB (100.0%) +62b218d848e86a64 node3 dc3 1000.0 MB 1000.0 MB (100.0%) + +Zone redundancy: maximum + +Current cluster layout version: 8 + +==== STAGED ROLE CHANGES ==== +ID Tags Zone Capacity +a11c7cf18af29737 node4 dc3 1000.0 MB + + +==== NEW CLUSTER LAYOUT AFTER APPLYING CHANGES ==== +ID Tags Zone Capacity Usable capacity +b10c110e4e854e5a node1 dc1 1000.0 MB 1000.0 MB (100.0%) +a235ac7695e0c54d node2 dc2 1000.0 MB 1000.0 MB (100.0%) +62b218d848e86a64 node3 dc3 1000.0 MB 753.9 MB (75.4%) +a11c7cf18af29737 node4 dc3 1000.0 MB 246.1 MB (24.6%) + +Zone redundancy: maximum + +==== COMPUTATION OF A NEW PARTITION ASSIGNATION ==== + +Partitions are replicated 3 times on at least 3 distinct zones. + +Optimal partition size: 3.9 MB (3.9 MB in previous layout) +Usable capacity / total cluster capacity: 3.0 GB / 4.0 GB (75.0 %) +Effective capacity (replication factor 3): 1000.0 MB + +A total of 128 new copies of partitions need to be transferred. + +dc1 Tags Partitions Capacity Usable capacity + b10c110e4e854e5a node1 256 (128 new) 1000.0 MB 1000.0 MB (100.0%) + TOTAL 256 (256 unique) 1000.0 MB 1000.0 MB (100.0%) + +dc2 Tags Partitions Capacity Usable capacity + a235ac7695e0c54d node2 256 (0 new) 1000.0 MB 1000.0 MB (100.0%) + TOTAL 256 (256 unique) 1000.0 MB 1000.0 MB (100.0%) + +dc3 Tags Partitions Capacity Usable capacity + 62b218d848e86a64 node3 193 (0 new) 1000.0 MB 753.9 MB (75.4%) + a11c7cf18af29737 node4 63 (0 new) 1000.0 MB 246.1 MB (24.6%) + TOTAL 256 (256 unique) 2.0 GB 1000.0 MB (50.0%) +``` + +As we can see, the node that was moved to `dc3` (node4) is only used at 25% (approximatively), +whereas the node that was already in `dc3` (node3) is used at 75%. + +This can be explained by the following: + +- node1 will now be the only node remaining in `dc1`, thus it has to store all + of the data in the cluster. Since it was storing only half of it before, it has + to retrieve the other half from other nodes in the cluster. + +- The data which it does not have is entirely stored by the other node that was + in `dc1` and that is now in `dc3` (node4). There is also a copy of it on node2 + and node3 since both these nodes have a copy of everything. + +- node3 and node4 are the two nodes that will now be in a datacenter that is + under-utilized (`dc3`), this means that those are the two candidates from which + data can be removed to be moved to node1. + +- Garage will move data in equal proportions from all possible sources, in this + case it means that it will tranfer 25% of the entire data set from node3 to + node1 and another 25% from node4 to node1. -- Make all of your `garage` CLI calls to the same RPC host. Do not use the - `garage` CLI to connect to individual nodes to send them each a piece of the - layout changes you are making, as the changes propagate asynchronously - between nodes and might not all be taken into account at the time when the - new layout is applied. +This explains why node3 ends with 75% utilization (100% from before minus 25% +that is moved to node1), and node4 ends with 25% (50% from before minus 25% +that is moved to node1). -- **Only call `garage layout apply` once**, and call it **strictly after** all - of the `layout assign` and `layout remove` commands have returned. +This illustrates the second principle of the layout computation: **if there is +a choice in moving data out of some nodes, then all links between pairs of +nodes are used in equal proportions** (this is approximately true, there is +randomness in the algorihtm to achieve this so there might be some small +fluctuations, as we see above). diff --git a/doc/book/operations/multi-hdd.md b/doc/book/operations/multi-hdd.md new file mode 100644 index 00000000..36445b0a --- /dev/null +++ b/doc/book/operations/multi-hdd.md @@ -0,0 +1,101 @@ ++++ +title = "Multi-HDD support" +weight = 15 ++++ + + +Since v0.9, Garage natively supports nodes that have several storage drives +for storing data blocks (not for metadata storage). + +## Initial setup + +To set up a new Garage storage node with multiple HDDs, +format and mount all your drives in different directories, +and use a Garage configuration as follows: + +```toml +data_dir = [ + { path = "/path/to/hdd1", capacity = "2T" }, + { path = "/path/to/hdd2", capacity = "4T" }, +] +``` + +Garage will automatically balance all blocks stored by the node +among the different specified directories, proportionnally to the +specified capacities. + +## Updating the list of storage locations + +If you add new storage locations to your `data_dir`, +Garage will not rebalance existing data between storage locations. +Newly written blocks will be balanced proportionnally to the specified capacities, +and existing data may be moved between drives to improve balancing, +but only opportunistically when a data block is re-written (e.g. an object +is re-uploaded, or an object with a duplicate block is uploaded). + +To understand precisely what is happening, we need to dive in to how Garage +splits data among the different storage locations. + +First of all, Garage divides the set of all possible block hashes +in a fixed number of slices (currently 1024), and assigns +to each slice a primary storage location among the specified data directories. +The number of slices having their primary location in each data directory +is proportionnal to the capacity specified in the config file. + +When Garage receives a block to write, it will always write it in the primary +directory of the slice that contains its hash. + +Now, to be able to not lose existing data blocks when storage locations +are added, Garage also keeps a list of secondary data directories +for all of the hash slices. Secondary data directories for a slice indicates +storage locations that once were primary directories for that slice, i.e. where +Garage knows that data blocks of that slice might be stored. +When Garage is requested to read a certain data block, +it will first look in the primary storage directory of its slice, +and if it doesn't find it there it goes through all of the secondary storage +locations until it finds it. This allows Garage to continue operating +normally when storage locations are added, without having to shuffle +files between drives to place them in the correct location. + +This relatively simple strategy works well but does not ensure that data +is correctly balanced among drives according to their capacity. +To rebalance data, two strategies can be used: + +- Lazy rebalancing: when a block is re-written (e.g. the object is re-uploaded), + Garage checks whether the existing copy is in the primary directory of the slice + or in a secondary directory. If the current copy is in a secondary directory, + Garage re-writes a copy in the primary directory and deletes the one from the + secondary directory. This might never end up rebalancing everything if there + are data blocks that are only read and never written. + +- Active rebalancing: an operator of a Garage node can explicitly launch a repair + procedure that rebalances the data directories, moving all blocks to their + primary location. Once done, all secondary locations for all hash slices are + removed so that they won't be checked anymore when looking for a data block. + +## Read-only storage locations + +If you would like to move all data blocks from an existing data directory to one +or several new data directories, mark the old directory as read-only: + +```toml +data_dir = [ + { path = "/path/to/old_data", read_only = true }, + { path = "/path/to/new_hdd1", capacity = "2T" }, + { path = "/path/to/new_hdd2", capacity = "4T" }, +] +``` + +Garage will be able to read requested blocks from the read-only directory. +Garage will also move data out of the read-only directory either progressively +(lazy rebalancing) or if requested explicitly (active rebalancing). + +Once an active rebalancing has finished, your read-only directory should be empty: +it might still contain subdirectories, but no data files. You can check that +it contains no files using: + +```bash +find -type f /path/to/old_data # should not print anything +``` + +at which point it can be removed from the `data_dir` list in your config file. diff --git a/doc/book/operations/upgrading.md b/doc/book/operations/upgrading.md index e8919a19..9a738282 100644 --- a/doc/book/operations/upgrading.md +++ b/doc/book/operations/upgrading.md @@ -80,6 +80,6 @@ The entire procedure would look something like this: 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 + - it has to be run offline, in which case you will have to again take all nodes offline one after the other to run the repair For this last step, please refer to the specific documentation pertaining to the version upgrade you are doing. diff --git a/doc/book/quick-start/_index.md b/doc/book/quick-start/_index.md index f556eaa3..1b129f36 100644 --- a/doc/book/quick-start/_index.md +++ b/doc/book/quick-start/_index.md @@ -35,6 +35,9 @@ Place this binary somewhere in your `$PATH` so that you can invoke the `garage` command directly (for instance you can copy the binary in `/usr/local/bin` or in `~/.local/bin`). +You may also check whether your distribution already includes a +[binary package for Garage](@/documentation/cookbook/binary-packages.md). + If a binary of the last version is not available for your architecture, or if you want a build customized for your system, you can [build Garage from source](@/documentation/cookbook/from-source.md). @@ -81,9 +84,8 @@ admin_token = "$(openssl rand -base64 32)" EOF ``` -Now that your configuration file has been created, you can put -it in the right place. By default, garage looks at **`/etc/garage.toml`.** - +Now that your configuration file has been created, you may save it to the directory of your choice. +By default, Garage looks for **`/etc/garage.toml`.** You can also store it somewhere else, but you will have to specify `-c path/to/garage.toml` at each invocation of the `garage` binary (for example: `garage -c ./garage.toml server`, `garage -c ./garage.toml status`). @@ -100,12 +102,14 @@ your data to be persisted properly. ### Launching the Garage server -Use the following command to launch the Garage server with our configuration file: +Use the following command to launch the Garage server: ``` -garage server +garage -c path/to/garage.toml server ``` +If you have placed the `garage.toml` file in `/etc` (its default location), you can simply run `garage server`. + You can tune Garage's verbosity as follows (from less verbose to more verbose): ``` @@ -123,7 +127,7 @@ Log level `debug` can help you check why your S3 API calls are not working. The `garage` utility is also used as a CLI tool to configure your Garage deployment. It uses values from the TOML configuration file to find the Garage daemon running on the local node, therefore if your configuration file is not at `/etc/garage.toml` you will -again have to specify `-c path/to/garage.toml`. +again have to specify `-c path/to/garage.toml` at each invocation. If the `garage` CLI is able to correctly detect the parameters of your local Garage node, the following command should be enough to show the status of your cluster: @@ -137,7 +141,7 @@ This should show something like this: ``` ==== HEALTHY NODES ==== ID Hostname Address Tag Zone Capacity -563e1ac825ee3323… linuxbox 127.0.0.1:3901 NO ROLE ASSIGNED +563e1ac825ee3323 linuxbox 127.0.0.1:3901 NO ROLE ASSIGNED ``` ## Creating a cluster layout @@ -150,12 +154,12 @@ For our test deployment, we are using only one node. The way in which we configu it does not matter, you can simply write: ```bash -garage layout assign -z dc1 -c 1 <node_id> +garage layout assign -z dc1 -c 1G <node_id> ``` where `<node_id>` corresponds to the identifier of the node shown by `garage status` (first column). You can enter simply a prefix of that identifier. -For instance here you could write just `garage layout assign -z dc1 -c 1 563e`. +For instance here you could write just `garage layout assign -z dc1 -c 1G 563e`. The layout then has to be applied to the cluster, using: @@ -206,7 +210,7 @@ one key can access multiple buckets, multiple keys can access one bucket. Create an API key using the following command: ``` -garage key new --name nextcloud-app-key +garage key create nextcloud-app-key ``` The output should look as follows: @@ -266,12 +270,14 @@ named `~/.awsrc` with this content: export AWS_ACCESS_KEY_ID=xxxx # put your Key ID here export AWS_SECRET_ACCESS_KEY=xxxx # put your Secret key here export AWS_DEFAULT_REGION='garage' -export AWS_ENDPOINT='http://localhost:3900' +export AWS_ENDPOINT_URL='http://localhost:3900' -function aws { command aws --endpoint-url $AWS_ENDPOINT $@ ; } aws --version ``` +Note you need to have at least `awscli` `>=1.29.0` or `>=2.13.0`, otherwise you +need to specify `--endpoint-url` explicitly on each `awscli` invocation. + Now, each time you want to use `awscli` on this target, run: ```bash diff --git a/doc/book/reference-manual/admin-api.md b/doc/book/reference-manual/admin-api.md index 363bc886..15630788 100644 --- a/doc/book/reference-manual/admin-api.md +++ b/doc/book/reference-manual/admin-api.md @@ -13,8 +13,11 @@ We will bump the version numbers prefixed to each API endpoint at each time the or semantics change, meaning that code that relies on these endpoint will break when changes are introduced. -The Garage administration API was introduced in version 0.7.2, this document -does not apply to older versions of Garage. +Versions: + - Before Garage 0.7.2 - no admin API + - Garage 0.7.2 - admin APIv0 + - Garage 0.9.0 - admin APIv1, deprecate admin APIv0 + ## Access control @@ -39,15 +42,101 @@ Authorization: Bearer <token> ## Administration API endpoints -### Metrics-related endpoints - -#### Metrics `GET /metrics` +### Metrics `GET /metrics` Returns internal Garage metrics in Prometheus format. +The metrics are directly documented when returned by the API. + +**Example:** + +``` +$ curl -i http://localhost:3903/metrics +HTTP/1.1 200 OK +content-type: text/plain; version=0.0.4 +content-length: 12145 +date: Tue, 08 Aug 2023 07:25:05 GMT + +# HELP api_admin_error_counter Number of API calls to the various Admin API endpoints that resulted in errors +# TYPE api_admin_error_counter counter +api_admin_error_counter{api_endpoint="CheckWebsiteEnabled",status_code="400"} 1 +api_admin_error_counter{api_endpoint="CheckWebsiteEnabled",status_code="404"} 3 +# HELP api_admin_request_counter Number of API calls to the various Admin API endpoints +# TYPE api_admin_request_counter counter +api_admin_request_counter{api_endpoint="CheckWebsiteEnabled"} 7 +api_admin_request_counter{api_endpoint="Health"} 3 +# HELP api_admin_request_duration Duration of API calls to the various Admin API endpoints +... +``` + +### Health `GET /health` + +Returns `200 OK` if enough nodes are up to have a quorum (ie. serve requests), +otherwise returns `503 Service Unavailable`. + +**Example:** + +``` +$ curl -i http://localhost:3903/health +HTTP/1.1 200 OK +content-type: text/plain +content-length: 102 +date: Tue, 08 Aug 2023 07:22:38 GMT + +Garage is fully operational +Consult the full health check API endpoint at /v0/health for more details +``` + +### On-demand TLS `GET /check` + +To prevent abuses for on-demand TLS, Caddy developpers have specified an endpoint that can be queried by the reverse proxy +to know if a given domain is allowed to get a certificate. Garage implements this endpoints to tell if a given domain is handled by Garage or is garbage. + +Garage responds with the following logic: + - If the domain matches the pattern `<bucket-name>.<s3_api.root_domain>`, returns 200 OK + - If the domain matches the pattern `<bucket-name>.<s3_web.root_domain>` and website is configured for `<bucket>`, returns 200 OK + - If the domain matches the pattern `<bucket-name>` and website is configured for `<bucket>`, returns 200 OK + - Otherwise, returns 404 Not Found, 400 Bad Request or 5xx requests. + +*Note 1: because in the path-style URL mode, there is only one domain that is not known by Garage, hence it is not supported by this API endpoint. +You must manually declare the domain in your reverse-proxy. Idem for K2V.* + +*Note 2: buckets in a user's namespace are not supported yet by this endpoint. This is a limitation of this endpoint currently.* + +**Example:** Suppose a Garage instance configured with `s3_api.root_domain = .s3.garage.localhost` and `s3_web.root_domain = .web.garage.localhost`. + +With a private `media` bucket (name in the global namespace, website is disabled), the endpoint will feature the following behavior: + +``` +$ curl -so /dev/null -w "%{http_code}" http://localhost:3903/check?domain=media.s3.garage.localhost +200 +$ curl -so /dev/null -w "%{http_code}" http://localhost:3903/check?domain=media +400 +$ curl -so /dev/null -w "%{http_code}" http://localhost:3903/check?domain=media.web.garage.localhost +400 +``` + +With a public `example.com` bucket (name in the global namespace, website is activated), the endpoint will feature the following behavior: + +``` +$ curl -so /dev/null -w "%{http_code}" http://localhost:3903/check?domain=example.com.s3.garage.localhost +200 +$ curl -so /dev/null -w "%{http_code}" http://localhost:3903/check?domain=example.com +200 +$ curl -so /dev/null -w "%{http_code}" http://localhost:3903/check?domain=example.com.web.garage.localhost +200 +``` + + +**References:** + - [Using On-Demand TLS](https://caddyserver.com/docs/automatic-https#using-on-demand-tls) + - [Add option for a backend check to approve use of on-demand TLS](https://github.com/caddyserver/caddy/pull/1939) + - [Serving tens of thousands of domains over HTTPS with Caddy](https://caddy.community/t/serving-tens-of-thousands-of-domains-over-https-with-caddy/11179) ### Cluster operations -These endpoints are defined on a dedicated [Redocly page](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.html). You can also download its [OpenAPI specification](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.yml). +These endpoints have a dedicated OpenAPI spec. + - APIv1 - [HTML spec](https://garagehq.deuxfleurs.fr/api/garage-admin-v1.html) - [OpenAPI YAML](https://garagehq.deuxfleurs.fr/api/garage-admin-v1.yml) + - APIv0 (deprecated) - [HTML spec](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.html) - [OpenAPI YAML](https://garagehq.deuxfleurs.fr/api/garage-admin-v0.yml) Requesting the API from the command line can be as simple as running: diff --git a/doc/book/reference-manual/configuration.md b/doc/book/reference-manual/configuration.md index b916bb61..18d160bb 100644 --- a/doc/book/reference-manual/configuration.md +++ b/doc/book/reference-manual/configuration.md @@ -8,17 +8,20 @@ weight = 20 Here is an example `garage.toml` configuration file that illustrates all of the possible options: ```toml +replication_mode = "3" + metadata_dir = "/var/lib/garage/meta" data_dir = "/var/lib/garage/data" +metadata_fsync = true +data_fsync = false db_engine = "lmdb" block_size = 1048576 -sled_cache_capacity = 134217728 +sled_cache_capacity = "128MiB" sled_flush_every_ms = 2000 - -replication_mode = "3" +lmdb_map_size = "1T" compression_level = 1 @@ -74,93 +77,64 @@ The following gives details about each available configuration option. ## Available configuration options -### `metadata_dir` - -The directory in which Garage will store its metadata. This contains the node identifier, -the network configuration and the peer list, the list of buckets and keys as well -as the index of all objects, object version and object blocks. - -Store this folder on a fast SSD drive if possible to maximize Garage's performance. - -### `data_dir` - -The directory in which Garage will store the data blocks of objects. -This folder can be placed on an HDD. The space available for `data_dir` -should be counted to determine a node's capacity -when [adding it to the cluster layout](@/documentation/cookbook/real-world.md). - -### `db_engine` (since `v0.8.0`) - -By default, Garage uses the Sled embedded database library -to store its metadata on-disk. Since `v0.8.0`, Garage can use alternative storage backends as follows: - -| DB engine | `db_engine` value | Database path | -| --------- | ----------------- | ------------- | -| [Sled](https://sled.rs) | `"sled"` | `<metadata_dir>/db/` | -| [LMDB](https://www.lmdb.tech) | `"lmdb"` | `<metadata_dir>/db.lmdb/` | -| [Sqlite](https://sqlite.org) | `"sqlite"` | `<metadata_dir>/db.sqlite` | - -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 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 - node cannot be moved to an ARM64 node. Also note that, while LMDB can technically be used on 32-bit systems, - this will limit your node to very small database sizes due to how LMDB works; it is therefore not recommended. -- Sqlite: Garage supports Sqlite as a storage backend for metadata, - however it may have issues and is also very slow in its current implementation, - so it is not recommended to be used for now. - -It is possible to convert Garage's metadata directory from one format to another with a small utility named `convert_db`, -which can be downloaded at the following locations: -[for amd64](https://garagehq.deuxfleurs.fr/_releases/convert_db/amd64/convert_db), -[for i386](https://garagehq.deuxfleurs.fr/_releases/convert_db/i386/convert_db), -[for arm64](https://garagehq.deuxfleurs.fr/_releases/convert_db/arm64/convert_db), -[for arm](https://garagehq.deuxfleurs.fr/_releases/convert_db/arm/convert_db). -The `convert_db` utility is used as folows: - -``` -convert-db -a <input db engine> -i <input db path> \ - -b <output db engine> -o <output db path> -``` - -Make sure to specify the full database path as presented in the table above, -and not just the path to the metadata directory. - -### `block_size` - -Garage splits stored objects in consecutive chunks of size `block_size` -(except the last one which might be smaller). The default size is 1MB and -should work in most cases. We recommend increasing it to e.g. 10MB if -you are using Garage to store large files and have fast network connections -between all nodes (e.g. 1gbps). - -If you are interested in tuning this, feel free to do so (and remember to -report your findings to us!). When this value is changed for a running Garage -installation, only files newly uploaded will be affected. Previously uploaded -files will remain available. This however means that chunks from existing files -will not be deduplicated with chunks from newly uploaded files, meaning you -might use more storage space that is optimally possible. - -### `sled_cache_capacity` - -This parameter can be used to tune the capacity of the cache used by -[sled](https://sled.rs), the database Garage uses internally to store metadata. -Tune this to fit the RAM you wish to make available to your Garage instance. -This value has a conservative default (128MB) so that Garage doesn't use too much -RAM by default, but feel free to increase this for higher performance. - -### `sled_flush_every_ms` - -This parameters can be used to tune the flushing interval of sled. -Increase this if sled is thrashing your SSD, at the risk of losing more data in case -of a power outage (though this should not matter much as data is replicated on other -nodes). The default value, 2000ms, should be appropriate for most use cases. - -### `replication_mode` +### Index + +Top-level configuration options: +[`block_size`](#block_size), +[`bootstrap_peers`](#bootstrap_peers), +[`compression_level`](#compression_level), +[`data_dir`](#metadata_dir), +[`data_fsync`](#data_fsync), +[`db_engine`](#db_engine), +[`lmdb_map_size`](#lmdb_map_size), +[`metadata_dir`](#metadata_dir), +[`metadata_fsync`](#metadata_fsync), +[`replication_mode`](#replication_mode), +[`rpc_bind_addr`](#rpc_bind_addr), +[`rpc_public_addr`](#rpc_public_addr), +[`rpc_secret`](#rpc_secret), +[`rpc_secret_file`](#rpc_secret), +[`sled_cache_capacity`](#sled_cache_capacity), +[`sled_flush_every_ms`](#sled_flush_every_ms). + +The `[consul_discovery]` section: +[`api`](#consul_api), +[`ca_cert`](#consul_ca_cert), +[`client_cert`](#consul_client_cert), +[`client_key`](#consul_client_cert), +[`consul_http_addr`](#consul_http_addr), +[`meta`](#consul_tags), +[`service_name`](#consul_service_name), +[`tags`](#consul_tags), +[`tls_skip_verify`](#consul_tls_skip_verify), +[`token`](#consul_token). + +The `[kubernetes_discovery]` section: +[`namespace`](#kube_namespace), +[`service_name`](#kube_service_name), +[`skip_crd`](#kube_skip_crd). + +The `[s3_api]` section: +[`api_bind_addr`](#s3_api_bind_addr), +[`root_domain`](#s3_root_domain), +[`s3_region`](#s3_region). + +The `[s3_web]` section: +[`bind_addr`](#web_bind_addr), +[`root_domain`](#web_root_domain). + +The `[admin]` section: +[`api_bind_addr`](#admin_api_bind_addr), +[`metrics_token`](#admin_metrics_token), +[`metrics_token_file`](#admin_metrics_token), +[`admin_token`](#admin_token), +[`admin_token_file`](#admin_token), +[`trace_sink`](#admin_trace_sink), + + +### Top-level configuration options + +#### `replication_mode` {#replication_mode} Garage supports the following replication modes: @@ -243,7 +217,160 @@ to the cluster while rebalancing is in progress. In theory, no data should be lost as rebalancing is a routine operation for Garage, although we cannot guarantee you that everything will go right in such an extreme scenario. -### `compression_level` +#### `metadata_dir` {#metadata_dir} + +The directory in which Garage will store its metadata. This contains the node identifier, +the network configuration and the peer list, the list of buckets and keys as well +as the index of all objects, object version and object blocks. + +Store this folder on a fast SSD drive if possible to maximize Garage's performance. + +#### `data_dir` {#data_dir} + +The directory in which Garage will store the data blocks of objects. +This folder can be placed on an HDD. The space available for `data_dir` +should be counted to determine a node's capacity +when [adding it to the cluster layout](@/documentation/cookbook/real-world.md). + +Since `v0.9.0`, Garage supports multiple data directories with the following syntax: + +```toml +data_dir = [ + { path = "/path/to/old_data", read_only = true }, + { path = "/path/to/new_hdd1", capacity = "2T" }, + { path = "/path/to/new_hdd2", capacity = "4T" }, +] +``` + +See [the dedicated documentation page](@/documentation/operations/multi-hdd.md) +on how to operate Garage in such a setup. + +#### `db_engine` (since `v0.8.0`) {#db_engine} + +Since `v0.8.0`, Garage can use alternative storage backends as follows: + +| DB engine | `db_engine` value | Database path | +| --------- | ----------------- | ------------- | +| [LMDB](https://www.lmdb.tech) (default since `v0.9.0`) | `"lmdb"` | `<metadata_dir>/db.lmdb/` | +| [Sled](https://sled.rs) (default up to `v0.8.0`) | `"sled"` | `<metadata_dir>/db/` | +| [Sqlite](https://sqlite.org) | `"sqlite"` | `<metadata_dir>/db.sqlite` | + +Sled was the only database engine up to Garage v0.7.0. Performance issues and +API limitations of Sled prompted the addition of alternative engines in v0.8.0. +Since v0.9.0, LMDB is the default engine instead of Sled, and Sled is +deprecated. We plan to remove Sled in Garage v1.0. + +Performance characteristics of the different DB engines are as follows: + +- Sled: tends to produce large data files and also has performance issues, + especially when the metadata folder is on a traditional HDD and not on SSD. + +- LMDB: the recommended database engine on 64-bit systems, much more + space-efficient 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 node cannot be moved to an ARM64 node. Also note that, while LMDB can + technically be used on 32-bit systems, this will limit your node to very + small database sizes due to how LMDB works; it is therefore not recommended. + +- Sqlite: Garage supports Sqlite as an alternative storage backend for + metadata, and although it has not been tested as much, it is expected to work + satisfactorily. Since Garage v0.9.0, performance issues have largely been + fixed by allowing for a no-fsync mode (see `metadata_fsync`). Sqlite does not + have the database size limitation of LMDB on 32-bit systems. + +It is possible to convert Garage's metadata directory from one format to another +using the `garage convert-db` command, which should be used as follows: + +``` +garage convert-db -a <input db engine> -i <input db path> \ + -b <output db engine> -o <output db path> +``` + +Make sure to specify the full database path as presented in the table above +(third colummn), and not just the path to the metadata directory. + +#### `metadata_fsync` {#metadata_fsync} + +Whether to enable synchronous mode for the database engine or not. +This is disabled (`false`) by default. + +This reduces the risk of metadata corruption in case of power failures, +at the cost of a significant drop in write performance, +as Garage will have to pause to sync data to disk much more often +(several times for API calls such as PutObject). + +Using this option reduces the risk of simultaneous metadata corruption on several +cluster nodes, which could lead to data loss. + +If multi-site replication is used, this option is most likely not necessary, as +it is extremely unlikely that two nodes in different locations will have a +power failure at the exact same time. + +(Metadata corruption on a single node is not an issue, the corrupted data file +can always be deleted and reconstructed from the other nodes in the cluster.) + +Here is how this option impacts the different database engines: + +| Database | `metadata_fsync = false` (default) | `metadata_fsync = true` | +|----------|------------------------------------|-------------------------------| +| Sled | default options | *unsupported* | +| Sqlite | `PRAGMA synchronous = OFF` | `PRAGMA synchronous = NORMAL` | +| LMDB | `MDB_NOMETASYNC` + `MDB_NOSYNC` | `MDB_NOMETASYNC` | + +Note that the Sqlite database is always ran in `WAL` mode (`PRAGMA journal_mode = WAL`). + +#### `data_fsync` {#data_fsync} + +Whether to `fsync` data blocks and their containing directory after they are +saved to disk. +This is disabled (`false`) by default. + +This might reduce the risk that a data block is lost in rare +situations such as simultaneous node losing power, +at the cost of a moderate drop in write performance. + +Similarly to `metatada_fsync`, this is likely not necessary +if geographical replication is used. + +#### `block_size` {#block_size} + +Garage splits stored objects in consecutive chunks of size `block_size` +(except the last one which might be smaller). The default size is 1MiB and +should work in most cases. We recommend increasing it to e.g. 10MiB if +you are using Garage to store large files and have fast network connections +between all nodes (e.g. 1gbps). + +If you are interested in tuning this, feel free to do so (and remember to +report your findings to us!). When this value is changed for a running Garage +installation, only files newly uploaded will be affected. Previously uploaded +files will remain available. This however means that chunks from existing files +will not be deduplicated with chunks from newly uploaded files, meaning you +might use more storage space that is optimally possible. + +#### `sled_cache_capacity` {#sled_cache_capacity} + +This parameter can be used to tune the capacity of the cache used by +[sled](https://sled.rs), the database Garage uses internally to store metadata. +Tune this to fit the RAM you wish to make available to your Garage instance. +This value has a conservative default (128MB) so that Garage doesn't use too much +RAM by default, but feel free to increase this for higher performance. + +#### `sled_flush_every_ms` {#sled_flush_every_ms} + +This parameters can be used to tune the flushing interval of sled. +Increase this if sled is thrashing your SSD, at the risk of losing more data in case +of a power outage (though this should not matter much as data is replicated on other +nodes). The default value, 2000ms, should be appropriate for most use cases. + +#### `lmdb_map_size` {#lmdb_map_size} + +This parameters can be used to set the map size used by LMDB, +which is the size of the virtual memory region used for mapping the database file. +The value of this parameter is the maximum size the metadata database can take. +This value is not bound by the physical RAM size of the machine running Garage. +If not specified, it defaults to 1GiB on 32-bit machines and 1TiB on 64-bit machines. + +#### `compression_level` {#compression_level} Zstd compression level to use for storing blocks. @@ -267,7 +394,7 @@ 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_file` or `GARAGE_RPC_SECRET` (env) +#### `rpc_secret`, `rpc_secret_file` or `GARAGE_RPC_SECRET` (env) {#rpc_secret} 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 @@ -279,7 +406,7 @@ 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` +#### `rpc_bind_addr` {#rpc_bind_addr} The address and port on which to bind for inter-cluster communcations (reffered to as RPC for remote procedure calls). @@ -288,14 +415,14 @@ the node, even in the case of a NAT: the NAT should be configured to forward the port number to the same internal port nubmer. This means that if you have several nodes running behind a NAT, they should each use a different RPC port number. -### `rpc_public_addr` +#### `rpc_public_addr` {#rpc_public_addr} The address and port that other nodes need to use to contact this node for RPC calls. **This parameter is optional but recommended.** In case you have a NAT that binds the RPC port to a port that is different on your public IP, this field might help making it work. -### `bootstrap_peers` +#### `bootstrap_peers` {#bootstrap_peers} A list of peer identifiers on which to contact other Garage peers of this cluster. These peer identifiers have the following syntax: @@ -312,42 +439,42 @@ key will be returned by `garage node id` and you will have to add the IP yourself. -## The `[consul_discovery]` section +### The `[consul_discovery]` section Garage supports discovering other nodes of the cluster using Consul. For this to work correctly, nodes need to know their IP address by which they can be reached by other nodes of the cluster, which should be set in `rpc_public_addr`. -### `consul_http_addr` and `service_name` +#### `consul_http_addr` {#consul_http_addr} The `consul_http_addr` parameter should be set to the full HTTP(S) address of the Consul server. -### `api` +#### `api` {#consul_api} Two APIs for service registration are supported: `catalog` and `agent`. `catalog`, the default, will register a service using the `/v1/catalog` endpoints, enabling mTLS if `client_cert` and `client_key` are provided. The `agent` API uses the `v1/agent` endpoints instead, where an optional `token` may be provided. -### `service_name` +#### `service_name` {#consul_service_name} `service_name` should be set to the service name under which Garage's RPC ports are announced. -### `client_cert`, `client_key` +#### `client_cert`, `client_key` {#consul_client_cert} TLS client certificate and client key to use when communicating with Consul over TLS. Both are mandatory when doing so. Only available when `api = "catalog"`. -### `ca_cert` +#### `ca_cert` {#consul_ca_cert} TLS CA certificate to use when communicating with Consul over TLS. -### `tls_skip_verify` +#### `tls_skip_verify` {#consul_tls_skip_verify} Skip server hostname verification in TLS handshake. `ca_cert` is ignored when this is set. -### `token` +#### `token` {#consul_token} Uses the provided token for communication with Consul. Only available when `api = "agent"`. The policy assigned to this token should at least have these rules: @@ -367,47 +494,49 @@ node_prefix "" { } ``` -### `tags` and `meta` +#### `tags` and `meta` {#consul_tags} Additional list of tags and map of service meta to add during service registration. -## The `[kubernetes_discovery]` section +### The `[kubernetes_discovery]` section Garage supports discovering other nodes of the cluster using kubernetes custom resources. For this to work, a `[kubernetes_discovery]` section must be present with at least the `namespace` and `service_name` parameters. -### `namespace` +#### `namespace` {#kube_namespace} `namespace` sets the namespace in which the custom resources are configured. -### `service_name` +#### `service_name` {#kube_service_name} `service_name` is added as a label to the advertised resources to filter them, to allow for multiple deployments in a single namespace. -### `skip_crd` +#### `skip_crd` {#kube_skip_crd} `skip_crd` can be set to true to disable the automatic creation and patching of the `garagenodes.deuxfleurs.fr` CRD. You will need to create the CRD manually. -## The `[s3_api]` section +### The `[s3_api]` section -### `api_bind_addr` +#### `api_bind_addr` {#s3_api_bind_addr} The IP and port on which to bind for accepting S3 API calls. This endpoint does not suport TLS: a reverse proxy should be used to provide it. -### `s3_region` +Alternatively, since `v0.8.5`, a path can be used to create a unix socket with 0222 mode. + +#### `s3_region` {#s3_region} Garage will accept S3 API calls that are targetted to the S3 region defined here. API calls targetted to other regions will fail with a AuthorizationHeaderMalformed error message that redirects the client to the correct region. -### `root_domain` {#root_domain} +#### `root_domain` {#s3_root_domain} The optional suffix to access bucket using vhost-style in addition to path-style request. Note path-style requests are always enabled, whether or not vhost-style is configured. @@ -419,18 +548,20 @@ using the hostname `my-bucket.s3.garage.eu`. -## The `[s3_web]` section +### The `[s3_web]` section Garage allows to publish content of buckets as websites. This section configures the behaviour of this module. -### `bind_addr` +#### `bind_addr` {#web_bind_addr} The IP and port on which to bind for accepting HTTP requests to buckets configured for website access. This endpoint does not suport TLS: a reverse proxy should be used to provide it. -### `root_domain` +Alternatively, since `v0.8.5`, a path can be used to create a unix socket with 0222 mode. + +#### `root_domain` {#web_root_domain} The optional suffix appended to bucket names for the corresponding HTTP Host. @@ -439,17 +570,20 @@ will be accessible either with hostname `deuxfleurs.fr.web.garage.eu` or with hostname `deuxfleurs.fr`. -## The `[admin]` section +### The `[admin]` section Garage has a few administration capabilities, in particular to allow remote monitoring. These features are detailed below. -### `api_bind_addr` +#### `api_bind_addr` {#admin_api_bind_addr} 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`, `metrics_token_file` or `GARAGE_METRICS_TOKEN` (env) +Alternatively, since `v0.8.5`, a path can be used to create a unix socket. Note that for security reasons, +the socket will have 0220 mode. Make sure to set user and group permissions accordingly. + +#### `metrics_token`, `metrics_token_file` or `GARAGE_METRICS_TOKEN` (env) {#admin_metrics_token} The token for accessing the Metrics endpoint. If this token is not set, the Metrics endpoint can be accessed without access control. @@ -460,7 +594,7 @@ You can use any random string for this value. We recommend generating a random t `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) +#### `admin_token`, `admin_token_file` or `GARAGE_ADMIN_TOKEN` (env) {#admin_token} The token for accessing all of the other administration endpoints. If this token is not set, access to these endpoints is disabled entirely. @@ -471,7 +605,7 @@ You can use any random string for this value. We recommend generating a random t `admin_token_file` and the `GARAGE_ADMIN_TOKEN` environment variable are supported since Garage `v0.8.2`. -### `trace_sink` +#### `trace_sink` {#admin_trace_sink} Optionally, the address of an OpenTelemetry collector. If specified, Garage will send traces in the OpenTelemetry format to this endpoint. These diff --git a/doc/book/reference-manual/features.md b/doc/book/reference-manual/features.md index 2f8e633a..e8ba9510 100644 --- a/doc/book/reference-manual/features.md +++ b/doc/book/reference-manual/features.md @@ -52,7 +52,7 @@ This is particularly usefull when nodes are far from one another and talk to one Garage supports a variety of replication modes, with 1 copy, 2 copies or 3 copies of your data, and with various levels of consistency, in order to adapt to a variety of usage scenarios. -Read our reference page on [supported replication modes](@/documentation/reference-manual/configuration.md#replication-mode) +Read our reference page on [supported replication modes](@/documentation/reference-manual/configuration.md#replication_mode) to select the replication mode best suited to your use case (hint: in most cases, `replication_mode = "3"` is what you want). ### Web server for static websites diff --git a/doc/book/reference-manual/s3-compatibility.md b/doc/book/reference-manual/s3-compatibility.md index 15b29bd1..1bcfd123 100644 --- a/doc/book/reference-manual/s3-compatibility.md +++ b/doc/book/reference-manual/s3-compatibility.md @@ -75,16 +75,13 @@ but these endpoints are documented in [Red Hat Ceph Storage - Chapter 2. Ceph Ob | Endpoint | Garage | [Openstack Swift](https://docs.openstack.org/swift/latest/s3_compat.html) | [Ceph Object Gateway](https://docs.ceph.com/en/latest/radosgw/s3/) | [Riak CS](https://docs.riak.com/riak/cs/2.1.1/references/apis/storage/s3/index.html) | [OpenIO](https://docs.openio.io/latest/source/arch-design/s3_compliancy.html) | |------------------------------|----------------------------------|-----------------|---------------|---------|-----| -| [AbortMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | -| [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html) | ✅ Implemented (see details below) | ✅ | ✅ | ✅ | ✅ | -| [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) | ✅ Implemented | ✅| ✅ | ✅ | ✅ | -| [ListMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUpload.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | -| [ListParts](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | -| [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html) | ✅ Implemented (see details below) | ✅ | ✅| ✅ | ✅ | -| [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | - -Our implementation of Multipart Upload is currently a bit more restrictive than Amazon's one in some edge cases. -For more information, please refer to our [issue tracker](https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/204). +| [AbortMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | +| [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | +| [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) | ✅ Implemented | ✅| ✅ | ✅ | ✅ | +| [ListMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUpload.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | +| [ListParts](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | +| [UploadPart](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html) | ✅ Implemented | ✅ | ✅| ✅ | ✅ | +| [UploadPartCopy](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html) | ✅ Implemented | ✅ | ✅ | ✅ | ✅ | ### Website endpoints @@ -127,15 +124,22 @@ If you need this feature, please [share your use case in our dedicated issue](ht | Endpoint | Garage | [Openstack Swift](https://docs.openstack.org/swift/latest/s3_compat.html) | [Ceph Object Gateway](https://docs.ceph.com/en/latest/radosgw/s3/) | [Riak CS](https://docs.riak.com/riak/cs/2.1.1/references/apis/storage/s3/index.html) | [OpenIO](https://docs.openio.io/latest/source/arch-design/s3_compliancy.html) | |------------------------------|----------------------------------|-----------------|---------------|---------|-----| -| [DeleteBucketLifecycle](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html) | ❌ Missing | ❌| ✅| ❌| ✅| -| [GetBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html) | ❌ Missing | ❌| ✅ | ❌| ✅| -| [PutBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html) | ❌ Missing | ❌| ✅ | ❌| ✅| +| [DeleteBucketLifecycle](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteBucketLifecycle.html) | ✅ Implemented | ❌| ✅| ❌| ✅| +| [GetBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketLifecycleConfiguration.html) | ✅ Implemented | ❌| ✅ | ❌| ✅| +| [PutBucketLifecycleConfiguration](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html) | ⚠ Partially implemented (see below) | ❌| ✅ | ❌| ✅| | [GetBucketVersioning](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html) | ❌ Stub (see below) | ✅| ✅ | ❌| ✅| | [ListObjectVersions](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html) | ❌ Missing | ❌| ✅ | ❌| ✅| | [PutBucketVersioning](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html) | ❌ Missing | ❌| ✅| ❌| ✅| +**PutBucketLifecycleConfiguration:** The only actions supported are +`AbortIncompleteMultipartUpload` and `Expiration` (without the +`ExpiredObjectDeleteMarker` field). All other operations are dependent on +either bucket versionning or storage classes which Garage currently does not +implement. The deprecated `Prefix` member directly in the the `Rule` +structure/XML tag is not supported, specified prefixes must be inside the +`Filter` structure/XML tag. -**GetBucketVersioning:** Stub implementation (Garage does not yet support versionning so this always returns "versionning not enabled"). +**GetBucketVersioning:** Stub implementation which always returns "versionning not enabled", since Garage does not yet support bucket versionning. ### Replication endpoints diff --git a/doc/book/working-documents/migration-09.md b/doc/book/working-documents/migration-09.md new file mode 100644 index 00000000..ba758093 --- /dev/null +++ b/doc/book/working-documents/migration-09.md @@ -0,0 +1,72 @@ ++++ +title = "Migrating from 0.8 to 0.9" +weight = 12 ++++ + +**This guide explains how to migrate to 0.9 if you have an existing 0.8 cluster. +We don't recommend trying to migrate to 0.9 directly from 0.7 or older.** + +This migration procedure has been tested on several clusters without issues. +However, it is still a *critical procedure* that might cause issues. +**Make sure to back up all your data before attempting it!** + +You might also want to read our [general documentation on upgrading Garage](@/documentation/operations/upgrading.md). + +The following are **breaking changes** in Garage v0.9 that require your attention when migrating: + +- LMDB is now the default metadata db engine and Sled is deprecated. If you were using Sled, make sure to specify `db_engine = "sled"` in your configuration file, or take the time to [convert your database](https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#db-engine-since-v0-8-0). + +- Capacity values are now in actual byte units. The translation from the old layout will assign 1 capacity = 1Gb by default, which might be wrong for your cluster. This does not cause any data to be moved around, but you might want to re-assign correct capacity values post-migration. + +- Multipart uploads that were started in Garage v0.8 will not be visible in Garage v0.9 and will have to be restarted from scratch. + +- Changes to the admin API: some `v0/` endpoints have been replaced by `v1/` counterparts with updated/uniformized syntax. All other endpoints have also moved to `v1/` by default, without syntax changes, but are still available under `v0/` for compatibility. + + +## Simple migration procedure (takes cluster offline for a while) + +The migration steps are as follows: + +1. Disable API and web access. You may do this by stopping your reverse proxy or by commenting out + the `api_bind_addr` values in your `config.toml` file and restarting Garage. +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 (`versions`, `block_refs`, etc.) +3. Check that the block resync queue and Merkle queue are empty: + run `garage stats -a` to query them or inspect metrics in the Grafana dashboard. +4. Turn off Garage v0.8 +5. **Backup the metadata folder of all your nodes!** For instance, use the following command + if your metadata directory is `/var/lib/garage/meta`: `cd /var/lib/garage ; tar -acf meta-v0.8.tar.zst meta/` +6. Install Garage v0.9 +7. Update your configuration file if necessary. +8. Turn on Garage v0.9 +9. Do `garage repair --all-nodes --yes tables` and `garage repair --all-nodes --yes blocks`. + Wait for a full table sync to run. +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. +12. You might want to assign correct capacity values to all your nodes. Doing so might cause data to be moved + in your cluster, which should also be monitored carefully. + +## Minimal downtime migration procedure + +The migration to Garage v0.9 can be done with almost no downtime, +by restarting all nodes at once in the new version. + +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.9 + +4. Shut down all v0.8 nodes simultaneously, and restart them all simultaneously in v0.9. + Use your favorite deployment tool (Ansible, Kubernetes, Nomad) to achieve this as fast as possible. + Garage v0.9 should be in a working state as soon as it starts. + +5. Proceed with repair and monitoring as described in steps 9-12 above. diff --git a/doc/drafts/admin-api.md b/doc/drafts/admin-api.md index fb71dc83..411f6418 100644 --- a/doc/drafts/admin-api.md +++ b/doc/drafts/admin-api.md @@ -52,11 +52,11 @@ Returns an HTTP status 200 if the node is ready to answer user's requests, and an HTTP status 503 (Service Unavailable) if there are some partitions for which a quorum of nodes is not available. A simple textual message is also returned in a body with content-type `text/plain`. -See `/v0/health` for an API that also returns JSON output. +See `/v1/health` for an API that also returns JSON output. ### Cluster operations -#### GetClusterStatus `GET /v0/status` +#### GetClusterStatus `GET /v1/status` Returns the cluster's current status in JSON, including: @@ -70,86 +70,112 @@ Example response body: ```json { "node": "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f", - "garage_version": "git:v0.8.0", - "knownNodes": { - "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f": { + "garageVersion": "git:v0.9.0-dev", + "garageFeatures": [ + "k2v", + "sled", + "lmdb", + "sqlite", + "metrics", + "bundled-libs" + ], + "rustVersion": "1.68.0", + "dbEngine": "LMDB (using Heed crate)", + "knownNodes": [ + { + "id": "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f", "addr": "10.0.0.11:3901", - "is_up": true, - "last_seen_secs_ago": 9, + "isUp": true, + "lastSeenSecsAgo": 9, "hostname": "node1" }, - "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": { + { + "id": "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff", "addr": "10.0.0.12:3901", - "is_up": true, - "last_seen_secs_ago": 1, + "isUp": true, + "lastSeenSecsAgo": 1, "hostname": "node2" }, - "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27": { + { + "id": "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27", "addr": "10.0.0.21:3901", - "is_up": true, - "last_seen_secs_ago": 7, + "isUp": true, + "lastSeenSecsAgo": 7, "hostname": "node3" }, - "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": { + { + "id": "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b", "addr": "10.0.0.22:3901", - "is_up": true, - "last_seen_secs_ago": 1, + "isUp": true, + "lastSeenSecsAgo": 1, "hostname": "node4" } - }, + ], "layout": { "version": 12, - "roles": { - "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f": { + "roles": [ + { + "id": "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f", "zone": "dc1", - "capacity": 4, + "capacity": 10737418240, "tags": [ "node1" ] }, - "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": { + { + "id": "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff", "zone": "dc1", - "capacity": 6, + "capacity": 10737418240, "tags": [ "node2" ] }, - "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27": { + { + "id": "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27", "zone": "dc2", - "capacity": 10, + "capacity": 10737418240, "tags": [ "node3" ] } - }, - "stagedRoleChanges": { - "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": { + ], + "stagedRoleChanges": [ + { + "id": "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b", + "remove": false, "zone": "dc2", - "capacity": 5, + "capacity": 10737418240, "tags": [ "node4" ] } - } + { + "id": "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27", + "remove": true, + "zone": null, + "capacity": null, + "tags": null, + } + ] } } ``` -#### GetClusterHealth `GET /v0/health` +#### GetClusterHealth `GET /v1/health` Returns the cluster's current health in JSON format, with the following variables: -- `status`: one of `Healthy`, `Degraded` or `Unavailable`: - - Healthy: Garage node is connected to all storage nodes - - Degraded: Garage node is not connected to all storage nodes, but a quorum of write nodes is available for all partitions - - Unavailable: a quorum of write nodes is not available for some partitions -- `known_nodes`: the number of nodes this Garage node has had a TCP connection to since the daemon started -- `connected_nodes`: the nubmer of nodes this Garage node currently has an open connection to -- `storage_nodes`: the number of storage nodes currently registered in the cluster layout -- `storage_nodes_ok`: the number of storage nodes to which a connection is currently open +- `status`: one of `healthy`, `degraded` or `unavailable`: + - healthy: Garage node is connected to all storage nodes + - degraded: Garage node is not connected to all storage nodes, but a quorum of write nodes is available for all partitions + - unavailable: a quorum of write nodes is not available for some partitions +- `knownNodes`: the number of nodes this Garage node has had a TCP connection to since the daemon started +- `connectedNodes`: the nubmer of nodes this Garage node currently has an open connection to +- `storageNodes`: the number of storage nodes currently registered in the cluster layout +- `storageNodesOk`: the number of storage nodes to which a connection is currently open - `partitions`: the total number of partitions of the data (currently always 256) -- `partitions_quorum`: the number of partitions for which a quorum of write nodes is available -- `partitions_all_ok`: the number of partitions for which we are connected to all storage nodes responsible of storing it +- `partitionsQuorum`: the number of partitions for which a quorum of write nodes is available +- `partitionsAllOk`: the number of partitions for which we are connected to all storage nodes responsible of storing it Contrarily to `GET /health`, this endpoint always returns a 200 OK HTTP response code. @@ -157,18 +183,18 @@ Example response body: ```json { - "status": "Degraded", - "known_nodes": 3, - "connected_nodes": 2, - "storage_nodes": 3, - "storage_nodes_ok": 2, - "partitions": 256, - "partitions_quorum": 256, - "partitions_all_ok": 0 + "status": "degraded", + "knownNodes": 3, + "connectedNodes": 3, + "storageNodes": 4, + "storageNodesOk": 3, + "partitions": 256, + "partitionsQuorum": 256, + "partitionsAllOk": 64 } ``` -#### ConnectClusterNodes `POST /v0/connect` +#### ConnectClusterNodes `POST /v1/connect` Instructs this Garage node to connect to other Garage nodes at specified addresses. @@ -198,7 +224,7 @@ Example response: ] ``` -#### GetClusterLayout `GET /v0/layout` +#### GetClusterLayout `GET /v1/layout` Returns the cluster's current layout in JSON, including: @@ -212,42 +238,54 @@ Example response body: ```json { "version": 12, - "roles": { - "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f": { + "roles": [ + { + "id": "ec79480e0ce52ae26fd00c9da684e4fa56658d9c64cdcecb094e936de0bfe71f", "zone": "dc1", - "capacity": 4, + "capacity": 10737418240, "tags": [ "node1" ] }, - "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff": { + { + "id": "4a6ae5a1d0d33bf895f5bb4f0a418b7dc94c47c0dd2eb108d1158f3c8f60b0ff", "zone": "dc1", - "capacity": 6, + "capacity": 10737418240, "tags": [ "node2" ] }, - "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27": { + { + "id": "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27", "zone": "dc2", - "capacity": 10, + "capacity": 10737418240, "tags": [ "node3" ] } - }, - "stagedRoleChanges": { - "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b": { + ], + "stagedRoleChanges": [ + { + "id": "e2ee7984ee65b260682086ec70026165903c86e601a4a5a501c1900afe28d84b", + "remove": false, "zone": "dc2", - "capacity": 5, + "capacity": 10737418240, "tags": [ "node4" ] } - } + { + "id": "23ffd0cdd375ebff573b20cc5cef38996b51c1a7d6dbcf2c6e619876e507cf27", + "remove": true, + "zone": null, + "capacity": null, + "tags": null, + } + ] } ``` -#### UpdateClusterLayout `POST /v0/layout` +#### UpdateClusterLayout `POST /v1/layout` Send modifications to the cluster layout. These modifications will be included in the staged role changes, visible in subsequent calls @@ -259,8 +297,9 @@ the layout. Request body format: ```json -{ - <node_id>: { +[ + { + "id": <node_id>, "capacity": <new_capacity>, "zone": <new_zone>, "tags": [ @@ -268,17 +307,22 @@ Request body format: ... ] }, - <node_id_to_remove>: null, - ... -} + { + "id": <node_id_to_remove>, + "remove": true + } +] ``` Contrary to the CLI that may update only a subset of the fields `capacity`, `zone` and `tags`, when calling this API all of these values must be specified. +This returns the new cluster layout with the proposed staged changes, +as returned by GetClusterLayout. + -#### ApplyClusterLayout `POST /v0/layout/apply` +#### ApplyClusterLayout `POST /v1/layout/apply` Applies to the cluster the layout changes currently registered as staged layout changes. @@ -295,7 +339,10 @@ Similarly to the CLI, the body must include the version of the new layout that will be created, which MUST be 1 + the value of the currently existing layout in the cluster. -#### RevertClusterLayout `POST /v0/layout/revert` +This returns the message describing all the calculations done to compute the new +layout, as well as the description of the layout as returned by GetClusterLayout. + +#### RevertClusterLayout `POST /v1/layout/revert` Clears all of the staged layout changes. @@ -313,10 +360,13 @@ Similarly to the CLI, the body must include the incremented version number, which MUST be 1 + the value of the currently existing layout in the cluster. +This returns the new cluster layout with all changes reverted, +as returned by GetClusterLayout. + ### Access key operations -#### ListKeys `GET /v0/key` +#### ListKeys `GET /v1/key` Returns all API access keys in the cluster. @@ -335,34 +385,8 @@ Example response: ] ``` -#### CreateKey `POST /v0/key` - -Creates a new API access key. - -Request body format: - -```json -{ - "name": "NameOfMyKey" -} -``` - -#### ImportKey `POST /v0/key/import` - -Imports an existing API key. - -Request body format: - -```json -{ - "accessKeyId": "GK31c2f218a2e44f485b94239e", - "secretAccessKey": "b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835", - "name": "NameOfMyKey" -} -``` - -#### GetKeyInfo `GET /v0/key?id=<acces key id>` -#### GetKeyInfo `GET /v0/key?search=<pattern>` +#### GetKeyInfo `GET /v1/key?id=<acces key id>` +#### GetKeyInfo `GET /v1/key?search=<pattern>` Returns information about the requested API access key. @@ -370,6 +394,9 @@ If `id` is set, the key is looked up using its exact identifier (faster). If `search` is set, the key is looked up using its name or prefix of identifier (slower, all keys are enumerated to do this). +Optionnally, the query parameter `showSecretKey=true` can be set to reveal the +associated secret access key. + Example response: ```json @@ -433,11 +460,40 @@ Example response: } ``` -#### DeleteKey `DELETE /v0/key?id=<acces key id>` +#### CreateKey `POST /v1/key` -Deletes an API access key. +Creates a new API access key. -#### UpdateKey `POST /v0/key?id=<acces key id>` +Request body format: + +```json +{ + "name": "NameOfMyKey" +} +``` + +This returns the key info, including the created secret key, +in the same format as the result of GetKeyInfo. + +#### ImportKey `POST /v1/key/import` + +Imports an existing API key. +This will check that the imported key is in the valid format, i.e. +is a key that could have been generated by Garage. + +Request body format: + +```json +{ + "accessKeyId": "GK31c2f218a2e44f485b94239e", + "secretAccessKey": "b892c0665f0ada8a4755dae98baa3b133590e11dae3bcc1f9d769d67f16c3835", + "name": "NameOfMyKey" +} +``` + +This returns the key info in the same format as the result of GetKeyInfo. + +#### UpdateKey `POST /v1/key?id=<acces key id>` Updates information about the specified API access key. @@ -457,10 +513,16 @@ All fields (`name`, `allow` and `deny`) are optional. If they are present, the corresponding modifications are applied to the key, otherwise nothing is changed. The possible flags in `allow` and `deny` are: `createBucket`. +This returns the key info in the same format as the result of GetKeyInfo. + +#### DeleteKey `DELETE /v1/key?id=<acces key id>` + +Deletes an API access key. + ### Bucket operations -#### ListBuckets `GET /v0/bucket` +#### ListBuckets `GET /v1/bucket` Returns all storage buckets in the cluster. @@ -502,8 +564,8 @@ Example response: ] ``` -#### GetBucketInfo `GET /v0/bucket?id=<bucket id>` -#### GetBucketInfo `GET /v0/bucket?globalAlias=<alias>` +#### GetBucketInfo `GET /v1/bucket?id=<bucket id>` +#### GetBucketInfo `GET /v1/bucket?globalAlias=<alias>` Returns information about the requested storage bucket. @@ -535,7 +597,10 @@ Example response: ], "objects": 14827, "bytes": 13189855625, - "unfinshedUploads": 0, + "unfinishedUploads": 1, + "unfinishedMultipartUploads": 1, + "unfinishedMultipartUploadParts": 11, + "unfinishedMultipartUploadBytes": 41943040, "quotas": { "maxSize": null, "maxObjects": null @@ -543,7 +608,7 @@ Example response: } ``` -#### CreateBucket `POST /v0/bucket` +#### CreateBucket `POST /v1/bucket` Creates a new storage bucket. @@ -583,13 +648,7 @@ or no alias at all. Technically, you can also specify both `globalAlias` and `localAlias` and that would create two aliases, but I don't see why you would want to do that. -#### DeleteBucket `DELETE /v0/bucket?id=<bucket id>` - -Deletes a storage bucket. A bucket cannot be deleted if it is not empty. - -Warning: this will delete all aliases associated with the bucket! - -#### UpdateBucket `PUT /v0/bucket?id=<bucket id>` +#### UpdateBucket `PUT /v1/bucket?id=<bucket id>` Updates configuration of the given bucket. @@ -621,9 +680,16 @@ In `quotas`: new values of `maxSize` and `maxObjects` must both be specified, or to remove the quotas. An absent value will be considered the same as a `null`. It is not possible to change only one of the two quotas. +#### DeleteBucket `DELETE /v1/bucket?id=<bucket id>` + +Deletes a storage bucket. A bucket cannot be deleted if it is not empty. + +Warning: this will delete all aliases associated with the bucket! + + ### Operations on permissions for keys on buckets -#### BucketAllowKey `POST /v0/bucket/allow` +#### BucketAllowKey `POST /v1/bucket/allow` Allows a key to do read/write/owner operations on a bucket. @@ -644,7 +710,7 @@ Request body format: Flags in `permissions` which have the value `true` will be activated. Other flags will remain unchanged. -#### BucketDenyKey `POST /v0/bucket/deny` +#### BucketDenyKey `POST /v1/bucket/deny` Denies a key from doing read/write/owner operations on a bucket. @@ -668,19 +734,19 @@ Other flags will remain unchanged. ### Operations on bucket aliases -#### GlobalAliasBucket `PUT /v0/bucket/alias/global?id=<bucket id>&alias=<global alias>` +#### GlobalAliasBucket `PUT /v1/bucket/alias/global?id=<bucket id>&alias=<global alias>` Empty body. Creates a global alias for a bucket. -#### GlobalUnaliasBucket `DELETE /v0/bucket/alias/global?id=<bucket id>&alias=<global alias>` +#### GlobalUnaliasBucket `DELETE /v1/bucket/alias/global?id=<bucket id>&alias=<global alias>` Removes a global alias for a bucket. -#### LocalAliasBucket `PUT /v0/bucket/alias/local?id=<bucket id>&accessKeyId=<access key ID>&alias=<local alias>` +#### LocalAliasBucket `PUT /v1/bucket/alias/local?id=<bucket id>&accessKeyId=<access key ID>&alias=<local alias>` Empty body. Creates a local alias for a bucket in the namespace of a specific access key. -#### LocalUnaliasBucket `DELETE /v0/bucket/alias/local?id=<bucket id>&accessKeyId<access key ID>&alias=<local alias>` +#### LocalUnaliasBucket `DELETE /v1/bucket/alias/local?id=<bucket id>&accessKeyId<access key ID>&alias=<local alias>` Removes a local alias for a bucket in the namespace of a specific access key. diff --git a/doc/optimal_layout_report/.gitignore b/doc/optimal_layout_report/.gitignore new file mode 100644 index 00000000..d5e59136 --- /dev/null +++ b/doc/optimal_layout_report/.gitignore @@ -0,0 +1,13 @@ +optimal_layout.aux +optimal_layout.log +optimal_layout.synctex.gz +optimal_layout.bbl +optimal_layout.blg + +geodistrib.aux +geodistrib.bbl +geodistrib.blg +geodistrib.log +geodistrib.out +geodistrib.synctex.gz + diff --git a/doc/optimal_layout_report/figures/flow.pdf b/doc/optimal_layout_report/figures/flow.pdf Binary files differnew file mode 100644 index 00000000..3546ad0a --- /dev/null +++ b/doc/optimal_layout_report/figures/flow.pdf diff --git a/doc/optimal_layout_report/figures/flow.svg b/doc/optimal_layout_report/figures/flow.svg new file mode 100644 index 00000000..e370755e --- /dev/null +++ b/doc/optimal_layout_report/figures/flow.svg @@ -0,0 +1,2205 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:ns3="http://www.iki.fi/pav/software/textext/" + 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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + viewBox="0 0 210 297" + version="1.1" + id="svg8" + sodipodi:docname="flow.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <defs + id="defs2"> + <marker + style="overflow:visible;" + id="marker5128" + 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="path5126" /> + </marker> + <marker + style="overflow:visible;" + id="marker5020" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path5018" /> + </marker> + <marker + style="overflow:visible;" + id="marker4918" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4916" /> + </marker> + <marker + style="overflow:visible;" + id="marker4822" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4820" /> + </marker> + <marker + style="overflow:visible;" + id="marker4732" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4730" /> + </marker> + <marker + style="overflow:visible;" + id="marker4648" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4646" /> + </marker> + <marker + style="overflow:visible;" + id="marker4570" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4568" /> + </marker> + <marker + style="overflow:visible;" + id="marker4498" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4496" /> + </marker> + <marker + style="overflow:visible;" + id="marker4432" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4430" /> + </marker> + <marker + style="overflow:visible;" + id="marker4372" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4370" /> + </marker> + <marker + style="overflow:visible;" + id="marker4318" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4316" /> + </marker> + <marker + style="overflow:visible;" + id="marker4270" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268" /> + </marker> + <marker + style="overflow:visible;" + id="marker4228" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4226" /> + </marker> + <marker + style="overflow:visible;" + id="marker4192" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4190" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow1Lend" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path3903" /> + </marker> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-5"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-5" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-6"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-2" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-1" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-7" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-9" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-3"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-6" /> + </symbol> + </g> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff-5"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253-9"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442-2" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5-2"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525-8" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-3"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-1"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-9" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-4"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-7" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-8"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-4" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-5"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-0" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-6" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-1"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-0" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-9"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-37"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-4" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-5"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-25" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-4"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-7" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-4" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-30"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-7" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-8"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-68" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-4"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-50" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-48"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-71" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-2" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-7"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-2" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-2"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-61" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-0"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-61" /> + </symbol> + </g> + <g + id="id-f665f0ad-6acc-4c65-818f-65538ae870ec-7"> + <symbol + overflow="visible" + id="id-b528872c-9c37-40cc-8f3c-4a3820527247-7"> + <path + style="stroke:none" + d="" + id="id-b9b64af8-af4d-498f-81ae-f2cb3b370123-6" /> + </symbol> + <symbol + overflow="visible" + id="id-d0bf1643-b2f5-444d-a657-4aaefc6c89d4-7"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-311ed8ac-5c86-4922-8ddd-c8730c4eb1f1-3" /> + </symbol> + <symbol + overflow="visible" + id="id-1911bbd6-3c25-4e44-b82f-6e209a9efbf4-6"> + <path + style="stroke:none" + d="" + id="id-ad0a7a76-9842-4d63-89a8-c9c17aa71c17-5" /> + </symbol> + <symbol + overflow="visible" + id="id-756b752a-2988-4d30-9ec2-f35e31955def-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-3ec43921-ba3b-4f7d-b817-b8c615e98630-3" /> + </symbol> + </g> + <g + id="id-f98b961b-31b5-4c0f-bfb1-2760408a739a-8"> + <symbol + overflow="visible" + id="id-4737c041-b95c-4219-8e7e-c562852710ea-5"> + <path + style="stroke:none" + d="" + id="id-c55a79d7-b066-4a99-ae31-2b04d4c628d0-0" /> + </symbol> + <symbol + overflow="visible" + id="id-80361aa1-942d-4c7e-b9e6-0b746bab4670-9"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-46772014-ff2f-4c4f-bd9c-546c16e45ebe-6" /> + </symbol> + <symbol + overflow="visible" + id="id-8dac91f2-ce64-4971-ad7d-d446cd8c9c1c-3"> + <path + style="stroke:none" + d="" + id="id-604b9e94-17f8-4699-8fca-83a7170f9ad1-8" /> + </symbol> + <symbol + overflow="visible" + id="id-7656f371-933a-4b40-8c22-717f88b408ac-5"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-99006318-9528-4ad3-a74f-c639da460421-6" /> + </symbol> + </g> + <g + id="id-71316add-b757-483c-8195-02b65d505b23-3"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f-4" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe-4" /> + </symbol> + </g> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff-8"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253-5"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442-7" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5-4"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525-1" /> + </symbol> + </g> + <g + id="id-e9cdbc45-842a-4299-856a-e73e8a96598a-8"> + <symbol + overflow="visible" + id="id-4c9afea4-0492-4e68-ad02-526d968a9dda-8"> + <path + style="stroke:none" + d="" + id="id-022447e8-2b8e-45a6-9421-6bb9cee18fb8-3" /> + </symbol> + <symbol + overflow="visible" + id="id-eb4351ed-2b75-4189-9149-06b49bb09d39-1"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-9793d5ee-1e50-443d-8e24-59e74686be5c-8" /> + </symbol> + <symbol + overflow="visible" + id="id-acdb85cf-666d-461d-bcc6-3145d4b5a194-9"> + <path + style="stroke:none" + d="" + id="id-974496ba-fe40-4bde-9d6c-97d29282be67-6" /> + </symbol> + <symbol + overflow="visible" + id="id-a9937435-0508-4c68-9850-f26d0b685df1-4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-9c0b6904-6368-4d8f-ad75-244ef0a02a48-3" /> + </symbol> + <symbol + overflow="visible" + id="id-4dbc287f-4992-4820-8c67-423900ff8378-3"> + <path + style="stroke:none" + d="" + id="id-d9c1862f-dbd4-4f66-9f79-92002bb14eb8-3" /> + </symbol> + <symbol + overflow="visible" + id="id-7933b5d5-7f25-482f-b30b-4ba167fd355d-8"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-7f05503e-8203-4760-910b-5af86e2658b9-6" /> + </symbol> + </g> + <g + id="id-eea55ade-e2c2-48c1-a3f1-d65d7b23c75c-3"> + <symbol + overflow="visible" + id="id-702cf98a-7855-4a56-b3b9-be3e9c89e5eb-0"> + <path + style="stroke:none" + d="" + id="id-3d08f3b9-fc2d-4c8b-a693-2f069085b4c8-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4db591ab-5b31-4921-a71b-d732a9a3a154-2"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-fb3ea09c-6864-4691-95b5-1c3c652a23e5-5" /> + </symbol> + <symbol + overflow="visible" + id="id-a45ec7ed-aed1-44f6-87e2-879d7497660b-4"> + <path + style="stroke:none" + d="" + id="id-7b47d29b-e6d8-48a4-b8b1-d1b172f6aa82-0" /> + </symbol> + <symbol + overflow="visible" + id="id-b6a5b321-fb81-4c79-8c77-e89277728de4-5"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1c892cf5-670f-4af9-9c88-c02621bf8637-9" /> + </symbol> + <symbol + overflow="visible" + id="id-ad80f9d7-8845-4991-af60-575fc64207c6-4"> + <path + style="stroke:none" + d="" + id="id-62aa46d3-6905-4658-9610-06a86458f6eb-6" /> + </symbol> + <symbol + overflow="visible" + id="id-25df116e-62f9-4a97-a0aa-f3214438cb8a-9"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-c94b97b0-0e4d-4d84-8e0b-6baff1ddbc84-2" /> + </symbol> + </g> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38-6"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed-8"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37-0" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49-2"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81-1" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2-0"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2-5" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20-1"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8-1" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3-0"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843-8" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4-5"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83-0" /> + </symbol> + </g> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38-4"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed-0"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37-6" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49-29"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81-9" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2-08"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2-1" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20-3"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8-11" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3-03"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843-4" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4-0"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83-3" /> + </symbol> + </g> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="3.3131931" + inkscape:cx="269.84092" + inkscape:cy="216.61097" + inkscape:document-units="mm" + inkscape:current-layer="g3128" + inkscape:document-rotation="0" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="992" + inkscape:window-x="0" + inkscape:window-y="32" + inkscape:window-maximized="1" /> + <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"> + <g + id="g3128" + transform="translate(0,1.9402219)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-3" + cx="29.921179" + cy="57.147594" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,28.9278,55.5399)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{s}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-6"> + <defs + id="id-b8b5e3e7-eaef-4e90-9b23-e33c7addfd0b"> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525" /> + </symbol> + </g> + </defs> + <g + id="id-f73a8857-fdac-4c87-ae0e-65dc150a63e8" + transform="translate(-149.087,-130.249)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-2f770fd4-bb45-449d-b247-9b46d24284e2"> + <g + transform="translate(148.712,134.765)" + id="g1093"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-906cb7e4-b32b-42ac-8d74-3e888f78676c" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.5541,0,0,0.584984,36.661851,43.071258)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$n_{z_1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-6-1"> + <defs + id="id-500f6610-588a-4818-a433-a4f58ed9eb9c"> + <g + id="id-e9cdbc45-842a-4299-856a-e73e8a96598a"> + <symbol + overflow="visible" + id="id-4c9afea4-0492-4e68-ad02-526d968a9dda"> + <path + style="stroke:none" + d="" + id="id-022447e8-2b8e-45a6-9421-6bb9cee18fb8" /> + </symbol> + <symbol + overflow="visible" + id="id-eb4351ed-2b75-4189-9149-06b49bb09d39"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-9793d5ee-1e50-443d-8e24-59e74686be5c" /> + </symbol> + <symbol + overflow="visible" + id="id-acdb85cf-666d-461d-bcc6-3145d4b5a194"> + <path + style="stroke:none" + d="" + id="id-974496ba-fe40-4bde-9d6c-97d29282be67" /> + </symbol> + <symbol + overflow="visible" + id="id-a9937435-0508-4c68-9850-f26d0b685df1"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-9c0b6904-6368-4d8f-ad75-244ef0a02a48" /> + </symbol> + <symbol + overflow="visible" + id="id-4dbc287f-4992-4820-8c67-423900ff8378"> + <path + style="stroke:none" + d="" + id="id-d9c1862f-dbd4-4f66-9f79-92002bb14eb8" /> + </symbol> + <symbol + overflow="visible" + id="id-7933b5d5-7f25-482f-b30b-4ba167fd355d"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-7f05503e-8203-4760-910b-5af86e2658b9" /> + </symbol> + </g> + </defs> + <g + id="id-26364c9d-08dc-4865-b0f5-a8b7297166be" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-0f03436e-8db0-450f-aa25-544f24a2f390"> + <g + transform="translate(148.712,134.765)" + id="g5447"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-8d69f6e6-afd7-45c6-b3ad-a0c71f610f71" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-b623b9b7-25f3-4b3c-b1b9-1f0b64ed4354"> + <g + transform="translate(154.692,136.259)" + id="g5451"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-c4159b05-d0cb-49aa-ada3-a23c58758478" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-62e080c4-1c1e-474b-8c1e-e2d031a29f56"> + <g + transform="translate(158.499,137.255)" + id="g5455"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-202d962f-9c87-4ba6-bdb0-d542963a60dd" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.5541 0 0 0.584984 41.5766 55.823)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$n_{z_2}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-6-1-5"> + <defs + id="id-4f0a6264-44fa-4419-b663-f12fba190357"> + <g + id="id-eea55ade-e2c2-48c1-a3f1-d65d7b23c75c"> + <symbol + overflow="visible" + id="id-702cf98a-7855-4a56-b3b9-be3e9c89e5eb"> + <path + style="stroke:none" + d="" + id="id-3d08f3b9-fc2d-4c8b-a693-2f069085b4c8" /> + </symbol> + <symbol + overflow="visible" + id="id-4db591ab-5b31-4921-a71b-d732a9a3a154"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-fb3ea09c-6864-4691-95b5-1c3c652a23e5" /> + </symbol> + <symbol + overflow="visible" + id="id-a45ec7ed-aed1-44f6-87e2-879d7497660b"> + <path + style="stroke:none" + d="" + id="id-7b47d29b-e6d8-48a4-b8b1-d1b172f6aa82" /> + </symbol> + <symbol + overflow="visible" + id="id-b6a5b321-fb81-4c79-8c77-e89277728de4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1c892cf5-670f-4af9-9c88-c02621bf8637" /> + </symbol> + <symbol + overflow="visible" + id="id-ad80f9d7-8845-4991-af60-575fc64207c6"> + <path + style="stroke:none" + d="" + id="id-62aa46d3-6905-4658-9610-06a86458f6eb" /> + </symbol> + <symbol + overflow="visible" + id="id-25df116e-62f9-4a97-a0aa-f3214438cb8a"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-c94b97b0-0e4d-4d84-8e0b-6baff1ddbc84" /> + </symbol> + </g> + </defs> + <g + id="id-59d35469-3df4-4774-807c-a85c375a14d9" + transform="translate(-149.009, -130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-1e18d863-b305-48ee-ab24-c1390922c582"> + <g + transform="translate(148.712, 134.765)" + id="g6019"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-d1bdb664-3813-4978-a3de-6043db78b4cc" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-0b03857d-96b0-420b-a542-083214d77acc"> + <g + transform="translate(154.692, 136.259)" + id="g6023"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-58e741b3-5e8c-40d8-a42e-af9bf621a270" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-71d7b44d-bb0b-40e1-a089-131ac614a256"> + <g + transform="translate(158.499, 137.255)" + id="g6027"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-6a32d87d-779d-47ab-898f-cfb399c66b20" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.5541 0 0 0.584984 36.2586 66.9082)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$n_{z_k}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-6-1-5-3"> + <defs + id="id-b97136dd-f97a-4a19-bfc2-535cc0ff0225"> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83" /> + </symbol> + </g> + </defs> + <g + id="id-0eda9a8f-5cba-48a6-82d1-723ba393e163" + transform="translate(-149.009, -130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-1ba7400b-e448-4815-b9dc-c4f9b38e9d77"> + <g + transform="translate(148.712, 134.765)" + id="g6629"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-7d2401a2-a930-480e-8880-b596ebf68560" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-65c59b1d-cb54-4435-bb74-6c26702bb157"> + <g + transform="translate(154.692, 136.259)" + id="g6633"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-e67e3d4a-b26f-4f10-afdc-b198b1fb6290" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cb3074c6-a03f-4073-a3b6-6790538542ca"> + <g + transform="translate(158.499, 137.316)" + id="g6637"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-b41836f9-37d2-4116-9431-427f90e79c86" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.5541 0 0 0.584984 69.2226 33.5501)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$1$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-6-1-5-3-9"> + <defs + id="id-016c5830-b5cb-4715-89d3-0d230c1cc384"> + <g + id="id-eba692f1-bdd2-4485-a464-9470b20af630"> + <symbol + overflow="visible" + id="id-a8396958-ed2f-495e-b5b4-661e2ff6233a"> + <path + style="stroke:none" + d="" + id="id-abc4eca5-1311-4e0d-b35d-cb0d5f657696" /> + </symbol> + <symbol + overflow="visible" + id="id-ea4261ab-bafd-40f6-9ef3-7034344d6951"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-ab73cb18-6620-4738-9391-092bf86d8402" /> + </symbol> + </g> + </defs> + <g + id="id-0451793a-1cd4-4733-ae2c-0927593fe997" + transform="translate(-149.603, -128.124)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-422a3a82-12ea-4e6e-9092-30ec82236e28"> + <g + transform="translate(148.712, 134.765)" + id="g7269"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-60dc7762-4fed-4f8e-9998-580eb2c9b464" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.5541 0 0 0.584984 98.8404 41.6497)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$3$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-6-1-5-3-7"> + <defs + id="id-c99c9aed-28f7-4816-852f-e64acd476142"> + <g + id="id-e1c7c39a-e278-4365-9d0f-d1069d80e801"> + <symbol + overflow="visible" + id="id-d68940b5-c11a-421c-a278-45e8ed8c5e4d"> + <path + style="stroke:none" + d="" + id="id-50004078-43d2-42f6-8c2c-9c1f1aa3752b" /> + </symbol> + <symbol + overflow="visible" + id="id-6bc899ec-07b3-488e-98d0-b6608742429c"> + <path + style="stroke:none" + d="m 2.890625,-3.515625 c 0.8125,-0.265625 1.390625,-0.953125 1.390625,-1.75 0,-0.8125 -0.875,-1.375 -1.828125,-1.375 -1,0 -1.765625,0.59375 -1.765625,1.359375 0,0.328125 0.21875,0.515625 0.515625,0.515625 0.296875,0 0.5,-0.21875 0.5,-0.515625 0,-0.484375 -0.46875,-0.484375 -0.609375,-0.484375 0.296875,-0.5 0.953125,-0.625 1.3125,-0.625 0.421875,0 0.96875,0.21875 0.96875,1.109375 0,0.125 -0.03125,0.703125 -0.28125,1.140625 C 2.796875,-3.65625 2.453125,-3.625 2.203125,-3.625 2.125,-3.609375 1.890625,-3.59375 1.8125,-3.59375 c -0.078125,0.015625 -0.140625,0.03125 -0.140625,0.125 0,0.109375 0.0625,0.109375 0.234375,0.109375 h 0.4375 c 0.8125,0 1.1875,0.671875 1.1875,1.65625 0,1.359375 -0.6875,1.640625 -1.125,1.640625 -0.4375,0 -1.1875,-0.171875 -1.53125,-0.75 0.34375,0.046875 0.65625,-0.171875 0.65625,-0.546875 0,-0.359375 -0.265625,-0.5625 -0.546875,-0.5625 -0.25,0 -0.5625,0.140625 -0.5625,0.578125 0,0.90625 0.921875,1.5625 2.015625,1.5625 1.21875,0 2.125,-0.90625 2.125,-1.921875 0,-0.8125 -0.640625,-1.59375 -1.671875,-1.8125 z m 0,0" + id="id-47002757-8afd-4e59-90bd-2a38518992a7" /> + </symbol> + </g> + </defs> + <g + id="id-fde33495-e144-4bdd-9bd0-a004481b5582" + transform="translate(-149.134, -128.124)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-185d51e6-d865-4a17-8bce-cd26dd561351"> + <g + transform="translate(148.712, 134.765)" + id="g7876"> + <path + style="stroke:none" + d="m 2.890625,-3.515625 c 0.8125,-0.265625 1.390625,-0.953125 1.390625,-1.75 0,-0.8125 -0.875,-1.375 -1.828125,-1.375 -1,0 -1.765625,0.59375 -1.765625,1.359375 0,0.328125 0.21875,0.515625 0.515625,0.515625 0.296875,0 0.5,-0.21875 0.5,-0.515625 0,-0.484375 -0.46875,-0.484375 -0.609375,-0.484375 0.296875,-0.5 0.953125,-0.625 1.3125,-0.625 0.421875,0 0.96875,0.21875 0.96875,1.109375 0,0.125 -0.03125,0.703125 -0.28125,1.140625 C 2.796875,-3.65625 2.453125,-3.625 2.203125,-3.625 2.125,-3.609375 1.890625,-3.59375 1.8125,-3.59375 c -0.078125,0.015625 -0.140625,0.03125 -0.140625,0.125 0,0.109375 0.0625,0.109375 0.234375,0.109375 h 0.4375 c 0.8125,0 1.1875,0.671875 1.1875,1.65625 0,1.359375 -0.6875,1.640625 -1.125,1.640625 -0.4375,0 -1.1875,-0.171875 -1.53125,-0.75 0.34375,0.046875 0.65625,-0.171875 0.65625,-0.546875 0,-0.359375 -0.265625,-0.5625 -0.546875,-0.5625 -0.25,0 -0.5625,0.140625 -0.5625,0.578125 0,0.90625 0.921875,1.5625 2.015625,1.5625 1.21875,0 2.125,-0.90625 2.125,-1.921875 0,-0.8125 -0.640625,-1.59375 -1.671875,-1.8125 z m 0,0" + id="id-bc02ccf3-8293-4bdb-b7a2-f5b8987d30eb" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3318" + transform="translate(0,-0.75454133)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-3-2" + cx="112.99427" + cy="59.842358" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,112.044,57.7048)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{t}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-6-3"> + <defs + id="id-b670797f-4679-4aab-bd11-b4e3eb3bf3b5"> + <g + id="id-b83515ba-b48c-49b8-a844-5bf1aba72764"> + <symbol + overflow="visible" + id="id-1443da91-0b3a-4345-aa0f-2096c77ce860"> + <path + style="stroke:none" + d="" + id="id-73285ab0-aed2-4ca0-854c-265452f2571e" /> + </symbol> + <symbol + overflow="visible" + id="id-6ea998af-306e-4d6c-80b0-cd789009aff8"> + <path + style="stroke:none" + d="m 1.03125,-3.953125 v 2.734375 c 0,1.0625 0.859375,1.28125 1.578125,1.28125 0.75,0 1.203125,-0.578125 1.203125,-1.296875 v -0.53125 H 3.34375 V -1.25 c 0,0.671875 -0.328125,0.90625 -0.609375,0.90625 -0.578125,0 -0.578125,-0.640625 -0.578125,-0.859375 v -2.75 H 3.625 v -0.46875 H 2.15625 v -1.90625 H 1.6875 c 0,1 -0.484375,1.984375 -1.484375,2.015625 v 0.359375 z m 0,0" + id="id-46234536-02a6-450d-b8ae-7b6c6d8ec66f" /> + </symbol> + </g> + </defs> + <g + id="id-c0271557-d7fe-435d-ba30-4b4740217f68" + transform="translate(-148.915,-128.437)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-2adb8022-4fef-4874-ad73-dbc6a7032af0"> + <g + transform="translate(148.712,134.765)" + id="g1252"> + <path + style="stroke:none" + d="m 1.03125,-3.953125 v 2.734375 c 0,1.0625 0.859375,1.28125 1.578125,1.28125 0.75,0 1.203125,-0.578125 1.203125,-1.296875 v -0.53125 H 3.34375 V -1.25 c 0,0.671875 -0.328125,0.90625 -0.609375,0.90625 -0.578125,0 -0.578125,-0.640625 -0.578125,-0.859375 v -2.75 H 3.625 v -0.46875 H 2.15625 v -1.90625 H 1.6875 c 0,1 -0.484375,1.984375 -1.484375,2.015625 v 0.359375 z m 0,0" + id="id-b499da72-00ec-49c7-8587-72e812a9c95e" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3799" + transform="translate(-0.60989494)"> + <g + id="g3156" + transform="translate(-11.789786,-1.6856517)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833" + cx="70.011894" + cy="42.18951" + r="4.4921422" /> + <g + transform="matrix(0.55409974,0,0,0.58498411,66.626528,39.899151)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{z_1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="0.9449006740783156" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.33334" + id="g866"> + <defs + id="id-1e809e81-165d-4546-a013-e3cf86d150e3"> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5" /> + </symbol> + </g> + </defs> + <g + id="id-109d20c4-4451-4b92-a1ac-a968b7e02140" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-2499faef-5c0a-41f6-bda3-13db74ee69e1"> + <g + transform="translate(148.712,134.765)" + id="g854"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-d7db6940-de89-47e3-a033-049363ff49cd" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ffaf43f8-bbb4-4154-ad7f-840f271d65cf"> + <g + transform="translate(154.759,136.259)" + id="g858"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-f96a5f13-9133-4906-a110-2b8b9488e204" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-0260b20e-ac21-4d3f-a285-2d7e01002974"> + <g + transform="translate(158.565,137.255)" + id="g862"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-36c7b204-6585-4a05-99ee-593991b6f965" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3184" + transform="translate(-11.934691,-3.882734)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-6" + cx="70.156799" + cy="56.775902" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,66.7236,54.4856)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{z_2}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-5"> + <defs + id="id-4648fc5a-c898-434c-af5f-c0534d61ee65"> + <g + id="id-a0d15d55-c9ae-4d1b-a246-de6159e2f150"> + <symbol + overflow="visible" + id="id-40b33fa1-9b51-4644-904d-cb9657a51cf1"> + <path + style="stroke:none" + d="" + id="id-7c84767c-5058-4a40-83ef-557271c16288" /> + </symbol> + <symbol + overflow="visible" + id="id-b93f01ee-c7fa-43f7-90d5-c22ad372b37a"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-3662a559-3637-4a84-9dc9-6c84df45bf82" /> + </symbol> + <symbol + overflow="visible" + id="id-43ab27cb-8880-4ddf-a916-1cf727caa0e5"> + <path + style="stroke:none" + d="" + id="id-149313cf-16b6-4740-a711-aec81c8e75fd" /> + </symbol> + <symbol + overflow="visible" + id="id-753c04f0-06ae-4990-b1e4-298e87bf2fc1"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-57cf8603-682c-4ceb-aee2-2e107b1c406f" /> + </symbol> + <symbol + overflow="visible" + id="id-7711970b-969b-4cb9-8a63-4bf2a5a63b5a"> + <path + style="stroke:none" + d="" + id="id-ad4000b7-f8e8-400c-8ae6-936ced4ad61c" /> + </symbol> + <symbol + overflow="visible" + id="id-0602fc4c-71b4-487d-904f-4d5a4e06e43d"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-d420c112-a63a-4d44-84f0-5d1c7f736aeb" /> + </symbol> + </g> + </defs> + <g + id="id-0d60f8fc-70ba-4ea0-81eb-4ad80ebf6946" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-af85f9a5-4446-474b-a2ed-c8ee2263016d"> + <g + transform="translate(148.712,134.765)" + id="g1819"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-492ea2c0-5b30-4c35-bcb7-b8158023f6a8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-70620bc0-2b29-4b71-b25d-385e3b33843a"> + <g + transform="translate(154.759,136.259)" + id="g1823"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-5ab71b69-687f-4f2b-a35d-8d3b454a7348" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-f129db3c-8ecb-4ad2-9e9e-10ab81c2fe07"> + <g + transform="translate(158.565,137.255)" + id="g1827"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-b694d8d9-4ef9-4414-a0cd-1a0f31359315" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3241" + transform="translate(-9.890387,-4.5650119)"> + <g + id="g3212"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-9" + cx="68.112495" + cy="82.236786" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,64.571,79.9104)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{z_k}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-26"> + <defs + id="id-96762b80-ea2d-4a5e-a2ad-5d97a096cd52"> + <g + id="id-245294a4-4f69-405f-94a1-9174258337c1"> + <symbol + overflow="visible" + id="id-e2dd9529-fc99-4b31-9c16-14ad4a1fc3be"> + <path + style="stroke:none" + d="" + id="id-17c044fd-5b23-468c-87f6-dd286727df31" /> + </symbol> + <symbol + overflow="visible" + id="id-930379a4-c04b-4aae-ad4e-82d06321f8b7"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-74e35bdc-b2a8-4d6e-9f99-fe9c38fa05d9" /> + </symbol> + <symbol + overflow="visible" + id="id-8ee8024f-7cf2-4e57-ae5a-fbf096019740"> + <path + style="stroke:none" + d="" + id="id-4c0e5c52-ea77-4e1c-a834-c7034310d876" /> + </symbol> + <symbol + overflow="visible" + id="id-b6410325-6d8a-4717-a6ac-7bd7fe997f13"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-eff15891-7f72-4106-a331-7c10fe5720ea" /> + </symbol> + <symbol + overflow="visible" + id="id-07e5ad76-d1ce-4b88-bff8-cf8a734e7c7b"> + <path + style="stroke:none" + d="" + id="id-34c8ed1b-56ff-48e8-be30-235cbf99e5cc" /> + </symbol> + <symbol + overflow="visible" + id="id-2149adb6-8971-4e7e-b40f-0b187a368563"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-853a23b1-76aa-40ee-8675-f64d61e57f7e" /> + </symbol> + </g> + </defs> + <g + id="id-9713bb64-446c-43b4-98c8-f010dc1747ce" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-adc390f0-441a-4783-8568-bb1e92be4889"> + <g + transform="translate(148.712,134.765)" + id="g2366"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-1667236e-545e-4ae8-b84b-7f098e58a0d4" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d9e4689f-c1e4-475a-9d17-717c322f1858"> + <g + transform="translate(154.759,136.259)" + id="g2370"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-d4b505ed-697d-4917-a5b5-afe96ed6edc9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-e445e258-c48b-423a-bbe5-020f5e09912b"> + <g + transform="translate(158.565,137.316)" + id="g2374"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-cd1190bd-9504-42f0-9cda-b407c5cb01f7" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + transform="matrix(0,0.569333,-0.569333,0,58.524851,62.464098)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\dots$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569333" + id="g3585"> + <defs + id="id-2d87e1eb-bc7d-4d81-9582-86bf8727c9c8"> + <g + id="id-71316add-b757-483c-8195-02b65d505b23"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe" /> + </symbol> + </g> + </defs> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e" + transform="translate(-149.571,-133.702)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f"> + <g + transform="translate(148.712,134.765)" + id="g3573"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be"> + <g + transform="translate(153.143,134.765)" + id="g3577"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8"> + <g + transform="translate(157.565,134.765)" + id="g3581"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3878" + transform="translate(-2.7908099)"> + <g + id="g3262" + transform="translate(-4.3642598,-1.3114528)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1" + cx="92.458305" + cy="41.815311" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,89.98,39.6684)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2"> + <defs + id="id-15a6f521-2fe4-4753-8623-832d47d60e24"> + <g + id="id-f665f0ad-6acc-4c65-818f-65538ae870ec"> + <symbol + overflow="visible" + id="id-b528872c-9c37-40cc-8f3c-4a3820527247"> + <path + style="stroke:none" + d="" + id="id-b9b64af8-af4d-498f-81ae-f2cb3b370123" /> + </symbol> + <symbol + overflow="visible" + id="id-d0bf1643-b2f5-444d-a657-4aaefc6c89d4"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-311ed8ac-5c86-4922-8ddd-c8730c4eb1f1" /> + </symbol> + <symbol + overflow="visible" + id="id-1911bbd6-3c25-4e44-b82f-6e209a9efbf4"> + <path + style="stroke:none" + d="" + id="id-ad0a7a76-9842-4d63-89a8-c9c17aa71c17" /> + </symbol> + <symbol + overflow="visible" + id="id-756b752a-2988-4d30-9ec2-f35e31955def"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-3ec43921-ba3b-4f7d-b817-b8c615e98630" /> + </symbol> + </g> + </defs> + <g + id="id-cead2aa7-946f-4ead-8279-e9b065b68e9f" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-a55af208-6012-444c-8a5a-d3c5ddd0bb01"> + <g + transform="translate(148.712,134.765)" + id="g1512"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-d2267913-737c-48d1-9245-ad03781200c6" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-04e7d486-2d80-490f-9c17-2027c5db438d"> + <g + transform="translate(154.759,136.259)" + id="g1516"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-e8473c25-707e-4ede-b251-a71e242045d8" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3283" + transform="translate(-3.9925634,-4.8119651)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-1" + cx="92.086609" + cy="57.705132" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,89.5476,55.5583)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{2}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-5"> + <defs + id="id-f25c2c64-4dfe-4f14-833a-50688ba672e1"> + <g + id="id-f98b961b-31b5-4c0f-bfb1-2760408a739a"> + <symbol + overflow="visible" + id="id-4737c041-b95c-4219-8e7e-c562852710ea"> + <path + style="stroke:none" + d="" + id="id-c55a79d7-b066-4a99-ae31-2b04d4c628d0" /> + </symbol> + <symbol + overflow="visible" + id="id-80361aa1-942d-4c7e-b9e6-0b746bab4670"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-46772014-ff2f-4c4f-bd9c-546c16e45ebe" /> + </symbol> + <symbol + overflow="visible" + id="id-8dac91f2-ce64-4971-ad7d-d446cd8c9c1c"> + <path + style="stroke:none" + d="" + id="id-604b9e94-17f8-4699-8fca-83a7170f9ad1" /> + </symbol> + <symbol + overflow="visible" + id="id-7656f371-933a-4b40-8c22-717f88b408ac"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-99006318-9528-4ad3-a74f-c639da460421" /> + </symbol> + </g> + </defs> + <g + id="id-52d349e1-f5e4-4979-be96-eb0c9ee8b3d0" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-6c068af8-182e-4513-b413-5641c34ba3e3"> + <g + transform="translate(148.712,134.765)" + id="g2718"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-7154de53-d596-477e-8e1c-be2d76dcdebe" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-114a8c4d-759e-4b5a-8922-68b1628605fa"> + <g + transform="translate(154.759,136.259)" + id="g2722"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-8e15c3ea-b557-40f4-85fa-10d874426fc0" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3304" + transform="translate(-2.4128744,1.5679074)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-1-9" + cx="90.50692" + cy="76.103867" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,87.089,73.9571)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{N}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-5-0"> + <defs + id="id-fbc6ebc5-614c-413b-aabe-afcf82be9a44"> + <g + id="id-d7b73406-3b54-4c18-b9d9-a8d48226548b"> + <symbol + overflow="visible" + id="id-7392a411-3fc7-40dd-8159-940d133d1964"> + <path + style="stroke:none" + d="" + id="id-f1141261-817e-4519-a866-9b5fb0d27fe4" /> + </symbol> + <symbol + overflow="visible" + id="id-bb327e41-7636-4bdb-a5ff-468e484b4942"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-c45e9d73-05a0-4b4c-8bfa-22e86bbf9052" /> + </symbol> + <symbol + overflow="visible" + id="id-ed639f13-2e63-4b44-9269-8011bcac5110"> + <path + style="stroke:none" + d="" + id="id-1055d386-f97e-4aca-85f9-52b442a94df3" /> + </symbol> + <symbol + overflow="visible" + id="id-3215daba-e473-42b7-bf0e-512b603ee5ea"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-4bb30a4f-a8ce-4012-95d5-a0da4eb3b353" /> + </symbol> + </g> + </defs> + <g + id="id-3d923e0f-a2be-4d8b-978a-fa754bd42e64" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-1733af0a-dd75-4350-8c56-5f694adf9885"> + <g + transform="translate(148.712,134.765)" + id="g3087"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-98092114-1794-4f5a-b393-560db71d0bdd" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-4a9f6241-cd96-4f72-b97e-acc7894d3da0"> + <g + transform="translate(154.759,136.259)" + id="g3091"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-8e9beff6-a262-40fa-a2e1-2242bbc5d27f" /> + </g> + </g> + </g> + </g> + </g> + <g + transform="matrix(0,0.569333,-0.569333,0,88.396788,62.464097)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\dots$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569333" + id="g3585-1"> + <defs + id="id-2d87e1eb-bc7d-4d81-9582-86bf8727c9c8-0"> + <g + id="g3668"> + <symbol + overflow="visible" + id="symbol3662"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path3660" /> + </symbol> + <symbol + overflow="visible" + id="symbol3666"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="path3664" /> + </symbol> + </g> + </defs> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-4" + transform="translate(-149.571,-133.702)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-7"> + <g + transform="translate(148.712,134.765)" + id="g3573-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-1"> + <g + transform="translate(153.143,134.765)" + id="g3577-7"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-9"> + <g + transform="translate(157.565,134.765)" + id="g3581-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-2" /> + </g> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none;marker-end:url(#Arrow1Lend)" + d="M 33.745855,56.297626 53.402989,42.605547" + id="path3898" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4192)" + d="m 34.497258,58.468169 18.923153,-3.33584" + id="path4182" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4228)" + d="M 33.240731,62.357703 54.096552,75.345461" + id="path4218" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270)" + d="m 62.113175,40.390646 18.588768,0.148211" + id="path4260" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4318)" + d="m 62.21413,52.969117 18.356627,0.05513" + id="path4308" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4372)" + d="m 62.160025,77.401858 18.442318,0.351846" + id="path4362" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4432)" + d="M 62.065902,41.700487 80.97172,50.828768" + id="path4422" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4498)" + d="M 61.085219,56.07705 81.587701,74.497202" + id="path4488" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4570)" + d="M 61.84597,76.017913 82.105385,56.001594" + id="path4560" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4648)" + d="M 61.130933,50.116589 81.48726,42.878927" + id="path4638" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4732)" + d="M 61.043684,43.711029 83.776697,73.154867" + id="path4722" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4822)" + d="m 60.350672,74.205948 22.43012,-29.72668" + id="path4812" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4918)" + d="M 89.508072,42.08863 109.44579,56.431409" + id="path4908" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5020)" + d="m 89.263015,55.033277 19.038815,3.964276" + id="path5010" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5128)" + d="M 89.783181,76.121616 109.35936,61.777628" + id="path5118" /> + </g> +</svg> diff --git a/doc/optimal_layout_report/figures/flow_graph_param.pdf b/doc/optimal_layout_report/figures/flow_graph_param.pdf Binary files differnew file mode 100644 index 00000000..25b1205a --- /dev/null +++ b/doc/optimal_layout_report/figures/flow_graph_param.pdf diff --git a/doc/optimal_layout_report/figures/flow_graph_param.svg b/doc/optimal_layout_report/figures/flow_graph_param.svg new file mode 100644 index 00000000..1ef27ec5 --- /dev/null +++ b/doc/optimal_layout_report/figures/flow_graph_param.svg @@ -0,0 +1,7817 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:ns3="http://www.iki.fi/pav/software/textext/" + 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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + viewBox="0 0 210 297" + version="1.1" + id="svg8" + sodipodi:docname="flow_graph_param.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <defs + id="defs2"> + <marker + style="overflow:visible" + id="marker29335" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotM" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path29333" /> + </marker> + <marker + style="overflow:visible" + id="marker29325" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotM" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path29323" /> + </marker> + <marker + style="overflow:visible" + id="marker29315" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotM" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path29313" /> + </marker> + <marker + style="overflow:visible" + id="marker29025" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotM" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path29023" /> + </marker> + <marker + inkscape:stockid="DistanceStart" + orient="auto" + refY="0.0" + refX="0.0" + id="marker28638" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g28636" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path28630" + d="M 0,0 L 2,0" + style="fill:#000000;stroke:#000000;stroke-width:1.15;stroke-linecap:square;stroke-opacity:1;fill-opacity:1" /> + <path + id="path28632" + d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z " + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;fill-opacity:1" /> + <path + id="path28634" + d="M 0,-4 L 0,40" + style="fill:#000000;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <marker + inkscape:stockid="DistanceStart" + orient="auto" + refY="0.0" + refX="0.0" + id="marker28613" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g28611" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path28605" + d="M 0,0 L 2,0" + style="fill:#000000;stroke:#000000;stroke-width:1.15;stroke-linecap:square;stroke-opacity:1;fill-opacity:1" /> + <path + id="path28607" + d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z " + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;fill-opacity:1" /> + <path + id="path28609" + d="M 0,-4 L 0,40" + style="fill:#000000;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <marker + style="overflow:visible;" + id="marker5128" + 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="path5126" /> + </marker> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-5"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-5" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-6"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-2" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-1" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-7" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-9" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-3"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-6" /> + </symbol> + </g> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff-5"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253-9"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442-2" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5-2"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525-8" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-3"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-1"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-9" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-4"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-7" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-8"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-4" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-5"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-0" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-6" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-1"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-0" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-9"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-37"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-4" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-5"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-25" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-4"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-7" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-4" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-30"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-7" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-8"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-68" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-4"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-50" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-48"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-71" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-2" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-7"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-2" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-2"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-61" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-0"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-61" /> + </symbol> + </g> + <g + id="id-f665f0ad-6acc-4c65-818f-65538ae870ec-7"> + <symbol + overflow="visible" + id="id-b528872c-9c37-40cc-8f3c-4a3820527247-7"> + <path + style="stroke:none" + d="" + id="id-b9b64af8-af4d-498f-81ae-f2cb3b370123-6" /> + </symbol> + <symbol + overflow="visible" + id="id-d0bf1643-b2f5-444d-a657-4aaefc6c89d4-7"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-311ed8ac-5c86-4922-8ddd-c8730c4eb1f1-3" /> + </symbol> + <symbol + overflow="visible" + id="id-1911bbd6-3c25-4e44-b82f-6e209a9efbf4-6"> + <path + style="stroke:none" + d="" + id="id-ad0a7a76-9842-4d63-89a8-c9c17aa71c17-5" /> + </symbol> + <symbol + overflow="visible" + id="id-756b752a-2988-4d30-9ec2-f35e31955def-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-3ec43921-ba3b-4f7d-b817-b8c615e98630-3" /> + </symbol> + </g> + <g + id="id-f98b961b-31b5-4c0f-bfb1-2760408a739a-8"> + <symbol + overflow="visible" + id="id-4737c041-b95c-4219-8e7e-c562852710ea-5"> + <path + style="stroke:none" + d="" + id="id-c55a79d7-b066-4a99-ae31-2b04d4c628d0-0" /> + </symbol> + <symbol + overflow="visible" + id="id-80361aa1-942d-4c7e-b9e6-0b746bab4670-9"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-46772014-ff2f-4c4f-bd9c-546c16e45ebe-6" /> + </symbol> + <symbol + overflow="visible" + id="id-8dac91f2-ce64-4971-ad7d-d446cd8c9c1c-3"> + <path + style="stroke:none" + d="" + id="id-604b9e94-17f8-4699-8fca-83a7170f9ad1-8" /> + </symbol> + <symbol + overflow="visible" + id="id-7656f371-933a-4b40-8c22-717f88b408ac-5"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-99006318-9528-4ad3-a74f-c639da460421-6" /> + </symbol> + </g> + <g + id="id-71316add-b757-483c-8195-02b65d505b23-3"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f-4" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe-4" /> + </symbol> + </g> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff-8"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253-5"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442-7" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5-4"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525-1" /> + </symbol> + </g> + <g + id="id-e9cdbc45-842a-4299-856a-e73e8a96598a-8"> + <symbol + overflow="visible" + id="id-4c9afea4-0492-4e68-ad02-526d968a9dda-8"> + <path + style="stroke:none" + d="" + id="id-022447e8-2b8e-45a6-9421-6bb9cee18fb8-3" /> + </symbol> + <symbol + overflow="visible" + id="id-eb4351ed-2b75-4189-9149-06b49bb09d39-1"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-9793d5ee-1e50-443d-8e24-59e74686be5c-8" /> + </symbol> + <symbol + overflow="visible" + id="id-acdb85cf-666d-461d-bcc6-3145d4b5a194-9"> + <path + style="stroke:none" + d="" + id="id-974496ba-fe40-4bde-9d6c-97d29282be67-6" /> + </symbol> + <symbol + overflow="visible" + id="id-a9937435-0508-4c68-9850-f26d0b685df1-4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-9c0b6904-6368-4d8f-ad75-244ef0a02a48-3" /> + </symbol> + <symbol + overflow="visible" + id="id-4dbc287f-4992-4820-8c67-423900ff8378-3"> + <path + style="stroke:none" + d="" + id="id-d9c1862f-dbd4-4f66-9f79-92002bb14eb8-3" /> + </symbol> + <symbol + overflow="visible" + id="id-7933b5d5-7f25-482f-b30b-4ba167fd355d-8"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-7f05503e-8203-4760-910b-5af86e2658b9-6" /> + </symbol> + </g> + <g + id="id-eea55ade-e2c2-48c1-a3f1-d65d7b23c75c-3"> + <symbol + overflow="visible" + id="id-702cf98a-7855-4a56-b3b9-be3e9c89e5eb-0"> + <path + style="stroke:none" + d="" + id="id-3d08f3b9-fc2d-4c8b-a693-2f069085b4c8-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4db591ab-5b31-4921-a71b-d732a9a3a154-2"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-fb3ea09c-6864-4691-95b5-1c3c652a23e5-5" /> + </symbol> + <symbol + overflow="visible" + id="id-a45ec7ed-aed1-44f6-87e2-879d7497660b-4"> + <path + style="stroke:none" + d="" + id="id-7b47d29b-e6d8-48a4-b8b1-d1b172f6aa82-0" /> + </symbol> + <symbol + overflow="visible" + id="id-b6a5b321-fb81-4c79-8c77-e89277728de4-5"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1c892cf5-670f-4af9-9c88-c02621bf8637-9" /> + </symbol> + <symbol + overflow="visible" + id="id-ad80f9d7-8845-4991-af60-575fc64207c6-4"> + <path + style="stroke:none" + d="" + id="id-62aa46d3-6905-4658-9610-06a86458f6eb-6" /> + </symbol> + <symbol + overflow="visible" + id="id-25df116e-62f9-4a97-a0aa-f3214438cb8a-9"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-c94b97b0-0e4d-4d84-8e0b-6baff1ddbc84-2" /> + </symbol> + </g> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38-6"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed-8"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37-0" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49-2"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81-1" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2-0"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2-5" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20-1"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8-1" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3-0"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843-8" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4-5"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83-0" /> + </symbol> + </g> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38-4"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed-0"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37-6" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49-29"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81-9" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2-08"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2-1" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20-3"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8-11" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3-03"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843-4" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4-0"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83-3" /> + </symbol> + </g> + <g + id="id-3a24776d-bc3a-4985-8b28-ce4db2a93534-6"> + <symbol + overflow="visible" + id="id-600184e5-ac31-4222-b7ac-c96016dc366e-2"> + <path + style="stroke:none" + d="" + id="id-b7300ca4-41d0-48a7-a3fc-3384bcd315e5-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4a311171-3d88-48c1-a768-920db7a376f3-1"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-5d0de5d4-3de1-4182-916c-5c15cb8a379b-2" /> + </symbol> + <symbol + overflow="visible" + id="id-576666de-5b44-48e6-9102-7af5342bec6c-7"> + <path + style="stroke:none" + d="" + id="id-0e138fba-e636-4a6e-9029-bed27c4c236d-0" /> + </symbol> + <symbol + overflow="visible" + id="id-5c29be59-448a-4add-8ecc-e56873e1ddfc-9"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-6ac25928-d877-42ea-8378-021164984a12-3" /> + </symbol> + <symbol + overflow="visible" + id="id-2e32c15b-8346-4486-99eb-6ed6ac946f95-6"> + <path + style="stroke:none" + d="" + id="id-e410f52f-63d2-4f94-9516-ca72f51d8167-0" /> + </symbol> + <symbol + overflow="visible" + id="id-6fde21de-66ce-4992-8ea8-55bfd138b407-6"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-a1d7aab6-721b-4b77-952a-736ac7a8cd57-2" /> + </symbol> + </g> + <g + id="id-867ce786-433a-4da2-985c-f4cd6863ba62-8"> + <symbol + overflow="visible" + id="id-122aceff-8d13-469a-b644-0d6fd18cd894-9"> + <path + style="stroke:none" + d="" + id="id-2cd1b095-e373-4c3f-a0aa-744195118e83-7" /> + </symbol> + <symbol + overflow="visible" + id="id-c8aaab59-3861-421a-b529-5baf8e5e105a-3"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-87b88ba1-7415-4d4b-b760-06d0f7266a0e-6" /> + </symbol> + <symbol + overflow="visible" + id="id-1aa2c0b5-6103-4aa2-9d79-186256e46b98-1"> + <path + style="stroke:none" + d="" + id="id-5b56f2fc-39dd-4f93-a95e-522f63446f1d-2" /> + </symbol> + <symbol + overflow="visible" + id="id-94706a17-f2b8-4015-86aa-c8b784d104c0-9"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-8b337c95-3244-40d9-acd0-15e8cf49b85d-3" /> + </symbol> + <symbol + overflow="visible" + id="id-4b1b0546-799b-4ba0-b279-6150411621c0-1"> + <path + style="stroke:none" + d="" + id="id-76817e90-5713-4d7a-8eea-1d9bc905ce1c-9" /> + </symbol> + <symbol + overflow="visible" + id="id-8c7eaeb2-7288-4b4e-9783-6b0d54556574-4"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-96737164-dbb3-4a15-a741-8519aff719ee-7" /> + </symbol> + </g> + <g + id="id-191a8d0d-801e-4c83-808c-0c3b14a8656f-5"> + <symbol + overflow="visible" + id="id-d2dbfc85-2301-46fd-9709-ae722299c440-4"> + <path + style="stroke:none" + d="" + id="id-bd2b6b64-d0bb-4bfd-9ee5-aa0162ccd436-7" /> + </symbol> + <symbol + overflow="visible" + id="id-8f6eda09-66ab-48f3-bdc5-3268f9982c5c-6"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-c26027ed-aa0b-445f-8a04-0b1d8586f076-5" /> + </symbol> + <symbol + overflow="visible" + id="id-e82a7900-b849-40c5-9d84-f91ba760191e-6"> + <path + style="stroke:none" + d="" + id="id-bdef97d3-91b2-431e-bcba-cd1dde53c3fd-9" /> + </symbol> + <symbol + overflow="visible" + id="id-96bf7acc-5861-4f0a-a6b4-5070340b1159-3"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-306b6f47-5f0b-477a-bc27-8fd1d14b7fd4-7" /> + </symbol> + <symbol + overflow="visible" + id="id-d6f36ceb-a70c-418b-b2f8-e2c8897f2e1f-4"> + <path + style="stroke:none" + d="" + id="id-d1c9ac07-f16e-48d4-9e4b-fcdc563bd700-5" /> + </symbol> + <symbol + overflow="visible" + id="id-6bdd5aca-01cb-4249-abb6-586c8fc56b95-2"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-bd1f25a0-c96b-4dcb-a3ff-50d4a65385e0-5" /> + </symbol> + </g> + <g + id="id-71316add-b757-483c-8195-02b65d505b23-31"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b-4"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f-9" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe-0" /> + </symbol> + </g> + <g + id="id-f71ea667-3b4d-4d21-ad1f-0ecb1dd3e484-2"> + <symbol + overflow="visible" + id="id-34dc3a3d-2276-4043-8291-b700fbc2dff1-7"> + <path + style="stroke:none" + d="" + id="id-9cccc023-3ff4-416e-878b-ddafd3dd0fcd-2" /> + </symbol> + <symbol + overflow="visible" + id="id-9bd60f18-4c4d-4ddd-b181-16f7a2d92fbc-2"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-d86d8910-8168-40a7-ac81-0c33df86ab0e-6" /> + </symbol> + <symbol + overflow="visible" + id="id-d9fa921e-ba7e-461c-9b85-204169b0b876-1"> + <path + style="stroke:none" + d="" + id="id-513ff48d-b30f-41d2-a80a-6d4ac5c4bdf2-0" /> + </symbol> + <symbol + overflow="visible" + id="id-ba38b8ec-61ee-49f7-aa7b-b60f1f54849e-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-99aee4ff-3e86-462c-8595-98407ac2efa0-1" /> + </symbol> + </g> + <g + id="id-71316add-b757-483c-8195-02b65d505b23-6"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b-5"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f-6" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f-3"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe-9" /> + </symbol> + </g> + <g + id="g9297-9"> + <symbol + overflow="visible" + id="symbol9283-8"> + <path + style="stroke:none" + d="" + id="path9281-4" /> + </symbol> + <symbol + overflow="visible" + id="symbol9287-8"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="path9285-1" /> + </symbol> + <symbol + overflow="visible" + id="symbol9291-0"> + <path + style="stroke:none" + d="" + id="path9289-3" /> + </symbol> + <symbol + overflow="visible" + id="symbol9295-0"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path9293-4" /> + </symbol> + </g> + <g + id="id-8b1176ff-fed7-4d1f-a95d-2f901e2aa6da-8"> + <symbol + overflow="visible" + id="id-50ca6f89-1cf3-46ce-b624-794728268749-5"> + <path + style="stroke:none" + d="" + id="id-3007ebfc-2e24-4566-9ce5-f9269724a7af-7" /> + </symbol> + <symbol + overflow="visible" + id="id-0f52c0e5-e7bb-4649-867b-67f9ffd54d5c-4"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-e0a286b4-1895-4457-9d47-fdd1ee2aef8e-1" /> + </symbol> + <symbol + overflow="visible" + id="id-f33a0be7-00c4-4c53-9793-ea8e553e3b04-8"> + <path + style="stroke:none" + d="" + id="id-8d37aeb7-f373-42df-8441-9e8e63c73fea-5" /> + </symbol> + <symbol + overflow="visible" + id="id-331b803c-1ca4-4d9e-ae0a-b94c0868ef22-9"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-79a21791-6cb0-4234-a47b-4bd9ede6c0b2-7" /> + </symbol> + <symbol + overflow="visible" + id="id-02613bae-770a-4a52-a47b-fef4b2c26411-5"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-afc2da90-6d57-475c-a8d5-7767638414df-3" /> + </symbol> + <symbol + overflow="visible" + id="id-1f8fea30-ac48-4986-984b-906d5fb66dce-8"> + <path + style="stroke:none" + d="" + id="id-2db340cb-906e-44a4-b69f-d20f40866d22-8" /> + </symbol> + <symbol + overflow="visible" + id="id-1159c11c-5ca0-4515-84ea-dbc2c0071b76-3"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-47e8b9e4-606d-4d63-adc7-5bbddf20c9ca-1" /> + </symbol> + <symbol + overflow="visible" + id="id-d2a45eb8-4bc1-4f97-847e-131cb18000c7-8"> + <path + style="stroke:none" + d="" + id="id-b7d83c78-2ab3-430e-8d1b-ea63a6e16936-9" /> + </symbol> + <symbol + overflow="visible" + id="id-c2d57daa-bbd4-45c0-8d46-e646f76639f4-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-530c2961-ca82-486c-a6db-d81ce2884279-4" /> + </symbol> + </g> + <g + id="id-945a6e37-a95b-44e9-82b7-2ac83c7d6d9c-2"> + <symbol + overflow="visible" + id="id-5413b550-28b0-4f27-b0e0-efb018e9abb1-5"> + <path + style="stroke:none" + d="" + id="id-a8d13d71-db36-4835-9549-9f3622025a5e-4" /> + </symbol> + <symbol + overflow="visible" + id="id-12cf6e23-f040-4a9f-99b8-10631bfdf663-0"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-20759e13-f2c8-45c1-b35a-f43212bfcee3-5" /> + </symbol> + <symbol + overflow="visible" + id="id-591b00bb-e13d-4d74-8c6c-fd8f6ea3db65-9"> + <path + style="stroke:none" + d="" + id="id-3c0c7864-f3cb-4470-8f6b-48d3abc32653-4" /> + </symbol> + <symbol + overflow="visible" + id="id-bef4c849-1488-4ffd-88f3-58fc74337fa5-6"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-e2e9ead5-8b0c-48eb-8713-a9278af03c05-9" /> + </symbol> + <symbol + overflow="visible" + id="id-bcb3bf03-198d-41ab-b887-5d49a6fec79b-2"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-9a1955e3-cb8d-48d9-96d1-9989ce648fff-2" /> + </symbol> + <symbol + overflow="visible" + id="id-e586bbb8-1d83-4c06-b2e2-870f9006d650-4"> + <path + style="stroke:none" + d="" + id="id-92894d48-f372-4004-9679-16918abac50d-7" /> + </symbol> + <symbol + overflow="visible" + id="id-f066668e-909e-4312-80d1-04749c262cb4-7"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-973279b7-cd89-4f57-a650-ba85eb525e1d-5" /> + </symbol> + <symbol + overflow="visible" + id="id-9423f50a-7bbb-437e-a3ab-686b0a1c420d-4"> + <path + style="stroke:none" + d="" + id="id-3a813a52-2d44-41db-ac8c-e6155f5cb9b9-8" /> + </symbol> + <symbol + overflow="visible" + id="id-b0386dcd-1db9-41fd-a360-42e59588bfe9-1"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-918e55b9-f187-4747-989f-66efac9d6872-2" /> + </symbol> + </g> + <g + id="id-58309c68-7535-4da9-8dc6-1b52eaa73e19-8"> + <symbol + overflow="visible" + id="id-29067988-3659-4747-86bb-6cc1b8b5c91e-6"> + <path + style="stroke:none" + d="" + id="id-80cc09ad-f6c7-4d0e-b4a0-0dd52e7cf885-2" /> + </symbol> + <symbol + overflow="visible" + id="id-213f7785-a032-4538-9e90-29c9ecd79a4a-8"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-b0ad5f67-012c-4eb4-9df9-7915797561d9-4" /> + </symbol> + <symbol + overflow="visible" + id="id-80c58fdf-7f87-456a-90d4-ebd25fde26f8-7"> + <path + style="stroke:none" + d="" + id="id-74527db0-d834-4b21-a3a3-787ef4f1584f-2" /> + </symbol> + <symbol + overflow="visible" + id="id-aad71265-bf77-4f0f-8166-b3b625e9d750-4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1c3fa1ea-dfa0-42fc-92ce-a84f36b57ca7-0" /> + </symbol> + <symbol + overflow="visible" + id="id-e1479489-482e-49ef-a82f-7e97279af4e1-6"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-5e3cb470-a9d3-4ef6-a007-ed9d6b5de59b-2" /> + </symbol> + <symbol + overflow="visible" + id="id-5366a9cc-cff2-4e31-9a8f-998905cec9a9-9"> + <path + style="stroke:none" + d="" + id="id-46c1bd63-2d42-4a96-9494-d4a8f64c983d-9" /> + </symbol> + <symbol + overflow="visible" + id="id-aa6ec137-fdf3-4e1a-a9aa-2340ca00987b-0"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-b880bd61-8e28-44ff-b1b7-319821d36654-8" /> + </symbol> + <symbol + overflow="visible" + id="id-9f4b5d89-4f82-443e-aeab-44850820982d-1"> + <path + style="stroke:none" + d="" + id="id-d65784a0-aa5d-47b4-bc0b-6bafea1755bf-3" /> + </symbol> + <symbol + overflow="visible" + id="id-042c7792-5675-40b4-a5a6-74b1df22e176-1"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-0247951f-4384-4d49-ad6d-5360e43ffcae-1" /> + </symbol> + </g> + <g + id="g5405-0"> + <symbol + overflow="visible" + id="symbol5399-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path5397-4" /> + </symbol> + <symbol + overflow="visible" + id="symbol5403-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="path5401-2" /> + </symbol> + </g> + <g + id="id-f71ea667-3b4d-4d21-ad1f-0ecb1dd3e484-1"> + <symbol + overflow="visible" + id="id-34dc3a3d-2276-4043-8291-b700fbc2dff1-5"> + <path + style="stroke:none" + d="" + id="id-9cccc023-3ff4-416e-878b-ddafd3dd0fcd-9" /> + </symbol> + <symbol + overflow="visible" + id="id-9bd60f18-4c4d-4ddd-b181-16f7a2d92fbc-9"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-d86d8910-8168-40a7-ac81-0c33df86ab0e-1" /> + </symbol> + <symbol + overflow="visible" + id="id-d9fa921e-ba7e-461c-9b85-204169b0b876-4"> + <path + style="stroke:none" + d="" + id="id-513ff48d-b30f-41d2-a80a-6d4ac5c4bdf2-9" /> + </symbol> + <symbol + overflow="visible" + id="id-ba38b8ec-61ee-49f7-aa7b-b60f1f54849e-1"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-99aee4ff-3e86-462c-8595-98407ac2efa0-0" /> + </symbol> + </g> + <g + id="id-3dd9cb25-d8bd-4dc2-8273-d7c70d917f95-6"> + <symbol + overflow="visible" + id="id-d8a0ff0d-809d-4bcd-a58a-2bfbeec9c60b-1"> + <path + style="stroke:none" + d="" + id="id-3c760ccd-e80e-4aff-b97d-43dfe4ec5786-0" /> + </symbol> + <symbol + overflow="visible" + id="id-11720994-ac59-4f48-b2ec-903fd008e9d7-4"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0e848706-d066-42a0-8094-73a654a15a4b-2" /> + </symbol> + <symbol + overflow="visible" + id="id-e3c71763-ea79-4aae-a08c-cbf6475bf644-2"> + <path + style="stroke:none" + d="" + id="id-8ede1f05-b6ab-4daa-8c2a-61b53065ee5e-2" /> + </symbol> + <symbol + overflow="visible" + id="id-38128339-202c-45b3-8c2b-93e27d8e0313-0"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c5c824f9-8bf0-4998-a405-4a2b8257fc16-5" /> + </symbol> + <symbol + overflow="visible" + id="id-4308d98e-09ef-4d6f-ac9e-2e47ab175120-5"> + <path + style="stroke:none" + d="" + id="id-252f59a8-9cf1-4882-9572-5ca5c2c28b8a-2" /> + </symbol> + <symbol + overflow="visible" + id="id-d1ff7ffe-4bae-494f-b96b-420a591d1181-9"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-67bf598d-87db-40b4-a708-8d12284c270f-0" /> + </symbol> + </g> + <g + id="id-3dd9cb25-d8bd-4dc2-8273-d7c70d917f95-4"> + <symbol + overflow="visible" + id="id-d8a0ff0d-809d-4bcd-a58a-2bfbeec9c60b-9"> + <path + style="stroke:none" + d="" + id="id-3c760ccd-e80e-4aff-b97d-43dfe4ec5786-9" /> + </symbol> + <symbol + overflow="visible" + id="id-11720994-ac59-4f48-b2ec-903fd008e9d7-3"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0e848706-d066-42a0-8094-73a654a15a4b-6" /> + </symbol> + <symbol + overflow="visible" + id="id-e3c71763-ea79-4aae-a08c-cbf6475bf644-0"> + <path + style="stroke:none" + d="" + id="id-8ede1f05-b6ab-4daa-8c2a-61b53065ee5e-5" /> + </symbol> + <symbol + overflow="visible" + id="id-38128339-202c-45b3-8c2b-93e27d8e0313-02"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c5c824f9-8bf0-4998-a405-4a2b8257fc16-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4308d98e-09ef-4d6f-ac9e-2e47ab175120-4"> + <path + style="stroke:none" + d="" + id="id-252f59a8-9cf1-4882-9572-5ca5c2c28b8a-3" /> + </symbol> + <symbol + overflow="visible" + id="id-d1ff7ffe-4bae-494f-b96b-420a591d1181-5"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-67bf598d-87db-40b4-a708-8d12284c270f-1" /> + </symbol> + </g> + <g + id="id-3dd9cb25-d8bd-4dc2-8273-d7c70d917f95-9"> + <symbol + overflow="visible" + id="id-d8a0ff0d-809d-4bcd-a58a-2bfbeec9c60b-2"> + <path + style="stroke:none" + d="" + id="id-3c760ccd-e80e-4aff-b97d-43dfe4ec5786-8" /> + </symbol> + <symbol + overflow="visible" + id="id-11720994-ac59-4f48-b2ec-903fd008e9d7-8"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0e848706-d066-42a0-8094-73a654a15a4b-8" /> + </symbol> + <symbol + overflow="visible" + id="id-e3c71763-ea79-4aae-a08c-cbf6475bf644-6"> + <path + style="stroke:none" + d="" + id="id-8ede1f05-b6ab-4daa-8c2a-61b53065ee5e-8" /> + </symbol> + <symbol + overflow="visible" + id="id-38128339-202c-45b3-8c2b-93e27d8e0313-3"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c5c824f9-8bf0-4998-a405-4a2b8257fc16-8" /> + </symbol> + <symbol + overflow="visible" + id="id-4308d98e-09ef-4d6f-ac9e-2e47ab175120-3"> + <path + style="stroke:none" + d="" + id="id-252f59a8-9cf1-4882-9572-5ca5c2c28b8a-33" /> + </symbol> + <symbol + overflow="visible" + id="id-d1ff7ffe-4bae-494f-b96b-420a591d1181-8"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-67bf598d-87db-40b4-a708-8d12284c270f-04" /> + </symbol> + </g> + <g + id="id-3dd9cb25-d8bd-4dc2-8273-d7c70d917f95-2"> + <symbol + overflow="visible" + id="id-d8a0ff0d-809d-4bcd-a58a-2bfbeec9c60b-6"> + <path + style="stroke:none" + d="" + id="id-3c760ccd-e80e-4aff-b97d-43dfe4ec5786-5" /> + </symbol> + <symbol + overflow="visible" + id="id-11720994-ac59-4f48-b2ec-903fd008e9d7-2"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0e848706-d066-42a0-8094-73a654a15a4b-65" /> + </symbol> + <symbol + overflow="visible" + id="id-e3c71763-ea79-4aae-a08c-cbf6475bf644-8"> + <path + style="stroke:none" + d="" + id="id-8ede1f05-b6ab-4daa-8c2a-61b53065ee5e-7" /> + </symbol> + <symbol + overflow="visible" + id="id-38128339-202c-45b3-8c2b-93e27d8e0313-9"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c5c824f9-8bf0-4998-a405-4a2b8257fc16-6" /> + </symbol> + <symbol + overflow="visible" + id="id-4308d98e-09ef-4d6f-ac9e-2e47ab175120-0"> + <path + style="stroke:none" + d="" + id="id-252f59a8-9cf1-4882-9572-5ca5c2c28b8a-4" /> + </symbol> + <symbol + overflow="visible" + id="id-d1ff7ffe-4bae-494f-b96b-420a591d1181-1"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-67bf598d-87db-40b4-a708-8d12284c270f-048" /> + </symbol> + </g> + <defs + id="id-2d87e1eb-bc7d-4d81-9582-86bf8727c9c8-3"> + <g + id="g9835"> + <symbol + overflow="visible" + id="symbol9829"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path9827" /> + </symbol> + <symbol + overflow="visible" + id="symbol9833"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="path9831" /> + </symbol> + </g> + </defs> + <g + id="id-b15114a7-ca09-4a21-ad11-725124638424-9"> + <symbol + overflow="visible" + id="id-310b4048-7c0e-46eb-bfd0-a76166008027-6"> + <path + style="stroke:none" + d="" + id="id-d6720d2c-5774-4364-8d54-58341c455226-2" /> + </symbol> + <symbol + overflow="visible" + id="id-380331dc-88ab-482c-b934-cf4ac9c4ff54-1"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-3a19059e-f020-4a72-9f12-a604927b3cd3-2" /> + </symbol> + <symbol + overflow="visible" + id="id-d8429f02-44d9-4eea-baa5-885d8a467e29-0"> + <path + style="stroke:none" + d="" + id="id-2ca3837e-ef16-4602-a5db-d5f0c7eef876-7" /> + </symbol> + <symbol + overflow="visible" + id="id-e6901dc5-9917-4fb0-a181-aa79499a7893-3"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-3d07bff7-8536-4d05-9265-e222d0ded5de-1" /> + </symbol> + <symbol + overflow="visible" + id="id-d654728c-9737-434e-9366-43d67bc9135b-1"> + <path + style="stroke:none" + d="" + id="id-2cb602a0-1505-4afe-9908-6b3a2a7e619e-9" /> + </symbol> + <symbol + overflow="visible" + id="id-364e5767-a7b9-4262-a86d-4fa669215069-0"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-92389ee1-b7ce-499d-b00c-189d8877af98-5" /> + </symbol> + </g> + <g + id="id-eb52ad1a-98d6-4508-8c52-d822e8214559-2"> + <symbol + overflow="visible" + id="id-90e0f0c5-a5dc-4c99-be01-17ce75139c28-6"> + <path + style="stroke:none" + d="" + id="id-0aab7f5a-cce1-4a3b-a8f8-a6fa9bdb2442-0" /> + </symbol> + <symbol + overflow="visible" + id="id-350d3c26-9d68-4293-9402-db84f99a56a0-6"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-9989a360-a08e-439e-b73c-db08ffd06058-6" /> + </symbol> + <symbol + overflow="visible" + id="id-6218964a-9604-4244-bd4b-9454bf0bb4b0-4"> + <path + style="stroke:none" + d="" + id="id-d9651d3c-227d-4426-8b25-41f32650ce85-6" /> + </symbol> + <symbol + overflow="visible" + id="id-71be12ed-4366-49ab-b52d-f913ea29ee61-2"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-c69d8307-964b-4a94-852d-813bbd63d286-8" /> + </symbol> + </g> + <g + id="g9297-5"> + <symbol + overflow="visible" + id="symbol9283-3"> + <path + style="stroke:none" + d="" + id="path9281-5" /> + </symbol> + <symbol + overflow="visible" + id="symbol9287-6"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="path9285-2" /> + </symbol> + <symbol + overflow="visible" + id="symbol9291-9"> + <path + style="stroke:none" + d="" + id="path9289-1" /> + </symbol> + <symbol + overflow="visible" + id="symbol9295-2"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path9293-7" /> + </symbol> + </g> + <g + id="g2027"> + <symbol + overflow="visible" + id="symbol1528"> + <path + style="stroke:none;" + d="" + id="path9847" /> + </symbol> + <symbol + overflow="visible" + id="symbol3618"> + <path + style="stroke:none;" + d="M 2.640625 -3.71875 L 3.765625 -3.71875 C 3.4375 -2.25 3.34375 -1.8125 3.34375 -1.140625 C 3.34375 -1 3.34375 -0.734375 3.421875 -0.390625 C 3.53125 0.046875 3.640625 0.109375 3.78125 0.109375 C 3.984375 0.109375 4.203125 -0.0625 4.203125 -0.265625 C 4.203125 -0.328125 4.203125 -0.34375 4.140625 -0.484375 C 3.84375 -1.203125 3.84375 -1.859375 3.84375 -2.140625 C 3.84375 -2.65625 3.921875 -3.203125 4.03125 -3.71875 L 5.15625 -3.71875 C 5.296875 -3.71875 5.65625 -3.71875 5.65625 -4.0625 C 5.65625 -4.296875 5.4375 -4.296875 5.25 -4.296875 L 1.90625 -4.296875 C 1.6875 -4.296875 1.3125 -4.296875 0.875 -3.828125 C 0.53125 -3.4375 0.265625 -2.984375 0.265625 -2.9375 C 0.265625 -2.921875 0.265625 -2.828125 0.390625 -2.828125 C 0.46875 -2.828125 0.484375 -2.875 0.546875 -2.953125 C 1.03125 -3.71875 1.609375 -3.71875 1.8125 -3.71875 L 2.375 -3.71875 C 2.0625 -2.515625 1.53125 -1.3125 1.109375 -0.40625 C 1.03125 -0.25 1.03125 -0.234375 1.03125 -0.15625 C 1.03125 0.03125 1.1875 0.109375 1.3125 0.109375 C 1.609375 0.109375 1.6875 -0.171875 1.8125 -0.53125 C 1.953125 -1 1.953125 -1.015625 2.078125 -1.515625 Z M 2.640625 -3.71875 " + id="path6573" /> + </symbol> + <symbol + overflow="visible" + id="symbol3372"> + <path + style="stroke:none;" + d="M 2.859375 -6.8125 C 2.859375 -6.8125 2.859375 -6.921875 2.734375 -6.921875 C 2.5 -6.921875 1.78125 -6.84375 1.515625 -6.8125 C 1.4375 -6.8125 1.328125 -6.796875 1.328125 -6.625 C 1.328125 -6.5 1.421875 -6.5 1.5625 -6.5 C 2.046875 -6.5 2.0625 -6.4375 2.0625 -6.328125 L 2.03125 -6.125 L 0.59375 -0.390625 C 0.546875 -0.25 0.546875 -0.234375 0.546875 -0.171875 C 0.546875 0.0625 0.75 0.109375 0.84375 0.109375 C 0.96875 0.109375 1.109375 0.015625 1.171875 -0.09375 C 1.21875 -0.1875 1.671875 -2.03125 1.734375 -2.28125 C 2.078125 -2.25 2.890625 -2.09375 2.890625 -1.4375 C 2.890625 -1.359375 2.890625 -1.328125 2.859375 -1.21875 C 2.84375 -1.109375 2.828125 -0.984375 2.828125 -0.875 C 2.828125 -0.296875 3.21875 0.109375 3.734375 0.109375 C 4.03125 0.109375 4.3125 -0.046875 4.53125 -0.421875 C 4.78125 -0.859375 4.890625 -1.40625 4.890625 -1.421875 C 4.890625 -1.53125 4.796875 -1.53125 4.765625 -1.53125 C 4.671875 -1.53125 4.65625 -1.484375 4.625 -1.34375 C 4.421875 -0.625 4.203125 -0.109375 3.765625 -0.109375 C 3.5625 -0.109375 3.4375 -0.21875 3.4375 -0.578125 C 3.4375 -0.75 3.484375 -0.984375 3.515625 -1.140625 C 3.5625 -1.3125 3.5625 -1.34375 3.5625 -1.453125 C 3.5625 -2.09375 2.9375 -2.375 2.078125 -2.5 C 2.390625 -2.671875 2.71875 -2.984375 2.9375 -3.234375 C 3.421875 -3.765625 3.875 -4.1875 4.359375 -4.1875 C 4.421875 -4.1875 4.4375 -4.1875 4.453125 -4.171875 C 4.578125 -4.15625 4.578125 -4.15625 4.671875 -4.09375 C 4.6875 -4.09375 4.6875 -4.078125 4.703125 -4.0625 C 4.234375 -4.03125 4.140625 -3.640625 4.140625 -3.515625 C 4.140625 -3.359375 4.25 -3.171875 4.515625 -3.171875 C 4.78125 -3.171875 5.0625 -3.390625 5.0625 -3.78125 C 5.0625 -4.078125 4.828125 -4.40625 4.390625 -4.40625 C 4.109375 -4.40625 3.65625 -4.328125 2.9375 -3.53125 C 2.59375 -3.15625 2.203125 -2.75 1.828125 -2.609375 Z M 2.859375 -6.8125 " + id="path8281" /> + </symbol> + <symbol + overflow="visible" + id="symbol5758"> + <path + style="stroke:none;" + d="" + id="path3346" /> + </symbol> + <symbol + overflow="visible" + id="symbol4555"> + <path + style="stroke:none;" + d="M 3.515625 -1.265625 L 3.28125 -1.265625 C 3.265625 -1.109375 3.1875 -0.703125 3.09375 -0.640625 C 3.046875 -0.59375 2.515625 -0.59375 2.40625 -0.59375 L 1.125 -0.59375 C 1.859375 -1.234375 2.109375 -1.4375 2.515625 -1.765625 C 3.03125 -2.171875 3.515625 -2.609375 3.515625 -3.265625 C 3.515625 -4.109375 2.78125 -4.625 1.890625 -4.625 C 1.03125 -4.625 0.4375 -4.015625 0.4375 -3.375 C 0.4375 -3.03125 0.734375 -2.984375 0.8125 -2.984375 C 0.96875 -2.984375 1.171875 -3.109375 1.171875 -3.359375 C 1.171875 -3.484375 1.125 -3.734375 0.765625 -3.734375 C 0.984375 -4.21875 1.453125 -4.375 1.78125 -4.375 C 2.484375 -4.375 2.84375 -3.828125 2.84375 -3.265625 C 2.84375 -2.65625 2.40625 -2.1875 2.1875 -1.9375 L 0.515625 -0.265625 C 0.4375 -0.203125 0.4375 -0.1875 0.4375 0 L 3.3125 0 Z M 3.515625 -1.265625 " + id="path2631" /> + </symbol> + <symbol + overflow="visible" + id="symbol3312"> + <path + style="stroke:none;" + d="M 5.359375 -2.34375 C 5.453125 -2.34375 5.609375 -2.34375 5.609375 -2.515625 C 5.609375 -2.6875 5.453125 -2.6875 5.359375 -2.6875 L 0.75 -2.6875 C 0.65625 -2.6875 0.484375 -2.6875 0.484375 -2.515625 C 0.484375 -2.34375 0.640625 -2.34375 0.75 -2.34375 Z M 5.359375 -0.8125 C 5.453125 -0.8125 5.609375 -0.8125 5.609375 -0.96875 C 5.609375 -1.15625 5.453125 -1.15625 5.359375 -1.15625 L 0.75 -1.15625 C 0.640625 -1.15625 0.484375 -1.15625 0.484375 -0.96875 C 0.484375 -0.8125 0.65625 -0.8125 0.75 -0.8125 Z M 5.359375 -0.8125 " + id="path4030" /> + </symbol> + <symbol + overflow="visible" + id="symbol9855"> + <path + style="stroke:none;" + d="M 2.328125 -4.4375 C 2.328125 -4.625 2.328125 -4.625 2.125 -4.625 C 1.671875 -4.1875 1.046875 -4.1875 0.765625 -4.1875 L 0.765625 -3.9375 C 0.921875 -3.9375 1.390625 -3.9375 1.765625 -4.125 L 1.765625 -0.578125 C 1.765625 -0.34375 1.765625 -0.25 1.078125 -0.25 L 0.8125 -0.25 L 0.8125 0 C 0.9375 0 1.796875 -0.03125 2.046875 -0.03125 C 2.265625 -0.03125 3.140625 0 3.296875 0 L 3.296875 -0.25 L 3.03125 -0.25 C 2.328125 -0.25 2.328125 -0.34375 2.328125 -0.578125 Z M 2.328125 -4.4375 " + id="path8801" /> + </symbol> + <symbol + overflow="visible" + id="symbol7864"> + <path + style="stroke:none;" + d="" + id="path785" /> + </symbol> + <symbol + overflow="visible" + id="symbol9766"> + <path + style="stroke:none;" + d="M 1.3125 -3.265625 L 1.3125 -3.515625 C 1.3125 -6.03125 2.546875 -6.390625 3.0625 -6.390625 C 3.296875 -6.390625 3.71875 -6.328125 3.9375 -5.984375 C 3.78125 -5.984375 3.390625 -5.984375 3.390625 -5.546875 C 3.390625 -5.234375 3.625 -5.078125 3.84375 -5.078125 C 4 -5.078125 4.3125 -5.171875 4.3125 -5.5625 C 4.3125 -6.15625 3.875 -6.640625 3.046875 -6.640625 C 1.765625 -6.640625 0.421875 -5.359375 0.421875 -3.15625 C 0.421875 -0.484375 1.578125 0.21875 2.5 0.21875 C 3.609375 0.21875 4.5625 -0.71875 4.5625 -2.03125 C 4.5625 -3.296875 3.671875 -4.25 2.5625 -4.25 C 1.890625 -4.25 1.515625 -3.75 1.3125 -3.265625 Z M 2.5 -0.0625 C 1.875 -0.0625 1.578125 -0.65625 1.515625 -0.8125 C 1.328125 -1.28125 1.328125 -2.078125 1.328125 -2.25 C 1.328125 -3.03125 1.65625 -4.03125 2.546875 -4.03125 C 2.71875 -4.03125 3.171875 -4.03125 3.484375 -3.40625 C 3.65625 -3.046875 3.65625 -2.53125 3.65625 -2.046875 C 3.65625 -1.5625 3.65625 -1.0625 3.484375 -0.703125 C 3.1875 -0.109375 2.734375 -0.0625 2.5 -0.0625 Z M 2.5 -0.0625 " + id="path5845" /> + </symbol> + <symbol + overflow="visible" + id="symbol9105"> + <path + style="stroke:none;" + d="M 6.84375 -3.265625 C 7 -3.265625 7.1875 -3.265625 7.1875 -3.453125 C 7.1875 -3.65625 7 -3.65625 6.859375 -3.65625 L 0.890625 -3.65625 C 0.75 -3.65625 0.5625 -3.65625 0.5625 -3.453125 C 0.5625 -3.265625 0.75 -3.265625 0.890625 -3.265625 Z M 6.859375 -1.328125 C 7 -1.328125 7.1875 -1.328125 7.1875 -1.53125 C 7.1875 -1.71875 7 -1.71875 6.84375 -1.71875 L 0.890625 -1.71875 C 0.75 -1.71875 0.5625 -1.71875 0.5625 -1.53125 C 0.5625 -1.328125 0.75 -1.328125 0.890625 -1.328125 Z M 6.859375 -1.328125 " + id="path8151" /> + </symbol> + <symbol + overflow="visible" + id="symbol1893"> + <path + style="stroke:none;" + d="M 1.765625 -6.921875 L 0.328125 -6.8125 L 0.328125 -6.5 C 1.03125 -6.5 1.109375 -6.4375 1.109375 -5.9375 L 1.109375 -0.75 C 1.109375 -0.3125 1 -0.3125 0.328125 -0.3125 L 0.328125 0 C 0.65625 -0.015625 1.1875 -0.03125 1.4375 -0.03125 C 1.6875 -0.03125 2.171875 -0.015625 2.546875 0 L 2.546875 -0.3125 C 1.875 -0.3125 1.765625 -0.3125 1.765625 -0.75 Z M 1.765625 -6.921875 " + id="path9830" /> + </symbol> + <symbol + overflow="visible" + id="symbol5829"> + <path + style="stroke:none;" + d="M 1.765625 -4.40625 L 0.375 -4.296875 L 0.375 -3.984375 C 1.015625 -3.984375 1.109375 -3.921875 1.109375 -3.4375 L 1.109375 -0.75 C 1.109375 -0.3125 1 -0.3125 0.328125 -0.3125 L 0.328125 0 C 0.640625 -0.015625 1.1875 -0.03125 1.421875 -0.03125 C 1.78125 -0.03125 2.125 -0.015625 2.46875 0 L 2.46875 -0.3125 C 1.796875 -0.3125 1.765625 -0.359375 1.765625 -0.75 Z M 1.796875 -6.140625 C 1.796875 -6.453125 1.5625 -6.671875 1.28125 -6.671875 C 0.96875 -6.671875 0.75 -6.40625 0.75 -6.140625 C 0.75 -5.875 0.96875 -5.609375 1.28125 -5.609375 C 1.5625 -5.609375 1.796875 -5.828125 1.796875 -6.140625 Z M 1.796875 -6.140625 " + id="path4426" /> + </symbol> + <symbol + overflow="visible" + id="symbol9652"> + <path + style="stroke:none;" + d="M 1.09375 -3.421875 L 1.09375 -0.75 C 1.09375 -0.3125 0.984375 -0.3125 0.3125 -0.3125 L 0.3125 0 C 0.671875 -0.015625 1.171875 -0.03125 1.453125 -0.03125 C 1.703125 -0.03125 2.21875 -0.015625 2.5625 0 L 2.5625 -0.3125 C 1.890625 -0.3125 1.78125 -0.3125 1.78125 -0.75 L 1.78125 -2.59375 C 1.78125 -3.625 2.5 -4.1875 3.125 -4.1875 C 3.765625 -4.1875 3.875 -3.65625 3.875 -3.078125 L 3.875 -0.75 C 3.875 -0.3125 3.765625 -0.3125 3.09375 -0.3125 L 3.09375 0 C 3.4375 -0.015625 3.953125 -0.03125 4.21875 -0.03125 C 4.46875 -0.03125 5 -0.015625 5.328125 0 L 5.328125 -0.3125 C 4.671875 -0.3125 4.5625 -0.3125 4.5625 -0.75 L 4.5625 -2.59375 C 4.5625 -3.625 5.265625 -4.1875 5.90625 -4.1875 C 6.53125 -4.1875 6.640625 -3.65625 6.640625 -3.078125 L 6.640625 -0.75 C 6.640625 -0.3125 6.53125 -0.3125 5.859375 -0.3125 L 5.859375 0 C 6.203125 -0.015625 6.71875 -0.03125 6.984375 -0.03125 C 7.25 -0.03125 7.765625 -0.015625 8.109375 0 L 8.109375 -0.3125 C 7.59375 -0.3125 7.34375 -0.3125 7.328125 -0.609375 L 7.328125 -2.515625 C 7.328125 -3.375 7.328125 -3.671875 7.015625 -4.03125 C 6.875 -4.203125 6.546875 -4.40625 5.96875 -4.40625 C 5.140625 -4.40625 4.6875 -3.8125 4.53125 -3.421875 C 4.390625 -4.296875 3.65625 -4.40625 3.203125 -4.40625 C 2.46875 -4.40625 2 -3.984375 1.71875 -3.359375 L 1.71875 -4.40625 L 0.3125 -4.296875 L 0.3125 -3.984375 C 1.015625 -3.984375 1.09375 -3.921875 1.09375 -3.421875 Z M 1.09375 -3.421875 " + id="path6081" /> + </symbol> + <symbol + overflow="visible" + id="symbol9380"> + <path + style="stroke:none;" + d="M 2.9375 -6.375 C 2.9375 -6.625 2.9375 -6.640625 2.703125 -6.640625 C 2.078125 -6 1.203125 -6 0.890625 -6 L 0.890625 -5.6875 C 1.09375 -5.6875 1.671875 -5.6875 2.1875 -5.953125 L 2.1875 -0.78125 C 2.1875 -0.421875 2.15625 -0.3125 1.265625 -0.3125 L 0.953125 -0.3125 L 0.953125 0 C 1.296875 -0.03125 2.15625 -0.03125 2.5625 -0.03125 C 2.953125 -0.03125 3.828125 -0.03125 4.171875 0 L 4.171875 -0.3125 L 3.859375 -0.3125 C 2.953125 -0.3125 2.9375 -0.421875 2.9375 -0.78125 Z M 2.9375 -6.375 " + id="path3882" /> + </symbol> + <symbol + overflow="visible" + id="symbol437"> + <path + style="stroke:none;" + d="" + id="path4428" /> + </symbol> + <symbol + overflow="visible" + id="symbol6172"> + <path + style="stroke:none;" + d="M 0.84375 -0.4375 C 0.828125 -0.34375 0.78125 -0.171875 0.78125 -0.15625 C 0.78125 0 0.90625 0.0625 1.015625 0.0625 C 1.140625 0.0625 1.25 -0.015625 1.296875 -0.078125 C 1.328125 -0.140625 1.375 -0.375 1.421875 -0.515625 C 1.453125 -0.640625 1.53125 -0.96875 1.5625 -1.140625 C 1.609375 -1.296875 1.65625 -1.453125 1.6875 -1.609375 C 1.765625 -1.890625 1.78125 -1.953125 1.984375 -2.234375 C 2.171875 -2.515625 2.5 -2.875 3.03125 -2.875 C 3.421875 -2.875 3.4375 -2.515625 3.4375 -2.390625 C 3.4375 -1.96875 3.140625 -1.203125 3.03125 -0.90625 C 2.953125 -0.703125 2.921875 -0.640625 2.921875 -0.53125 C 2.921875 -0.15625 3.21875 0.0625 3.578125 0.0625 C 4.28125 0.0625 4.578125 -0.890625 4.578125 -1 C 4.578125 -1.09375 4.5 -1.09375 4.46875 -1.09375 C 4.375 -1.09375 4.375 -1.046875 4.34375 -0.96875 C 4.1875 -0.40625 3.875 -0.125 3.609375 -0.125 C 3.453125 -0.125 3.421875 -0.21875 3.421875 -0.375 C 3.421875 -0.53125 3.46875 -0.625 3.59375 -0.9375 C 3.671875 -1.15625 3.953125 -1.890625 3.953125 -2.28125 C 3.953125 -2.953125 3.421875 -3.078125 3.046875 -3.078125 C 2.46875 -3.078125 2.078125 -2.71875 1.875 -2.4375 C 1.828125 -2.921875 1.421875 -3.078125 1.125 -3.078125 C 0.828125 -3.078125 0.671875 -2.859375 0.578125 -2.703125 C 0.421875 -2.4375 0.328125 -2.046875 0.328125 -2 C 0.328125 -1.921875 0.421875 -1.921875 0.453125 -1.921875 C 0.546875 -1.921875 0.546875 -1.9375 0.59375 -2.125 C 0.703125 -2.53125 0.84375 -2.875 1.109375 -2.875 C 1.296875 -2.875 1.34375 -2.71875 1.34375 -2.53125 C 1.34375 -2.40625 1.28125 -2.140625 1.21875 -1.953125 C 1.171875 -1.765625 1.109375 -1.484375 1.078125 -1.328125 Z M 0.84375 -0.4375 " + id="path2642" /> + </symbol> + <symbol + overflow="visible" + id="symbol1880"> + <path + style="stroke:none;" + d="M 2.1875 -4.625 C 2.1875 -4.640625 2.203125 -4.734375 2.203125 -4.734375 C 2.203125 -4.78125 2.1875 -4.84375 2.09375 -4.84375 C 1.953125 -4.84375 1.375 -4.78125 1.203125 -4.765625 C 1.15625 -4.765625 1.046875 -4.75 1.046875 -4.609375 C 1.046875 -4.515625 1.15625 -4.515625 1.234375 -4.515625 C 1.5625 -4.515625 1.5625 -4.453125 1.5625 -4.40625 C 1.5625 -4.359375 1.546875 -4.3125 1.546875 -4.25 L 0.5625 -0.3125 C 0.515625 -0.1875 0.515625 -0.171875 0.515625 -0.15625 C 0.515625 -0.046875 0.609375 0.0625 0.765625 0.0625 C 0.953125 0.0625 1.03125 -0.0625 1.078125 -0.21875 C 1.09375 -0.25 1.390625 -1.484375 1.421875 -1.578125 C 1.921875 -1.53125 2.3125 -1.359375 2.3125 -1 C 2.3125 -0.96875 2.3125 -0.9375 2.296875 -0.859375 C 2.265625 -0.765625 2.265625 -0.71875 2.265625 -0.640625 C 2.265625 -0.15625 2.671875 0.0625 3.015625 0.0625 C 3.6875 0.0625 3.890625 -0.984375 3.890625 -1 C 3.890625 -1.09375 3.8125 -1.09375 3.78125 -1.09375 C 3.6875 -1.09375 3.671875 -1.046875 3.640625 -0.921875 C 3.5625 -0.625 3.375 -0.125 3.03125 -0.125 C 2.84375 -0.125 2.78125 -0.296875 2.78125 -0.484375 C 2.78125 -0.609375 2.78125 -0.625 2.828125 -0.796875 C 2.84375 -0.828125 2.859375 -0.9375 2.859375 -1.015625 C 2.859375 -1.640625 2.03125 -1.734375 1.734375 -1.75 C 1.9375 -1.875 2.1875 -2.109375 2.3125 -2.21875 C 2.671875 -2.546875 3.015625 -2.875 3.40625 -2.875 C 3.484375 -2.875 3.578125 -2.859375 3.640625 -2.78125 C 3.34375 -2.734375 3.28125 -2.5 3.28125 -2.390625 C 3.28125 -2.25 3.390625 -2.140625 3.546875 -2.140625 C 3.75 -2.140625 3.953125 -2.296875 3.953125 -2.578125 C 3.953125 -2.8125 3.78125 -3.078125 3.421875 -3.078125 C 3.015625 -3.078125 2.65625 -2.78125 2.296875 -2.453125 C 2 -2.1875 1.78125 -1.96875 1.484375 -1.84375 Z M 2.1875 -4.625 " + id="path8696" /> + </symbol> + <symbol + overflow="visible" + id="symbol4954"> + <path + style="stroke:none;" + d="" + id="path5507" /> + </symbol> + <symbol + overflow="visible" + id="symbol348"> + <path + style="stroke:none;" + d="M 6.40625 -1.578125 C 5.53125 -0.9375 5.421875 -0.015625 5.421875 -0.015625 C 5.421875 0.09375 5.484375 0.09375 5.578125 0.09375 C 5.703125 0.09375 5.734375 0.09375 5.765625 -0.03125 C 5.8125 -0.203125 5.921875 -0.640625 6.28125 -1.03125 C 6.6875 -1.453125 7.03125 -1.5625 7.328125 -1.65625 C 7.359375 -1.671875 7.390625 -1.703125 7.390625 -1.734375 C 7.390625 -1.8125 7.359375 -1.828125 7.265625 -1.859375 C 6.265625 -2.171875 5.90625 -2.890625 5.75 -3.5 C 5.734375 -3.578125 5.671875 -3.578125 5.578125 -3.578125 C 5.484375 -3.578125 5.421875 -3.578125 5.421875 -3.484375 C 5.421875 -3.46875 5.484375 -3 5.828125 -2.515625 C 5.984375 -2.28125 6.1875 -2.078125 6.40625 -1.921875 L 0.8125 -1.921875 C 0.703125 -1.921875 0.53125 -1.921875 0.53125 -1.75 C 0.53125 -1.578125 0.703125 -1.578125 0.8125 -1.578125 Z M 6.40625 -1.578125 " + id="path5803" /> + </symbol> + <symbol + overflow="visible" + id="symbol5806"> + <path + style="stroke:none;" + d="M 4.03125 -1.90625 C 3.65625 -2.34375 3.546875 -2.453125 3.28125 -2.640625 C 2.859375 -2.953125 2.40625 -3.078125 2.03125 -3.078125 C 1.15625 -3.078125 0.53125 -2.328125 0.53125 -1.5 C 0.53125 -0.6875 1.140625 0.0625 2 0.0625 C 2.96875 0.0625 3.65625 -0.71875 3.90625 -1.09375 C 4.265625 -0.65625 4.390625 -0.546875 4.640625 -0.359375 C 5.078125 -0.046875 5.515625 0.0625 5.90625 0.0625 C 6.765625 0.0625 7.390625 -0.671875 7.390625 -1.5 C 7.390625 -2.328125 6.796875 -3.078125 5.921875 -3.078125 C 4.953125 -3.078125 4.28125 -2.28125 4.03125 -1.90625 Z M 4.25 -1.65625 C 4.53125 -2.109375 5.140625 -2.8125 5.984375 -2.8125 C 6.703125 -2.8125 7.203125 -2.171875 7.203125 -1.5 C 7.203125 -0.84375 6.65625 -0.3125 6.015625 -0.3125 C 5.359375 -0.3125 4.921875 -0.84375 4.25 -1.65625 Z M 3.671875 -1.359375 C 3.40625 -0.90625 2.796875 -0.1875 1.9375 -0.1875 C 1.21875 -0.1875 0.734375 -0.828125 0.734375 -1.5 C 0.734375 -2.171875 1.28125 -2.6875 1.921875 -2.6875 C 2.5625 -2.6875 3.015625 -2.15625 3.671875 -1.359375 Z M 3.671875 -1.359375 " + id="path5376" /> + </symbol> + <symbol + overflow="visible" + id="symbol230"> + <path + style="stroke:none;" + d="" + id="path9947" /> + </symbol> + <symbol + overflow="visible" + id="symbol6017"> + <path + style="stroke:none;" + d="M 12.625 13.953125 L 13.828125 10.765625 L 13.578125 10.765625 C 13.1875 11.796875 12.125 12.484375 10.984375 12.78125 C 10.78125 12.828125 9.796875 13.09375 7.890625 13.09375 L 1.875 13.09375 L 6.953125 7.140625 C 7.015625 7.0625 7.03125 7.03125 7.03125 6.984375 C 7.03125 6.953125 7.03125 6.921875 6.96875 6.828125 L 2.328125 0.484375 L 7.78125 0.484375 C 9.125 0.484375 10.03125 0.625 10.125 0.640625 C 10.65625 0.71875 11.53125 0.890625 12.3125 1.390625 C 12.5625 1.546875 13.234375 2 13.578125 2.796875 L 13.828125 2.796875 L 12.625 0 L 0.84375 0 C 0.609375 0 0.59375 0.015625 0.5625 0.0625 C 0.5625 0.09375 0.5625 0.296875 0.5625 0.40625 L 5.828125 7.609375 L 0.671875 13.671875 C 0.5625 13.78125 0.5625 13.84375 0.5625 13.84375 C 0.5625 13.953125 0.65625 13.953125 0.84375 13.953125 Z M 12.625 13.953125 " + id="path8524" /> + </symbol> + </g> + <g + id="id-c32c4a99-1d4b-4f96-bc99-03794549d9e8-7"> + <symbol + overflow="visible" + id="id-85ce1641-a797-41a3-80d6-c31dc5baab30-9"> + <path + style="stroke:none" + d="" + id="id-05a16e79-fee2-4fcc-a02c-fe91f7bf9dc2-2" /> + </symbol> + <symbol + overflow="visible" + id="id-28f87cb3-8400-4fe5-bae3-8a97938e3f48-0"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-661793dd-c022-4f0a-9b05-38a8f25ce49f-2" /> + </symbol> + </g> + <g + id="id-c32c4a99-1d4b-4f96-bc99-03794549d9e8-9"> + <symbol + overflow="visible" + id="id-85ce1641-a797-41a3-80d6-c31dc5baab30-7"> + <path + style="stroke:none" + d="" + id="id-05a16e79-fee2-4fcc-a02c-fe91f7bf9dc2-3" /> + </symbol> + <symbol + overflow="visible" + id="id-28f87cb3-8400-4fe5-bae3-8a97938e3f48-6"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-661793dd-c022-4f0a-9b05-38a8f25ce49f-1" /> + </symbol> + </g> + <g + id="id-9700d69b-b708-4431-a1bd-03a345ee1a5a-8"> + <symbol + overflow="visible" + id="id-4e951f94-1396-4a8e-b149-617494eecb2b-4"> + <path + style="stroke:none" + d="" + id="id-87fcca55-e309-421c-a723-adc59bdcc982-5" /> + </symbol> + <symbol + overflow="visible" + id="id-f7da61ac-6bdb-4ba0-b20a-93899408e066-0"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-9e10732f-e482-4df9-bc27-e4559cda67d7-3" /> + </symbol> + <symbol + overflow="visible" + id="id-3368cb60-09f8-4f72-9a61-112c593bdc4c-6"> + <path + style="stroke:none" + d="" + id="id-1c3785a5-9e43-4554-8880-001ff4aac126-1" /> + </symbol> + <symbol + overflow="visible" + id="id-94bdc6e4-6d13-4f10-b74b-afab9a024d89-0"> + <path + style="stroke:none" + d="m 3.21875,-1.578125 h 2.140625 c 0.09375,0 0.25,0 0.25,-0.15625 0,-0.1875 -0.15625,-0.1875 -0.25,-0.1875 H 3.21875 V -4.0625 c 0,-0.078125 0,-0.25 -0.15625,-0.25 -0.171875,0 -0.171875,0.15625 -0.171875,0.25 v 2.140625 H 0.75 c -0.09375,0 -0.265625,0 -0.265625,0.171875 0,0.171875 0.15625,0.171875 0.265625,0.171875 H 2.890625 V 0.5625 c 0,0.09375 0,0.265625 0.15625,0.265625 0.171875,0 0.171875,-0.171875 0.171875,-0.265625 z m 0,0" + id="id-79b9ccb5-2113-4c1e-9453-80ac7c87e62a-6" /> + </symbol> + <symbol + overflow="visible" + id="id-85ab6bef-c2f5-42ce-9ea8-ba4e0c0853fe-3"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-9ab510cc-98c9-4651-93a0-af115cf1aad3-2" /> + </symbol> + </g> + <g + id="id-9700d69b-b708-4431-a1bd-03a345ee1a5a-5"> + <symbol + overflow="visible" + id="id-4e951f94-1396-4a8e-b149-617494eecb2b-2"> + <path + style="stroke:none" + d="" + id="id-87fcca55-e309-421c-a723-adc59bdcc982-54" /> + </symbol> + <symbol + overflow="visible" + id="id-f7da61ac-6bdb-4ba0-b20a-93899408e066-7"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-9e10732f-e482-4df9-bc27-e4559cda67d7-4" /> + </symbol> + <symbol + overflow="visible" + id="id-3368cb60-09f8-4f72-9a61-112c593bdc4c-4"> + <path + style="stroke:none" + d="" + id="id-1c3785a5-9e43-4554-8880-001ff4aac126-3" /> + </symbol> + <symbol + overflow="visible" + id="id-94bdc6e4-6d13-4f10-b74b-afab9a024d89-07"> + <path + style="stroke:none" + d="m 3.21875,-1.578125 h 2.140625 c 0.09375,0 0.25,0 0.25,-0.15625 0,-0.1875 -0.15625,-0.1875 -0.25,-0.1875 H 3.21875 V -4.0625 c 0,-0.078125 0,-0.25 -0.15625,-0.25 -0.171875,0 -0.171875,0.15625 -0.171875,0.25 v 2.140625 H 0.75 c -0.09375,0 -0.265625,0 -0.265625,0.171875 0,0.171875 0.15625,0.171875 0.265625,0.171875 H 2.890625 V 0.5625 c 0,0.09375 0,0.265625 0.15625,0.265625 0.171875,0 0.171875,-0.171875 0.171875,-0.265625 z m 0,0" + id="id-79b9ccb5-2113-4c1e-9453-80ac7c87e62a-8" /> + </symbol> + <symbol + overflow="visible" + id="id-85ab6bef-c2f5-42ce-9ea8-ba4e0c0853fe-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-9ab510cc-98c9-4651-93a0-af115cf1aad3-8" /> + </symbol> + </g> + <g + id="id-9700d69b-b708-4431-a1bd-03a345ee1a5a-4"> + <symbol + overflow="visible" + id="id-4e951f94-1396-4a8e-b149-617494eecb2b-9"> + <path + style="stroke:none" + d="" + id="id-87fcca55-e309-421c-a723-adc59bdcc982-50" /> + </symbol> + <symbol + overflow="visible" + id="id-f7da61ac-6bdb-4ba0-b20a-93899408e066-4"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-9e10732f-e482-4df9-bc27-e4559cda67d7-8" /> + </symbol> + <symbol + overflow="visible" + id="id-3368cb60-09f8-4f72-9a61-112c593bdc4c-7"> + <path + style="stroke:none" + d="" + id="id-1c3785a5-9e43-4554-8880-001ff4aac126-17" /> + </symbol> + <symbol + overflow="visible" + id="id-94bdc6e4-6d13-4f10-b74b-afab9a024d89-2"> + <path + style="stroke:none" + d="m 3.21875,-1.578125 h 2.140625 c 0.09375,0 0.25,0 0.25,-0.15625 0,-0.1875 -0.15625,-0.1875 -0.25,-0.1875 H 3.21875 V -4.0625 c 0,-0.078125 0,-0.25 -0.15625,-0.25 -0.171875,0 -0.171875,0.15625 -0.171875,0.25 v 2.140625 H 0.75 c -0.09375,0 -0.265625,0 -0.265625,0.171875 0,0.171875 0.15625,0.171875 0.265625,0.171875 H 2.890625 V 0.5625 c 0,0.09375 0,0.265625 0.15625,0.265625 0.171875,0 0.171875,-0.171875 0.171875,-0.265625 z m 0,0" + id="id-79b9ccb5-2113-4c1e-9453-80ac7c87e62a-7" /> + </symbol> + <symbol + overflow="visible" + id="id-85ab6bef-c2f5-42ce-9ea8-ba4e0c0853fe-2"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-9ab510cc-98c9-4651-93a0-af115cf1aad3-26" /> + </symbol> + </g> + <g + id="id-a01347b0-90cd-4ec9-887d-e01c8629d928-5"> + <symbol + overflow="visible" + id="id-e2096ad2-356a-479f-a2f9-5925f4afcaa1-9"> + <path + style="stroke:none" + d="" + id="id-7837e5a9-dcac-457d-90f5-19f20ee9dd8a-7" /> + </symbol> + <symbol + overflow="visible" + id="id-2f5bd605-362a-4503-ba8c-87e200e07c06-7"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-81206ab1-a3a5-46da-ba36-7c8c717e72e6-6" /> + </symbol> + <symbol + overflow="visible" + id="id-5e0f6526-c13a-40e8-91b2-49ba2188873f-7"> + <path + style="stroke:none" + d="" + id="id-3ee9a253-0b22-457c-bb8d-4226261beb62-3" /> + </symbol> + <symbol + overflow="visible" + id="id-24a2d54f-2c8f-44c8-8f23-2cf5b8a6b3c5-6"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-ff486641-3d0d-487c-8dc8-f94a741f33a6-5" /> + </symbol> + <symbol + overflow="visible" + id="id-1d38454e-e7de-4727-b847-a1bd5002ba1c-6"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-1f75dab9-f01f-4b70-ad77-0266aa16464b-3" /> + </symbol> + <symbol + overflow="visible" + id="id-385e44bb-6401-4a80-a1d1-c074bfab2b38-9"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-4092b46c-8929-491f-9ddc-bf3b5005c174-4" /> + </symbol> + <symbol + overflow="visible" + id="id-28fbc256-4cf8-4e21-862e-a17885055d04-8"> + <path + style="stroke:none" + d="" + id="id-ccd5aec0-565c-4e9c-9d74-c102587e659c-1" /> + </symbol> + <symbol + overflow="visible" + id="id-a7e0e44a-c9e9-4406-bf0f-6e553e16582e-2"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-92de082a-00d6-413f-8025-89281d3ce1e8-9" /> + </symbol> + </g> + <g + id="id-f5eba645-3f13-4a42-aaa6-05aa2197ffd9-0"> + <symbol + overflow="visible" + id="id-97ebea65-8696-4324-b4a9-ea64fea52451-3"> + <path + style="stroke:none" + d="" + id="id-29c62201-07d3-4d0e-9015-fc3b613afc04-0" /> + </symbol> + <symbol + overflow="visible" + id="id-c951b5d4-ec77-491f-8a28-531b7b771e7d-4"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-60f43291-5366-4a80-91e5-189861a482cc-4" /> + </symbol> + <symbol + overflow="visible" + id="id-9aeda8b7-4c1d-427b-81ca-afcaeb0b8c3a-4"> + <path + style="stroke:none" + d="" + id="id-55936e21-63a5-4ee4-bbcc-96e27570a9b1-4" /> + </symbol> + <symbol + overflow="visible" + id="id-f63fe2fd-13ba-4d8b-b4f3-b465c699579c-7"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-141e3032-0ae9-4a99-8a5e-d512025e8347-6" /> + </symbol> + <symbol + overflow="visible" + id="id-be5efca8-361b-4cf3-9be4-6787c3e88072-3"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-c9cb8af7-555f-4c51-a4fc-cc8a8cdc9a6b-1" /> + </symbol> + <symbol + overflow="visible" + id="id-045ed82c-5de9-42f0-a258-77adfaab19a4-7"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-a26948c5-8f06-47e7-a1c5-3884ed945a29-5" /> + </symbol> + <symbol + overflow="visible" + id="id-71580648-a504-4160-a6ce-e1cb5c34587e-9"> + <path + style="stroke:none" + d="" + id="id-854a77bf-ed57-4290-b614-9eaa9f1904b5-6" /> + </symbol> + <symbol + overflow="visible" + id="id-f5c4f8e1-2994-46fe-a65b-0490dea016e9-2"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-e00a1bcc-3781-4b53-86ae-955bf2cf45cf-1" /> + </symbol> + <symbol + overflow="visible" + id="id-855ee492-4f24-4765-a992-322badd0d0ce-7"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-20b0356c-0ed5-4b90-b1e6-80112b710712-8" /> + </symbol> + </g> + <g + id="id-908df72f-de8b-4f86-b543-0e9588cf71ea-8"> + <symbol + overflow="visible" + id="id-7a1b501f-af2a-4dbe-9b31-c0748f2a648e-6"> + <path + style="stroke:none" + d="" + id="id-67261c9d-77e9-4807-af69-99ebd8af83aa-0" /> + </symbol> + <symbol + overflow="visible" + id="id-df1b178e-9d15-4042-ac82-9f6b974bec47-4"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-16e0cdf6-7bb7-4fe4-a149-4671b2166f31-8" /> + </symbol> + <symbol + overflow="visible" + id="id-a1f1af77-8d82-465e-aefd-cd89e83d83d8-8"> + <path + style="stroke:none" + d="" + id="id-482aea71-3488-4c6e-88b4-d8c20b820a44-8" /> + </symbol> + <symbol + overflow="visible" + id="id-4cced342-06dd-456d-be37-7eb6a6de41ef-9"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-e3681581-c4bb-4148-8ef9-ccd2bf3dbb6f-7" /> + </symbol> + <symbol + overflow="visible" + id="id-cd9ebb03-4b32-4b3b-b360-f4c2842e2688-7"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-a71f8592-e5e6-4018-b4cb-349e953753e3-6" /> + </symbol> + <symbol + overflow="visible" + id="id-f22938a5-337e-4b8a-934c-d50ed9388598-4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-5417b346-edf6-4199-a9cb-c98c61d0b122-3" /> + </symbol> + <symbol + overflow="visible" + id="id-baa3f21e-be5c-407a-a3df-ec784cc81812-0"> + <path + style="stroke:none" + d="" + id="id-a0cd3ff5-47d7-457b-850c-ae65445c76e0-3" /> + </symbol> + <symbol + overflow="visible" + id="id-58b44953-0b1e-4458-959b-8e58fc88f03e-0"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-344c40c8-bc3d-4556-acaa-163f06cd8f17-9" /> + </symbol> + </g> + <g + id="id-8ecdf416-7420-433d-b232-d25cd2014d41-3"> + <symbol + overflow="visible" + id="id-6085f62c-e7de-4535-a672-6849904ca7a6-6"> + <path + style="stroke:none" + d="" + id="id-b555ae83-e10a-4164-a858-16ba75bae1fb-8" /> + </symbol> + <symbol + overflow="visible" + id="id-0768c856-38ba-4438-9302-d162d012e07e-0"> + <path + style="stroke:none" + d="m 1.03125,-3.953125 v 2.734375 c 0,1.0625 0.859375,1.28125 1.578125,1.28125 0.75,0 1.203125,-0.578125 1.203125,-1.296875 v -0.53125 H 3.34375 V -1.25 c 0,0.671875 -0.328125,0.90625 -0.609375,0.90625 -0.578125,0 -0.578125,-0.640625 -0.578125,-0.859375 v -2.75 H 3.625 v -0.46875 H 2.15625 v -1.90625 H 1.6875 c 0,1 -0.484375,1.984375 -1.484375,2.015625 v 0.359375 z m 0,0" + id="id-890ce425-b336-4321-8550-e572f39157c7-2" /> + </symbol> + </g> + <g + id="id-00d32c9f-a51c-4240-83bf-259b482dcea1-5"> + <symbol + overflow="visible" + id="id-5f0025dc-030d-4084-af3b-a9a4663a193c-0"> + <path + style="stroke:none" + d="" + id="id-df8af8b7-5886-40e5-899f-47e7cf5b8b17-6" /> + </symbol> + <symbol + overflow="visible" + id="id-cd00f367-5da5-4de6-be52-c7c1883ab922-4"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-221539ed-1bec-4221-89be-2d4dc66dae8b-6" /> + </symbol> + <symbol + overflow="visible" + id="id-d0300774-e73b-47c9-9bd5-23f2cd9cfd8e-2"> + <path + style="stroke:none" + d="" + id="id-0b619acc-2494-4ca6-83a3-a836876d0a09-5" /> + </symbol> + <symbol + overflow="visible" + id="id-63aaa364-69ff-4be2-bbf2-1ebe3d6600a5-8"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-44fdab85-d842-4b2b-82ce-7b2e608c47bb-6" /> + </symbol> + </g> + <g + id="id-00d32c9f-a51c-4240-83bf-259b482dcea1-9"> + <symbol + overflow="visible" + id="id-5f0025dc-030d-4084-af3b-a9a4663a193c-08"> + <path + style="stroke:none" + d="" + id="id-df8af8b7-5886-40e5-899f-47e7cf5b8b17-1" /> + </symbol> + <symbol + overflow="visible" + id="id-cd00f367-5da5-4de6-be52-c7c1883ab922-3"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-221539ed-1bec-4221-89be-2d4dc66dae8b-1" /> + </symbol> + <symbol + overflow="visible" + id="id-d0300774-e73b-47c9-9bd5-23f2cd9cfd8e-1"> + <path + style="stroke:none" + d="" + id="id-0b619acc-2494-4ca6-83a3-a836876d0a09-0" /> + </symbol> + <symbol + overflow="visible" + id="id-63aaa364-69ff-4be2-bbf2-1ebe3d6600a5-3"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-44fdab85-d842-4b2b-82ce-7b2e608c47bb-4" /> + </symbol> + </g> + <g + id="id-00d32c9f-a51c-4240-83bf-259b482dcea1-56"> + <symbol + overflow="visible" + id="id-5f0025dc-030d-4084-af3b-a9a4663a193c-6"> + <path + style="stroke:none" + d="" + id="id-df8af8b7-5886-40e5-899f-47e7cf5b8b17-4" /> + </symbol> + <symbol + overflow="visible" + id="id-cd00f367-5da5-4de6-be52-c7c1883ab922-0"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-221539ed-1bec-4221-89be-2d4dc66dae8b-0" /> + </symbol> + <symbol + overflow="visible" + id="id-d0300774-e73b-47c9-9bd5-23f2cd9cfd8e-4"> + <path + style="stroke:none" + d="" + id="id-0b619acc-2494-4ca6-83a3-a836876d0a09-6" /> + </symbol> + <symbol + overflow="visible" + id="id-63aaa364-69ff-4be2-bbf2-1ebe3d6600a5-2"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-44fdab85-d842-4b2b-82ce-7b2e608c47bb-67" /> + </symbol> + </g> + <g + id="id-00d32c9f-a51c-4240-83bf-259b482dcea1-1"> + <symbol + overflow="visible" + id="id-5f0025dc-030d-4084-af3b-a9a4663a193c-3"> + <path + style="stroke:none" + d="" + id="id-df8af8b7-5886-40e5-899f-47e7cf5b8b17-2" /> + </symbol> + <symbol + overflow="visible" + id="id-cd00f367-5da5-4de6-be52-c7c1883ab922-1"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-221539ed-1bec-4221-89be-2d4dc66dae8b-5" /> + </symbol> + <symbol + overflow="visible" + id="id-d0300774-e73b-47c9-9bd5-23f2cd9cfd8e-9"> + <path + style="stroke:none" + d="" + id="id-0b619acc-2494-4ca6-83a3-a836876d0a09-9" /> + </symbol> + <symbol + overflow="visible" + id="id-63aaa364-69ff-4be2-bbf2-1ebe3d6600a5-1"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-44fdab85-d842-4b2b-82ce-7b2e608c47bb-49" /> + </symbol> + </g> + <g + id="id-0115ca04-b39c-463f-9cf9-fd2fd6f9b127-6"> + <symbol + overflow="visible" + id="id-0c972c03-37a2-436e-8270-b4aa6461fe05-4"> + <path + style="stroke:none" + d="" + id="id-fdfef96b-fba2-4462-b615-e0adca0a752d-1" /> + </symbol> + <symbol + overflow="visible" + id="id-6026ade1-0296-437a-ac81-b26b622433cb-2"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-f7194c14-c8c8-4ffe-9460-61fff463076e-8" /> + </symbol> + <symbol + overflow="visible" + id="id-890cce33-1832-483e-a14d-079e18e9ae16-8"> + <path + style="stroke:none" + d="" + id="id-c8589a12-ddac-4b0d-8e13-9e8c384fc668-9" /> + </symbol> + <symbol + overflow="visible" + id="id-10602ec8-ec5f-4e01-b9b7-5077fe576a8c-2"> + <path + style="stroke:none" + d="m 3.21875,-1.578125 h 2.140625 c 0.09375,0 0.25,0 0.25,-0.15625 0,-0.1875 -0.15625,-0.1875 -0.25,-0.1875 H 3.21875 V -4.0625 c 0,-0.078125 0,-0.25 -0.15625,-0.25 -0.171875,0 -0.171875,0.15625 -0.171875,0.25 v 2.140625 H 0.75 c -0.09375,0 -0.265625,0 -0.265625,0.171875 0,0.171875 0.15625,0.171875 0.265625,0.171875 H 2.890625 V 0.5625 c 0,0.09375 0,0.265625 0.15625,0.265625 0.171875,0 0.171875,-0.171875 0.171875,-0.265625 z m 0,0" + id="id-e8405255-02f0-417e-aa2c-1f5db957b561-8" /> + </symbol> + <symbol + overflow="visible" + id="id-00658129-436c-4425-a135-c0956ea2bee3-8"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-f5988f76-d32a-41e4-a747-1160b2456a9f-8" /> + </symbol> + </g> + <g + id="id-66fc4b46-357a-4bba-86b5-2a6dc9c0acd5-0"> + <symbol + overflow="visible" + id="id-11f37e72-5b39-43c6-b256-3fbed0667b86-6"> + <path + style="stroke:none" + d="" + id="id-6e090680-8483-4469-b561-440fa1178c58-8" /> + </symbol> + <symbol + overflow="visible" + id="id-b63a8b2a-d177-45ad-8fc2-8db0616d732c-7"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-e857427e-4838-4ad0-adf4-aa414a33a3a5-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4ad0db2d-d572-4052-b22e-513ba42f8a87-0"> + <path + style="stroke:none" + d="" + id="id-b4220d2d-9a0c-48fa-a360-cbfb6c83d33a-3" /> + </symbol> + <symbol + overflow="visible" + id="id-5cb0af93-e968-4bfe-b221-dc0b41035bdb-3"> + <path + style="stroke:none" + d="m 5.1875,-1.578125 c 0.109375,0 0.28125,0 0.28125,-0.15625 0,-0.1875 -0.171875,-0.1875 -0.28125,-0.1875 H 1.03125 c -0.109375,0 -0.28125,0 -0.28125,0.171875 0,0.171875 0.15625,0.171875 0.28125,0.171875 z m 0,0" + id="id-ee422276-1872-42c3-8843-ce6473b16a23-3" /> + </symbol> + <symbol + overflow="visible" + id="id-8609332e-a450-44bd-81e1-89c481c3e3cd-7"> + <path + style="stroke:none" + d="" + id="id-77b9326b-f4d9-4fb5-bfaf-a327d29c4dc4-3" /> + </symbol> + <symbol + overflow="visible" + id="id-8abe9bda-d09a-43dc-81d4-50ccb4a3c802-2"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-9b0c666b-1479-4414-b258-68ad55055d1f-6" /> + </symbol> + </g> + <g + id="id-b15114a7-ca09-4a21-ad11-725124638424-4"> + <symbol + overflow="visible" + id="id-310b4048-7c0e-46eb-bfd0-a76166008027-9"> + <path + style="stroke:none" + d="" + id="id-d6720d2c-5774-4364-8d54-58341c455226-9" /> + </symbol> + <symbol + overflow="visible" + id="id-380331dc-88ab-482c-b934-cf4ac9c4ff54-4"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-3a19059e-f020-4a72-9f12-a604927b3cd3-5" /> + </symbol> + <symbol + overflow="visible" + id="id-d8429f02-44d9-4eea-baa5-885d8a467e29-9"> + <path + style="stroke:none" + d="" + id="id-2ca3837e-ef16-4602-a5db-d5f0c7eef876-3" /> + </symbol> + <symbol + overflow="visible" + id="id-e6901dc5-9917-4fb0-a181-aa79499a7893-5"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-3d07bff7-8536-4d05-9265-e222d0ded5de-7" /> + </symbol> + <symbol + overflow="visible" + id="id-d654728c-9737-434e-9366-43d67bc9135b-0"> + <path + style="stroke:none" + d="" + id="id-2cb602a0-1505-4afe-9908-6b3a2a7e619e-8" /> + </symbol> + <symbol + overflow="visible" + id="id-364e5767-a7b9-4262-a86d-4fa669215069-1"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-92389ee1-b7ce-499d-b00c-189d8877af98-9" /> + </symbol> + </g> + <g + id="id-d345eb5e-8757-4027-92e5-c112761c4a2b-9"> + <symbol + overflow="visible" + id="id-98061386-4070-43b1-bb54-ce248969080b-6"> + <path + style="stroke:none" + d="" + id="id-6a1aaf0c-6751-432f-a1bb-2b86d3e57ece-2" /> + </symbol> + <symbol + overflow="visible" + id="id-5aec679f-f26d-4dac-9b2b-c5eb976649ef-1"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-0e8bb187-3a09-4efb-8c7d-fcd92a6bc4c4-2" /> + </symbol> + <symbol + overflow="visible" + id="id-6ad444e2-ab68-4f93-a659-c3ec3fd9f5e5-0"> + <path + style="stroke:none" + d="" + id="id-59257d8c-7518-424c-9956-2599a744d54f-7" /> + </symbol> + <symbol + overflow="visible" + id="id-2c9a81aa-b0f3-4431-beb0-a4ffd91d56e6-3"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-c7b40002-e2b1-4bbb-a35a-7ab944f141f0-1" /> + </symbol> + </g> + <g + id="id-d345eb5e-8757-4027-92e5-c112761c4a2b-6"> + <symbol + overflow="visible" + id="id-98061386-4070-43b1-bb54-ce248969080b-4"> + <path + style="stroke:none" + d="" + id="id-6a1aaf0c-6751-432f-a1bb-2b86d3e57ece-7" /> + </symbol> + <symbol + overflow="visible" + id="id-5aec679f-f26d-4dac-9b2b-c5eb976649ef-4"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-0e8bb187-3a09-4efb-8c7d-fcd92a6bc4c4-8" /> + </symbol> + <symbol + overflow="visible" + id="id-6ad444e2-ab68-4f93-a659-c3ec3fd9f5e5-5"> + <path + style="stroke:none" + d="" + id="id-59257d8c-7518-424c-9956-2599a744d54f-8" /> + </symbol> + <symbol + overflow="visible" + id="id-2c9a81aa-b0f3-4431-beb0-a4ffd91d56e6-2"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-c7b40002-e2b1-4bbb-a35a-7ab944f141f0-6" /> + </symbol> + </g> + <g + id="id-7227ef66-160c-47d9-9ed5-bb54cf4cb84b-0"> + <symbol + overflow="visible" + id="id-ccac894d-8727-4ec8-8443-76d2c4ce72a3-7"> + <path + style="stroke:none" + d="" + id="id-efd127b0-0efc-4f25-b0f2-ed11b5dfb055-0" /> + </symbol> + <symbol + overflow="visible" + id="id-bdcc8c15-5bd2-4153-8529-5eddbe564815-1"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-470255b0-8cc2-489e-8f7a-f06db9a10204-0" /> + </symbol> + </g> + <g + id="id-dfb94cfe-0183-4b46-bfcc-875bc9dcc70a-4"> + <symbol + overflow="visible" + id="id-67fd2ddd-acfa-491d-8bde-cdfe8bb21885-5"> + <path + style="stroke:none" + d="" + id="id-600760ae-abe2-4327-8148-bc2360c5d35d-2" /> + </symbol> + <symbol + overflow="visible" + id="id-6f0cf77d-91a6-4e41-9672-165b52b8acbc-0"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-f040a633-937d-48f4-b241-2909c9d6ee84-2" /> + </symbol> + <symbol + overflow="visible" + id="id-237c8d20-18f0-457c-a8b9-3679670e6bfa-9"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-c7e20ea3-211f-4659-af35-c107230c5ed6-0" /> + </symbol> + <symbol + overflow="visible" + id="id-d76fceb1-e72b-4604-86a0-a41c8fe991a1-9"> + <path + style="stroke:none" + d="" + id="id-b106c50c-98cd-4519-92db-fdeac80dc159-9" /> + </symbol> + <symbol + overflow="visible" + id="id-bb7460ed-ccfd-4835-a060-9f4fbbe578a0-4"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-46a3c354-e7a9-4ee1-adc4-f1233462abce-5" /> + </symbol> + <symbol + overflow="visible" + id="id-753cb3e7-dbb8-42f3-ba09-8b61c5b3bc9f-1"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-11b9ce1a-d134-429a-b4b9-dfe60f7a08a6-0" /> + </symbol> + <symbol + overflow="visible" + id="id-9a19dd3f-0821-4da6-ad4c-004ca902e644-3"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-72af876b-7b70-4cc9-9811-9ce4a11b3969-7" /> + </symbol> + <symbol + overflow="visible" + id="id-eb6c42db-2195-47ad-a55c-79ae8ccae6d9-8"> + <path + style="stroke:none" + d="" + id="id-d7845396-f65f-4e66-a7d3-7c61386f8fdb-8" /> + </symbol> + <symbol + overflow="visible" + id="id-521c4670-cd4f-4602-8312-048113ae9a83-6"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-769e2827-1ec3-4b88-8dd0-a0cb30349c30-0" /> + </symbol> + <symbol + overflow="visible" + id="id-bc9fc4fe-ea83-4ce3-b496-41495f1d7422-4"> + <path + style="stroke:none" + d="" + id="id-144b152d-d212-4435-b7bb-25c3b44d6054-6" /> + </symbol> + <symbol + overflow="visible" + id="id-429fe4d7-7592-4bdf-9a68-142fff2a3056-7"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-71cbf7ea-1e95-4fa5-86ed-5e3b5ef78b7a-6" /> + </symbol> + </g> + <g + id="id-dfb94cfe-0183-4b46-bfcc-875bc9dcc70a-8"> + <symbol + overflow="visible" + id="id-67fd2ddd-acfa-491d-8bde-cdfe8bb21885-8"> + <path + style="stroke:none" + d="" + id="id-600760ae-abe2-4327-8148-bc2360c5d35d-5" /> + </symbol> + <symbol + overflow="visible" + id="id-6f0cf77d-91a6-4e41-9672-165b52b8acbc-8"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-f040a633-937d-48f4-b241-2909c9d6ee84-4" /> + </symbol> + <symbol + overflow="visible" + id="id-237c8d20-18f0-457c-a8b9-3679670e6bfa-3"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-c7e20ea3-211f-4659-af35-c107230c5ed6-7" /> + </symbol> + <symbol + overflow="visible" + id="id-d76fceb1-e72b-4604-86a0-a41c8fe991a1-1"> + <path + style="stroke:none" + d="" + id="id-b106c50c-98cd-4519-92db-fdeac80dc159-3" /> + </symbol> + <symbol + overflow="visible" + id="id-bb7460ed-ccfd-4835-a060-9f4fbbe578a0-8"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-46a3c354-e7a9-4ee1-adc4-f1233462abce-0" /> + </symbol> + <symbol + overflow="visible" + id="id-753cb3e7-dbb8-42f3-ba09-8b61c5b3bc9f-9"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-11b9ce1a-d134-429a-b4b9-dfe60f7a08a6-7" /> + </symbol> + <symbol + overflow="visible" + id="id-9a19dd3f-0821-4da6-ad4c-004ca902e644-9"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-72af876b-7b70-4cc9-9811-9ce4a11b3969-9" /> + </symbol> + <symbol + overflow="visible" + id="id-eb6c42db-2195-47ad-a55c-79ae8ccae6d9-3"> + <path + style="stroke:none" + d="" + id="id-d7845396-f65f-4e66-a7d3-7c61386f8fdb-2" /> + </symbol> + <symbol + overflow="visible" + id="id-521c4670-cd4f-4602-8312-048113ae9a83-4"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-769e2827-1ec3-4b88-8dd0-a0cb30349c30-3" /> + </symbol> + <symbol + overflow="visible" + id="id-bc9fc4fe-ea83-4ce3-b496-41495f1d7422-7"> + <path + style="stroke:none" + d="" + id="id-144b152d-d212-4435-b7bb-25c3b44d6054-1" /> + </symbol> + <symbol + overflow="visible" + id="id-429fe4d7-7592-4bdf-9a68-142fff2a3056-2"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-71cbf7ea-1e95-4fa5-86ed-5e3b5ef78b7a-2" /> + </symbol> + </g> + <g + id="id-dfb94cfe-0183-4b46-bfcc-875bc9dcc70a-48"> + <symbol + overflow="visible" + id="id-67fd2ddd-acfa-491d-8bde-cdfe8bb21885-0"> + <path + style="stroke:none" + d="" + id="id-600760ae-abe2-4327-8148-bc2360c5d35d-8" /> + </symbol> + <symbol + overflow="visible" + id="id-6f0cf77d-91a6-4e41-9672-165b52b8acbc-1"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-f040a633-937d-48f4-b241-2909c9d6ee84-0" /> + </symbol> + <symbol + overflow="visible" + id="id-237c8d20-18f0-457c-a8b9-3679670e6bfa-2"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-c7e20ea3-211f-4659-af35-c107230c5ed6-2" /> + </symbol> + <symbol + overflow="visible" + id="id-d76fceb1-e72b-4604-86a0-a41c8fe991a1-97"> + <path + style="stroke:none" + d="" + id="id-b106c50c-98cd-4519-92db-fdeac80dc159-5" /> + </symbol> + <symbol + overflow="visible" + id="id-bb7460ed-ccfd-4835-a060-9f4fbbe578a0-6"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-46a3c354-e7a9-4ee1-adc4-f1233462abce-4" /> + </symbol> + <symbol + overflow="visible" + id="id-753cb3e7-dbb8-42f3-ba09-8b61c5b3bc9f-6"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-11b9ce1a-d134-429a-b4b9-dfe60f7a08a6-3" /> + </symbol> + <symbol + overflow="visible" + id="id-9a19dd3f-0821-4da6-ad4c-004ca902e644-7"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-72af876b-7b70-4cc9-9811-9ce4a11b3969-97" /> + </symbol> + <symbol + overflow="visible" + id="id-eb6c42db-2195-47ad-a55c-79ae8ccae6d9-4"> + <path + style="stroke:none" + d="" + id="id-d7845396-f65f-4e66-a7d3-7c61386f8fdb-9" /> + </symbol> + <symbol + overflow="visible" + id="id-521c4670-cd4f-4602-8312-048113ae9a83-1"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-769e2827-1ec3-4b88-8dd0-a0cb30349c30-7" /> + </symbol> + <symbol + overflow="visible" + id="id-bc9fc4fe-ea83-4ce3-b496-41495f1d7422-0"> + <path + style="stroke:none" + d="" + id="id-144b152d-d212-4435-b7bb-25c3b44d6054-60" /> + </symbol> + <symbol + overflow="visible" + id="id-429fe4d7-7592-4bdf-9a68-142fff2a3056-8"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-71cbf7ea-1e95-4fa5-86ed-5e3b5ef78b7a-5" /> + </symbol> + </g> + <g + id="id-dfb94cfe-0183-4b46-bfcc-875bc9dcc70a-3"> + <symbol + overflow="visible" + id="id-67fd2ddd-acfa-491d-8bde-cdfe8bb21885-4"> + <path + style="stroke:none" + d="" + id="id-600760ae-abe2-4327-8148-bc2360c5d35d-4" /> + </symbol> + <symbol + overflow="visible" + id="id-6f0cf77d-91a6-4e41-9672-165b52b8acbc-3"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-f040a633-937d-48f4-b241-2909c9d6ee84-9" /> + </symbol> + <symbol + overflow="visible" + id="id-237c8d20-18f0-457c-a8b9-3679670e6bfa-7"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-c7e20ea3-211f-4659-af35-c107230c5ed6-25" /> + </symbol> + <symbol + overflow="visible" + id="id-d76fceb1-e72b-4604-86a0-a41c8fe991a1-8"> + <path + style="stroke:none" + d="" + id="id-b106c50c-98cd-4519-92db-fdeac80dc159-90" /> + </symbol> + <symbol + overflow="visible" + id="id-bb7460ed-ccfd-4835-a060-9f4fbbe578a0-2"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-46a3c354-e7a9-4ee1-adc4-f1233462abce-47" /> + </symbol> + <symbol + overflow="visible" + id="id-753cb3e7-dbb8-42f3-ba09-8b61c5b3bc9f-65"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-11b9ce1a-d134-429a-b4b9-dfe60f7a08a6-71" /> + </symbol> + <symbol + overflow="visible" + id="id-9a19dd3f-0821-4da6-ad4c-004ca902e644-33"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-72af876b-7b70-4cc9-9811-9ce4a11b3969-3" /> + </symbol> + <symbol + overflow="visible" + id="id-eb6c42db-2195-47ad-a55c-79ae8ccae6d9-85"> + <path + style="stroke:none" + d="" + id="id-d7845396-f65f-4e66-a7d3-7c61386f8fdb-1" /> + </symbol> + <symbol + overflow="visible" + id="id-521c4670-cd4f-4602-8312-048113ae9a83-0"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-769e2827-1ec3-4b88-8dd0-a0cb30349c30-8" /> + </symbol> + <symbol + overflow="visible" + id="id-bc9fc4fe-ea83-4ce3-b496-41495f1d7422-76"> + <path + style="stroke:none" + d="" + id="id-144b152d-d212-4435-b7bb-25c3b44d6054-3" /> + </symbol> + <symbol + overflow="visible" + id="id-429fe4d7-7592-4bdf-9a68-142fff2a3056-5"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-71cbf7ea-1e95-4fa5-86ed-5e3b5ef78b7a-0" /> + </symbol> + </g> + <g + id="id-d345eb5e-8757-4027-92e5-c112761c4a2b-0"> + <symbol + overflow="visible" + id="id-98061386-4070-43b1-bb54-ce248969080b-8"> + <path + style="stroke:none" + d="" + id="id-6a1aaf0c-6751-432f-a1bb-2b86d3e57ece-1" /> + </symbol> + <symbol + overflow="visible" + id="id-5aec679f-f26d-4dac-9b2b-c5eb976649ef-2"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-0e8bb187-3a09-4efb-8c7d-fcd92a6bc4c4-26" /> + </symbol> + <symbol + overflow="visible" + id="id-6ad444e2-ab68-4f93-a659-c3ec3fd9f5e5-9"> + <path + style="stroke:none" + d="" + id="id-59257d8c-7518-424c-9956-2599a744d54f-1" /> + </symbol> + <symbol + overflow="visible" + id="id-2c9a81aa-b0f3-4431-beb0-a4ffd91d56e6-0"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-c7b40002-e2b1-4bbb-a35a-7ab944f141f0-4" /> + </symbol> + </g> + <g + id="id-d345eb5e-8757-4027-92e5-c112761c4a2b-00"> + <symbol + overflow="visible" + id="id-98061386-4070-43b1-bb54-ce248969080b-3"> + <path + style="stroke:none" + d="" + id="id-6a1aaf0c-6751-432f-a1bb-2b86d3e57ece-4" /> + </symbol> + <symbol + overflow="visible" + id="id-5aec679f-f26d-4dac-9b2b-c5eb976649ef-9"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-0e8bb187-3a09-4efb-8c7d-fcd92a6bc4c4-27" /> + </symbol> + <symbol + overflow="visible" + id="id-6ad444e2-ab68-4f93-a659-c3ec3fd9f5e5-4"> + <path + style="stroke:none" + d="" + id="id-59257d8c-7518-424c-9956-2599a744d54f-2" /> + </symbol> + <symbol + overflow="visible" + id="id-2c9a81aa-b0f3-4431-beb0-a4ffd91d56e6-5"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-c7b40002-e2b1-4bbb-a35a-7ab944f141f0-2" /> + </symbol> + </g> + <g + id="id-2676788f-a519-45c9-bc41-355afc2ee934-3"> + <symbol + overflow="visible" + id="id-dab2e038-2f88-4789-bc06-d3d076818e34-1"> + <path + style="stroke:none" + d="" + id="id-4733e5cc-aa03-4115-aefa-3f2626aeeb9a-8" /> + </symbol> + <symbol + overflow="visible" + id="id-574258f4-9496-42e1-9f3b-8e2df10d6a7c-3"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-3e4b3a09-25bf-466f-9d35-6d2e2e536f26-4" /> + </symbol> + <symbol + overflow="visible" + id="id-68894452-0aa5-402d-923e-f3bf8d4f90f1-2"> + <path + style="stroke:none" + d="" + id="id-244c817d-e5ff-44e9-8b36-449e1d917a7c-2" /> + </symbol> + <symbol + overflow="visible" + id="id-cd29ea50-31a9-4437-b04b-6bfbef80b38f-4"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-14a5be18-9d21-4b48-8afb-01d7b3aee316-5" /> + </symbol> + <symbol + overflow="visible" + id="id-e5ddc1b3-c9dd-43db-aaf9-6516e5db3d53-1"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-2ebc8d88-2128-4645-bb70-a9bbc970afb2-7" /> + </symbol> + <symbol + overflow="visible" + id="id-c2f311f5-7c80-4b6d-8419-0aa1a1d5933e-5"> + <path + style="stroke:none" + d="" + id="id-26d062d7-c4c1-44b0-a5a9-503691901684-7" /> + </symbol> + <symbol + overflow="visible" + id="id-d0b2593c-34a7-4e2f-866e-f9f3c3efe6c6-1"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-f5025c65-9264-4346-811e-eed2cb552001-6" /> + </symbol> + </g> + <g + id="id-2676788f-a519-45c9-bc41-355afc2ee934-8"> + <symbol + overflow="visible" + id="id-dab2e038-2f88-4789-bc06-d3d076818e34-5"> + <path + style="stroke:none" + d="" + id="id-4733e5cc-aa03-4115-aefa-3f2626aeeb9a-2" /> + </symbol> + <symbol + overflow="visible" + id="id-574258f4-9496-42e1-9f3b-8e2df10d6a7c-1"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-3e4b3a09-25bf-466f-9d35-6d2e2e536f26-9" /> + </symbol> + <symbol + overflow="visible" + id="id-68894452-0aa5-402d-923e-f3bf8d4f90f1-9"> + <path + style="stroke:none" + d="" + id="id-244c817d-e5ff-44e9-8b36-449e1d917a7c-6" /> + </symbol> + <symbol + overflow="visible" + id="id-cd29ea50-31a9-4437-b04b-6bfbef80b38f-0"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-14a5be18-9d21-4b48-8afb-01d7b3aee316-6" /> + </symbol> + <symbol + overflow="visible" + id="id-e5ddc1b3-c9dd-43db-aaf9-6516e5db3d53-4"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-2ebc8d88-2128-4645-bb70-a9bbc970afb2-9" /> + </symbol> + <symbol + overflow="visible" + id="id-c2f311f5-7c80-4b6d-8419-0aa1a1d5933e-9"> + <path + style="stroke:none" + d="" + id="id-26d062d7-c4c1-44b0-a5a9-503691901684-0" /> + </symbol> + <symbol + overflow="visible" + id="id-d0b2593c-34a7-4e2f-866e-f9f3c3efe6c6-8"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-f5025c65-9264-4346-811e-eed2cb552001-9" /> + </symbol> + </g> + <g + id="id-2676788f-a519-45c9-bc41-355afc2ee934-0"> + <symbol + overflow="visible" + id="id-dab2e038-2f88-4789-bc06-d3d076818e34-13"> + <path + style="stroke:none" + d="" + id="id-4733e5cc-aa03-4115-aefa-3f2626aeeb9a-7" /> + </symbol> + <symbol + overflow="visible" + id="id-574258f4-9496-42e1-9f3b-8e2df10d6a7c-4"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-3e4b3a09-25bf-466f-9d35-6d2e2e536f26-1" /> + </symbol> + <symbol + overflow="visible" + id="id-68894452-0aa5-402d-923e-f3bf8d4f90f1-1"> + <path + style="stroke:none" + d="" + id="id-244c817d-e5ff-44e9-8b36-449e1d917a7c-3" /> + </symbol> + <symbol + overflow="visible" + id="id-cd29ea50-31a9-4437-b04b-6bfbef80b38f-03"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-14a5be18-9d21-4b48-8afb-01d7b3aee316-2" /> + </symbol> + <symbol + overflow="visible" + id="id-e5ddc1b3-c9dd-43db-aaf9-6516e5db3d53-17"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-2ebc8d88-2128-4645-bb70-a9bbc970afb2-5" /> + </symbol> + <symbol + overflow="visible" + id="id-c2f311f5-7c80-4b6d-8419-0aa1a1d5933e-6"> + <path + style="stroke:none" + d="" + id="id-26d062d7-c4c1-44b0-a5a9-503691901684-5" /> + </symbol> + <symbol + overflow="visible" + id="id-d0b2593c-34a7-4e2f-866e-f9f3c3efe6c6-4"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-f5025c65-9264-4346-811e-eed2cb552001-2" /> + </symbol> + </g> + <g + id="id-2676788f-a519-45c9-bc41-355afc2ee934-02"> + <symbol + overflow="visible" + id="id-dab2e038-2f88-4789-bc06-d3d076818e34-15"> + <path + style="stroke:none" + d="" + id="id-4733e5cc-aa03-4115-aefa-3f2626aeeb9a-6" /> + </symbol> + <symbol + overflow="visible" + id="id-574258f4-9496-42e1-9f3b-8e2df10d6a7c-5"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-3e4b3a09-25bf-466f-9d35-6d2e2e536f26-0" /> + </symbol> + <symbol + overflow="visible" + id="id-68894452-0aa5-402d-923e-f3bf8d4f90f1-0"> + <path + style="stroke:none" + d="" + id="id-244c817d-e5ff-44e9-8b36-449e1d917a7c-34" /> + </symbol> + <symbol + overflow="visible" + id="id-cd29ea50-31a9-4437-b04b-6bfbef80b38f-6"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-14a5be18-9d21-4b48-8afb-01d7b3aee316-60" /> + </symbol> + <symbol + overflow="visible" + id="id-e5ddc1b3-c9dd-43db-aaf9-6516e5db3d53-2"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-2ebc8d88-2128-4645-bb70-a9bbc970afb2-58" /> + </symbol> + <symbol + overflow="visible" + id="id-c2f311f5-7c80-4b6d-8419-0aa1a1d5933e-95"> + <path + style="stroke:none" + d="" + id="id-26d062d7-c4c1-44b0-a5a9-503691901684-06" /> + </symbol> + <symbol + overflow="visible" + id="id-d0b2593c-34a7-4e2f-866e-f9f3c3efe6c6-0"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-f5025c65-9264-4346-811e-eed2cb552001-8" /> + </symbol> + </g> + <g + id="id-2676788f-a519-45c9-bc41-355afc2ee934-89"> + <symbol + overflow="visible" + id="id-dab2e038-2f88-4789-bc06-d3d076818e34-8"> + <path + style="stroke:none" + d="" + id="id-4733e5cc-aa03-4115-aefa-3f2626aeeb9a-80" /> + </symbol> + <symbol + overflow="visible" + id="id-574258f4-9496-42e1-9f3b-8e2df10d6a7c-37"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-3e4b3a09-25bf-466f-9d35-6d2e2e536f26-06" /> + </symbol> + <symbol + overflow="visible" + id="id-68894452-0aa5-402d-923e-f3bf8d4f90f1-92"> + <path + style="stroke:none" + d="" + id="id-244c817d-e5ff-44e9-8b36-449e1d917a7c-1" /> + </symbol> + <symbol + overflow="visible" + id="id-cd29ea50-31a9-4437-b04b-6bfbef80b38f-7"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-14a5be18-9d21-4b48-8afb-01d7b3aee316-7" /> + </symbol> + <symbol + overflow="visible" + id="id-e5ddc1b3-c9dd-43db-aaf9-6516e5db3d53-9"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-2ebc8d88-2128-4645-bb70-a9bbc970afb2-76" /> + </symbol> + <symbol + overflow="visible" + id="id-c2f311f5-7c80-4b6d-8419-0aa1a1d5933e-2"> + <path + style="stroke:none" + d="" + id="id-26d062d7-c4c1-44b0-a5a9-503691901684-71" /> + </symbol> + <symbol + overflow="visible" + id="id-d0b2593c-34a7-4e2f-866e-f9f3c3efe6c6-5"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-f5025c65-9264-4346-811e-eed2cb552001-88" /> + </symbol> + </g> + <g + id="id-2676788f-a519-45c9-bc41-355afc2ee934-4"> + <symbol + overflow="visible" + id="id-dab2e038-2f88-4789-bc06-d3d076818e34-19"> + <path + style="stroke:none" + d="" + id="id-4733e5cc-aa03-4115-aefa-3f2626aeeb9a-5" /> + </symbol> + <symbol + overflow="visible" + id="id-574258f4-9496-42e1-9f3b-8e2df10d6a7c-7"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-3e4b3a09-25bf-466f-9d35-6d2e2e536f26-41" /> + </symbol> + <symbol + overflow="visible" + id="id-68894452-0aa5-402d-923e-f3bf8d4f90f1-22"> + <path + style="stroke:none" + d="" + id="id-244c817d-e5ff-44e9-8b36-449e1d917a7c-16" /> + </symbol> + <symbol + overflow="visible" + id="id-cd29ea50-31a9-4437-b04b-6bfbef80b38f-2"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-14a5be18-9d21-4b48-8afb-01d7b3aee316-0" /> + </symbol> + <symbol + overflow="visible" + id="id-e5ddc1b3-c9dd-43db-aaf9-6516e5db3d53-22"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-2ebc8d88-2128-4645-bb70-a9bbc970afb2-97" /> + </symbol> + <symbol + overflow="visible" + id="id-c2f311f5-7c80-4b6d-8419-0aa1a1d5933e-4"> + <path + style="stroke:none" + d="" + id="id-26d062d7-c4c1-44b0-a5a9-503691901684-3" /> + </symbol> + <symbol + overflow="visible" + id="id-d0b2593c-34a7-4e2f-866e-f9f3c3efe6c6-56"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-f5025c65-9264-4346-811e-eed2cb552001-1" /> + </symbol> + </g> + <g + id="id-7227ef66-160c-47d9-9ed5-bb54cf4cb84b-1"> + <symbol + overflow="visible" + id="id-ccac894d-8727-4ec8-8443-76d2c4ce72a3-2"> + <path + style="stroke:none" + d="" + id="id-efd127b0-0efc-4f25-b0f2-ed11b5dfb055-06" /> + </symbol> + <symbol + overflow="visible" + id="id-bdcc8c15-5bd2-4153-8529-5eddbe564815-8"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-470255b0-8cc2-489e-8f7a-f06db9a10204-7" /> + </symbol> + </g> + <g + id="id-7227ef66-160c-47d9-9ed5-bb54cf4cb84b-9"> + <symbol + overflow="visible" + id="id-ccac894d-8727-4ec8-8443-76d2c4ce72a3-1"> + <path + style="stroke:none" + d="" + id="id-efd127b0-0efc-4f25-b0f2-ed11b5dfb055-2" /> + </symbol> + <symbol + overflow="visible" + id="id-bdcc8c15-5bd2-4153-8529-5eddbe564815-89"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-470255b0-8cc2-489e-8f7a-f06db9a10204-6" /> + </symbol> + </g> + <g + id="id-7227ef66-160c-47d9-9ed5-bb54cf4cb84b-6"> + <symbol + overflow="visible" + id="id-ccac894d-8727-4ec8-8443-76d2c4ce72a3-6"> + <path + style="stroke:none" + d="" + id="id-efd127b0-0efc-4f25-b0f2-ed11b5dfb055-3" /> + </symbol> + <symbol + overflow="visible" + id="id-bdcc8c15-5bd2-4153-8529-5eddbe564815-9"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-470255b0-8cc2-489e-8f7a-f06db9a10204-9" /> + </symbol> + </g> + <g + id="id-7227ef66-160c-47d9-9ed5-bb54cf4cb84b-91"> + <symbol + overflow="visible" + id="id-ccac894d-8727-4ec8-8443-76d2c4ce72a3-3"> + <path + style="stroke:none" + d="" + id="id-efd127b0-0efc-4f25-b0f2-ed11b5dfb055-4" /> + </symbol> + <symbol + overflow="visible" + id="id-bdcc8c15-5bd2-4153-8529-5eddbe564815-5"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-470255b0-8cc2-489e-8f7a-f06db9a10204-8" /> + </symbol> + </g> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.0815041" + inkscape:cx="442.69716" + inkscape:cy="368.96344" + inkscape:document-units="mm" + inkscape:current-layer="g24410" + inkscape:document-rotation="0" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="992" + inkscape:window-x="0" + inkscape:window-y="32" + inkscape:window-maximized="1" /> + <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"> + <g + id="g24410" + transform="translate(73.769425,-14.640859)"> + <g + id="g48570"> + <g + transform="matrix(0.515009,0,0,0.543714,123.78943,136.49896)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$z_1$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-0"> + <defs + id="id-a11443ae-5680-4fd2-998c-03aac8884898"> + <g + id="id-eb52ad1a-98d6-4508-8c52-d822e8214559"> + <symbol + overflow="visible" + id="id-90e0f0c5-a5dc-4c99-be01-17ce75139c28"> + <path + style="stroke:none" + d="" + id="id-0aab7f5a-cce1-4a3b-a8f8-a6fa9bdb2442" /> + </symbol> + <symbol + overflow="visible" + id="id-350d3c26-9d68-4293-9402-db84f99a56a0"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-9989a360-a08e-439e-b73c-db08ffd06058" /> + </symbol> + <symbol + overflow="visible" + id="id-6218964a-9604-4244-bd4b-9454bf0bb4b0"> + <path + style="stroke:none" + d="" + id="id-d9651d3c-227d-4426-8b25-41f32650ce85" /> + </symbol> + <symbol + overflow="visible" + id="id-71be12ed-4366-49ab-b52d-f913ea29ee61"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-c69d8307-964b-4a94-852d-813bbd63d286" /> + </symbol> + </g> + </defs> + <g + id="id-670fa564-d04f-49e4-89d3-f292cee9d0dd" + transform="translate(-149.134,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-629bac1d-d732-45ea-9e2f-8035df467324"> + <g + transform="translate(148.712,134.765)" + id="g26730"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-0bc4890f-d8a5-4415-b063-687e79c23127" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-42c9571a-ce67-496a-8929-1d871d953abf"> + <g + transform="translate(153.345,136.259)" + id="g26734"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-17fc3d6a-f9b2-4d2c-bb1f-80dcfcdbb3f8" /> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.317947;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker29315);marker-end:url(#marker29335)" + d="m 121.25657,115.45101 v 45.32912" + id="path28223" /> + </g> + <g + id="g48513" + transform="translate(-0.32345724)"> + <g + transform="matrix(0.515009,0,0,0.543714,123.96547,179.02169)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$z_2$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-0-5"> + <defs + id="id-a79d82ac-8aaf-416e-a36b-571e15cb9710"> + <g + id="id-022b9cfd-0373-492a-9e99-748252aaa67d"> + <symbol + overflow="visible" + id="id-387bff1c-c94c-49ed-8e60-e86ce176dbee"> + <path + style="stroke:none" + d="" + id="id-b0e6d18f-27b4-4447-8743-4d8edc538653" /> + </symbol> + <symbol + overflow="visible" + id="id-b7a7550f-7c6c-466b-bc14-15c8477d9fc6"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-12659a36-2fd8-474b-8bbf-c36049526c5b" /> + </symbol> + <symbol + overflow="visible" + id="id-20a34618-31be-42e1-994d-95b52dc1001c"> + <path + style="stroke:none" + d="" + id="id-aa3160c6-d31a-4183-aecc-68c90f87bc71" /> + </symbol> + <symbol + overflow="visible" + id="id-f07fb4a5-caca-4471-bfad-9331d7c6ffb6"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-59300b1b-d873-443e-9730-404955e857fc" /> + </symbol> + </g> + </defs> + <g + id="id-fc18a75c-6e05-429c-8c54-023b26326500" + transform="translate(-149.134,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-d45b489c-5200-4750-9613-9332429336f7"> + <g + transform="translate(148.712,134.765)" + id="g27756"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-add79b81-133b-42ad-aa75-a25f6b4a6c85" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-61dde61b-bcd9-43d2-94f3-2cf108756810"> + <g + transform="translate(153.345,136.259)" + id="g27760"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-c4384b96-920c-4538-bd3d-d508259ea6f0" /> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.277183;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker29025);marker-end:url(#marker29325)" + d="m 121.48763,166.4603 0.003,28.35274" + id="path28225" /> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,74.710416,117.13462)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\lfloor c_{n_1}/s \\rfloor$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-9"> + <defs + id="id-a762d58c-d888-4047-905e-f4ff0fe350f9"> + <g + id="id-dfb94cfe-0183-4b46-bfcc-875bc9dcc70a"> + <symbol + overflow="visible" + id="id-67fd2ddd-acfa-491d-8bde-cdfe8bb21885"> + <path + style="stroke:none" + d="" + id="id-600760ae-abe2-4327-8148-bc2360c5d35d" /> + </symbol> + <symbol + overflow="visible" + id="id-6f0cf77d-91a6-4e41-9672-165b52b8acbc"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-f040a633-937d-48f4-b241-2909c9d6ee84" /> + </symbol> + <symbol + overflow="visible" + id="id-237c8d20-18f0-457c-a8b9-3679670e6bfa"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-c7e20ea3-211f-4659-af35-c107230c5ed6" /> + </symbol> + <symbol + overflow="visible" + id="id-d76fceb1-e72b-4604-86a0-a41c8fe991a1"> + <path + style="stroke:none" + d="" + id="id-b106c50c-98cd-4519-92db-fdeac80dc159" /> + </symbol> + <symbol + overflow="visible" + id="id-bb7460ed-ccfd-4835-a060-9f4fbbe578a0"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-46a3c354-e7a9-4ee1-adc4-f1233462abce" /> + </symbol> + <symbol + overflow="visible" + id="id-753cb3e7-dbb8-42f3-ba09-8b61c5b3bc9f"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-11b9ce1a-d134-429a-b4b9-dfe60f7a08a6" /> + </symbol> + <symbol + overflow="visible" + id="id-9a19dd3f-0821-4da6-ad4c-004ca902e644"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-72af876b-7b70-4cc9-9811-9ce4a11b3969" /> + </symbol> + <symbol + overflow="visible" + id="id-eb6c42db-2195-47ad-a55c-79ae8ccae6d9"> + <path + style="stroke:none" + d="" + id="id-d7845396-f65f-4e66-a7d3-7c61386f8fdb" /> + </symbol> + <symbol + overflow="visible" + id="id-521c4670-cd4f-4602-8312-048113ae9a83"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-769e2827-1ec3-4b88-8dd0-a0cb30349c30" /> + </symbol> + <symbol + overflow="visible" + id="id-bc9fc4fe-ea83-4ce3-b496-41495f1d7422"> + <path + style="stroke:none" + d="" + id="id-144b152d-d212-4435-b7bb-25c3b44d6054" /> + </symbol> + <symbol + overflow="visible" + id="id-429fe4d7-7592-4bdf-9a68-142fff2a3056"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-71cbf7ea-1e95-4fa5-86ed-5e3b5ef78b7a" /> + </symbol> + </g> + </defs> + <g + id="id-fac3ac11-3b6b-47d2-aa09-dfdaf7b84821" + transform="translate(-150.446,-127.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-c8fbe875-ed9f-4520-9989-915fe1dc2dc0"> + <g + transform="translate(148.712,134.765)" + id="g36873"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-e635def1-731d-43e4-b578-f317b983756a" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-e1742512-5824-4ad3-864d-d762ae982907"> + <g + transform="translate(153.14,134.765)" + id="g36877"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-12cb1cb4-be82-4322-8c4e-6bd61a02c560" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cec7e560-13ea-45f0-92f4-afd98f1f2e8d"> + <g + transform="translate(157.452,136.259)" + id="g36881"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-b5c807df-eb24-4599-8881-9156da072a97" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ada8dc53-b15f-4cd7-a92e-46806021c459"> + <g + transform="translate(162.376,137.255)" + id="g36885"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-8db85573-ad59-482c-a758-e312aef35ecd" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-9a9736f0-ccee-4611-a995-59622a667482"> + <g + transform="translate(166.763,134.765)" + id="g36889"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-3230fc58-780e-460d-a1f8-50856bc59626" /> + </g> + <g + transform="translate(171.744,134.765)" + id="g36892"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-798c2f3a-5aa4-4779-aa42-affc0ec3426a" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-b28d4152-b18e-46c5-b2a0-f7e8bf48e4ca"> + <g + transform="translate(176.414,134.765)" + id="g36896"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-ef9db707-b15c-41d2-8631-cfabba8950fe" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,75.02685,136.7235)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\lfloor c_{n_2}/s \\rfloor$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-9-2"> + <defs + id="id-419da426-d9a4-470a-81d4-d7a01af45616"> + <g + id="id-9980da0e-4c52-447e-8161-a49d65ccd955"> + <symbol + overflow="visible" + id="id-512e6e0e-4524-4447-a198-a9e245135241"> + <path + style="stroke:none" + d="" + id="id-284788a1-20aa-48c5-95ce-d4a088d3517b" /> + </symbol> + <symbol + overflow="visible" + id="id-9b36a568-b984-4c4a-97aa-571769b40c27"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-d327212f-190c-4f99-8ae6-67614fb8b430" /> + </symbol> + <symbol + overflow="visible" + id="id-e8bf9936-6c31-41ec-ae8d-4a7911ae74c9"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-c1e2e659-ac7a-49d0-b49f-2ec7667c41ec" /> + </symbol> + <symbol + overflow="visible" + id="id-32c8c4c2-9728-46c1-a164-b41b79b4d580"> + <path + style="stroke:none" + d="" + id="id-47f8ede4-569c-4a02-a8cf-33412b472ecc" /> + </symbol> + <symbol + overflow="visible" + id="id-0b4d462c-b107-48f9-9331-7b08e0ce7d25"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-0df717c1-f4c7-40d5-9181-6941d7fcfd3e" /> + </symbol> + <symbol + overflow="visible" + id="id-b20bdc22-89f1-4776-a5c8-164391082d6a"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-086c5b58-e025-4620-a482-3c507b2d9ebc" /> + </symbol> + <symbol + overflow="visible" + id="id-c590d8fb-0760-4ab0-87f9-948d4901aeaa"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-07ef424a-271c-4262-8b3e-3a7c355367e8" /> + </symbol> + <symbol + overflow="visible" + id="id-33bce4af-1d28-463f-a3d4-c73008b5ae90"> + <path + style="stroke:none" + d="" + id="id-6a2bee1d-1d6d-490b-bf8f-c97da0bbfd16" /> + </symbol> + <symbol + overflow="visible" + id="id-c4d0ddd3-e178-4f8a-a56b-be13ac0e53a7"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-6945e5e7-3617-4327-b40f-8eeedfb37348" /> + </symbol> + <symbol + overflow="visible" + id="id-d811b445-aff2-4f8d-b1f9-fdeae96975a9"> + <path + style="stroke:none" + d="" + id="id-4dcc0ba4-9cdc-4b39-a82d-5067368c845b" /> + </symbol> + <symbol + overflow="visible" + id="id-0e745f17-5bbd-4b36-8f2d-da0385192276"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-ce375304-9523-46a3-b450-08ddbe8f0abc" /> + </symbol> + </g> + </defs> + <g + id="id-f17f8559-e751-4dd3-af2e-38fcd4b3bf8e" + transform="translate(-150.446,-127.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-17d5a0d4-ff10-47ef-9684-580bbe95d691"> + <g + transform="translate(148.712,134.765)" + id="g39705"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-b3a28021-a581-4089-846b-8b350a3c9b87" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-26ea252c-df6e-417a-bab4-1aff94a171c0"> + <g + transform="translate(153.14,134.765)" + id="g39709"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-bafe3dd7-10d2-43ea-ba51-c95c8400fe23" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-aba77c32-6685-44e2-b8ed-c4dd8be3d7a5"> + <g + transform="translate(157.452,136.259)" + id="g39713"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-c98451f7-02d4-4ce8-9168-b9a1f1bc9391" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-0b5046b0-1ceb-4535-9551-7ad272ae50dc"> + <g + transform="translate(162.376,137.255)" + id="g39717"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-9c6cb7d7-91c7-4a37-8644-9452c7f9c03f" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-eaf36961-766f-42b4-ada6-98119fe5b474"> + <g + transform="translate(166.763,134.765)" + id="g39721"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-e134700b-146e-4bc1-914a-1e2d402e1c83" /> + </g> + <g + transform="translate(171.744,134.765)" + id="g39724"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-105d30eb-f633-4989-ae77-d5cab1ab0d55" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-a89c61f4-c1cc-4831-8358-8ae2ee539a3e"> + <g + transform="translate(176.414,134.765)" + id="g39728"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-a551b963-356d-4792-8150-c0a8c53fedc0" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,74.980557,152.62379)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\lfloor c_{n_3}/s \\rfloor$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-9-0"> + <defs + id="id-3ec317fc-435d-48cb-b113-0555847bc509"> + <g + id="id-613d8853-e4c1-4e09-88ec-be7a0196c404"> + <symbol + overflow="visible" + id="id-f7ae26fb-9cc8-47b1-8958-4016011204e4"> + <path + style="stroke:none" + d="" + id="id-418b7f52-13a8-4845-a1ef-771bc0449562" /> + </symbol> + <symbol + overflow="visible" + id="id-7eddffd2-4f26-4aca-b523-b662da1f9fd5"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-110d6965-902e-45e3-b25b-3c6048f80d65" /> + </symbol> + <symbol + overflow="visible" + id="id-2a6ef4cb-1412-4cb3-986e-5e038155cf62"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-6103b49f-8e05-4abb-ba20-4f171f526a20" /> + </symbol> + <symbol + overflow="visible" + id="id-ee42a8b3-f4cd-48db-ba14-74365b4107d3"> + <path + style="stroke:none" + d="" + id="id-324d78f3-4347-4d1e-b534-1273ef0bbee2" /> + </symbol> + <symbol + overflow="visible" + id="id-3df90b16-0d2c-4f3e-ae85-5d42353a6032"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-f5eb1922-ff7e-4b26-8d9f-43918fec33cf" /> + </symbol> + <symbol + overflow="visible" + id="id-bd8f6c8b-27f1-445a-b416-88727e4843d6"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-3e1eec19-a099-4015-aede-00648bd3e7b9" /> + </symbol> + <symbol + overflow="visible" + id="id-1258b689-18c9-4eca-9837-346dde437ad2"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-8da861bf-fa48-4096-9022-b953f87d8578" /> + </symbol> + <symbol + overflow="visible" + id="id-1ae48de8-9ef9-4ebe-8049-1e40a5941fef"> + <path + style="stroke:none" + d="" + id="id-b843a2f1-bca6-48d9-b7a2-1cb3ec3bb690" /> + </symbol> + <symbol + overflow="visible" + id="id-75ac2a24-9450-4f24-bc02-29b54a15b420"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-27f4cb75-1adc-40a7-9355-a4e51f1223b9" /> + </symbol> + <symbol + overflow="visible" + id="id-909ba9d1-4430-4b4b-8463-67e23184804a"> + <path + style="stroke:none" + d="" + id="id-6f83ed55-6d35-483d-8cd0-93548768a6f1" /> + </symbol> + <symbol + overflow="visible" + id="id-7ed35eeb-6f19-4595-827b-bcd07c7a9631"> + <path + style="stroke:none" + d="m 1.640625,-1.65625 c 0.46875,0 0.765625,0.296875 0.765625,0.78125 0,0.515625 -0.3125,0.78125 -0.75,0.78125 -0.0625,0 -0.65625,0 -0.90625,-0.265625 0.203125,-0.03125 0.265625,-0.171875 0.265625,-0.296875 0,-0.1875 -0.140625,-0.3125 -0.3125,-0.3125 -0.15625,0 -0.296875,0.109375 -0.296875,0.328125 0,0.515625 0.578125,0.75 1.265625,0.75 0.8125,0 1.3125,-0.5 1.3125,-0.984375 0,-0.40625 -0.359375,-0.75 -0.921875,-0.875 0.59375,-0.203125 0.75,-0.578125 0.75,-0.859375 0,-0.40625 -0.5,-0.703125 -1.125,-0.703125 -0.625,0 -1.109375,0.25 -1.109375,0.703125 0,0.234375 0.1875,0.296875 0.28125,0.296875 0.140625,0 0.28125,-0.109375 0.28125,-0.296875 0,-0.109375 -0.0625,-0.25 -0.234375,-0.28125 C 1.109375,-3.109375 1.5625,-3.125 1.671875,-3.125 c 0.359375,0 0.609375,0.171875 0.609375,0.515625 0,0.296875 -0.1875,0.75 -0.703125,0.78125 -0.140625,0 -0.15625,0 -0.296875,0.015625 -0.046875,0 -0.109375,0 -0.109375,0.078125 0,0.078125 0.046875,0.078125 0.140625,0.078125 z m 0,0" + id="id-d3786235-9a6a-421b-8a43-7b10b15088dd" /> + </symbol> + </g> + </defs> + <g + id="id-a626d1d7-fad5-46fc-af3a-0d21335cb4f7" + transform="translate(-150.446,-127.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-400b475f-aa3f-4e65-a66a-4fa9dd357f06"> + <g + transform="translate(148.712,134.765)" + id="g41721"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-cdf05de8-e8ee-4d2b-a590-0997090ad25e" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-e4aae720-73a2-440f-aa4a-5715143683dd"> + <g + transform="translate(153.14,134.765)" + id="g41725"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-efc43bfe-9c09-4414-9d2e-ba3e552726f1" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ec0c063e-b3f4-4a47-9817-b8e44160ef79"> + <g + transform="translate(157.452,136.259)" + id="g41729"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-cb0b406b-603d-45a0-a0b3-2c3a0516a49e" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-447bdd04-e118-4af6-9c4b-f990ea031568"> + <g + transform="translate(162.376,137.255)" + id="g41733"> + <path + style="stroke:none" + d="m 1.640625,-1.65625 c 0.46875,0 0.765625,0.296875 0.765625,0.78125 0,0.515625 -0.3125,0.78125 -0.75,0.78125 -0.0625,0 -0.65625,0 -0.90625,-0.265625 0.203125,-0.03125 0.265625,-0.171875 0.265625,-0.296875 0,-0.1875 -0.140625,-0.3125 -0.3125,-0.3125 -0.15625,0 -0.296875,0.109375 -0.296875,0.328125 0,0.515625 0.578125,0.75 1.265625,0.75 0.8125,0 1.3125,-0.5 1.3125,-0.984375 0,-0.40625 -0.359375,-0.75 -0.921875,-0.875 0.59375,-0.203125 0.75,-0.578125 0.75,-0.859375 0,-0.40625 -0.5,-0.703125 -1.125,-0.703125 -0.625,0 -1.109375,0.25 -1.109375,0.703125 0,0.234375 0.1875,0.296875 0.28125,0.296875 0.140625,0 0.28125,-0.109375 0.28125,-0.296875 0,-0.109375 -0.0625,-0.25 -0.234375,-0.28125 C 1.109375,-3.109375 1.5625,-3.125 1.671875,-3.125 c 0.359375,0 0.609375,0.171875 0.609375,0.515625 0,0.296875 -0.1875,0.75 -0.703125,0.78125 -0.140625,0 -0.15625,0 -0.296875,0.015625 -0.046875,0 -0.109375,0 -0.109375,0.078125 0,0.078125 0.046875,0.078125 0.140625,0.078125 z m 0,0" + id="id-20d727ba-acd3-43f4-ab03-6ac71a297f7c" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7ab24957-bac4-44f1-816b-bad9220777dd"> + <g + transform="translate(166.763,134.765)" + id="g41737"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-4999e419-17e3-43c3-9237-63e0bbf02433" /> + </g> + <g + transform="translate(171.744,134.765)" + id="g41740"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-708fab32-7e32-47cc-8ce7-5d6653a1a5dd" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-48013b19-7722-4078-9998-a93fb1d95983"> + <g + transform="translate(176.414,134.765)" + id="g41744"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-9052fb27-1b7e-40b3-9560-e6ba76eef5c6" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,73.483552,165.44983)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\lfloor c_{n_4}/s \\rfloor$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-9-1"> + <defs + id="id-c6a7431f-2504-4e68-b1fe-814fb38749f0"> + <g + id="id-88fc4df7-59d0-4b9a-826c-cdc902a970cb"> + <symbol + overflow="visible" + id="id-a8037caa-bc44-45c0-9963-4c1c621ed8c1"> + <path + style="stroke:none" + d="" + id="id-3af6ff30-482b-4d59-9ae4-575801836754" /> + </symbol> + <symbol + overflow="visible" + id="id-953675c7-8551-42c5-b9a4-4d5fc482d182"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-42c06c81-cf85-489f-97bb-357c8473129e" /> + </symbol> + <symbol + overflow="visible" + id="id-12a0603d-6521-4868-91ae-d78bf71dcdd4"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-5a2b8ef6-3597-495d-a3a0-7aba8bdd9916" /> + </symbol> + <symbol + overflow="visible" + id="id-5cd7ab38-e410-4ae7-b822-b9f8bbe254a9"> + <path + style="stroke:none" + d="" + id="id-2868f1cd-d082-4e73-b2ba-d619514c3762" /> + </symbol> + <symbol + overflow="visible" + id="id-4d72d395-60c0-4d09-bb6d-94deb5ab3093"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-3647d2b8-d79b-46df-82c9-a0af454772c0" /> + </symbol> + <symbol + overflow="visible" + id="id-6dea54a7-7535-47a5-888c-4df25ea8a4c0"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-f925883b-c1ee-48c9-b5c4-6def6046c2e0" /> + </symbol> + <symbol + overflow="visible" + id="id-fc448325-ed42-44a8-8125-1886f3132ae6"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-763f879f-2dd1-4e94-97c1-c23b3ac2fbc9" /> + </symbol> + <symbol + overflow="visible" + id="id-f3adeeab-7b2a-4005-a18a-1e1e601120fe"> + <path + style="stroke:none" + d="" + id="id-8ce28139-725c-47fe-a93d-1d742dcbb8b1" /> + </symbol> + <symbol + overflow="visible" + id="id-30d07064-5532-4c63-8a73-8ff1b50d3791"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-fa07f258-1a56-401f-9fb3-65ddccbd27eb" /> + </symbol> + <symbol + overflow="visible" + id="id-aef1e66b-8bda-49b5-8f67-01b95545e067"> + <path + style="stroke:none" + d="" + id="id-2d1e4d56-f948-498d-9226-b5d5e391cf23" /> + </symbol> + <symbol + overflow="visible" + id="id-e6144527-694c-4536-89ba-d53f26729233"> + <path + style="stroke:none" + d="m 3.078125,-0.8125 v -0.21875 h -0.625 v -2.1875 c 0,-0.125 0,-0.15625 -0.140625,-0.15625 -0.09375,0 -0.09375,0 -0.15625,0.078125 L 0.3125,-1.03125 v 0.21875 h 1.65625 v 0.390625 c 0,0.15625 0,0.203125 -0.421875,0.203125 h -0.1875 V 0 c 0.234375,-0.015625 0.5625,-0.015625 0.859375,-0.015625 0.28125,0 0.609375,0 0.84375,0.015625 V -0.21875 H 2.890625 c -0.4375,0 -0.4375,-0.046875 -0.4375,-0.203125 V -0.8125 Z m -1.0625,-2.03125 v 1.8125 h -1.46875 z m 0,0" + id="id-b29b5202-bcef-4a69-9292-55b4868e42f6" /> + </symbol> + </g> + </defs> + <g + id="id-1cd7b675-f335-4716-8dce-fbec1e37f165" + transform="translate(-150.446,-127.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-7a716d6b-4d36-425a-8b6c-7a45db8f91e7"> + <g + transform="translate(148.712,134.765)" + id="g43737"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-af27afb4-b58f-4471-84ad-b45c6b1d84a1" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-3306423c-d20f-4cb6-8e7d-04fb190efdf6"> + <g + transform="translate(153.14,134.765)" + id="g43741"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-bc055cad-53c7-4622-9af6-095536435078" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-6e0570dd-d078-49ec-8c39-5ee55d22414a"> + <g + transform="translate(157.452,136.259)" + id="g43745"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-32a7f97f-5a14-4b18-9f6c-3908a16b6c20" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d9434e52-a981-4bbe-9c2f-bee530595478"> + <g + transform="translate(162.376,137.255)" + id="g43749"> + <path + style="stroke:none" + d="m 3.078125,-0.8125 v -0.21875 h -0.625 v -2.1875 c 0,-0.125 0,-0.15625 -0.140625,-0.15625 -0.09375,0 -0.09375,0 -0.15625,0.078125 L 0.3125,-1.03125 v 0.21875 h 1.65625 v 0.390625 c 0,0.15625 0,0.203125 -0.421875,0.203125 h -0.1875 V 0 c 0.234375,-0.015625 0.5625,-0.015625 0.859375,-0.015625 0.28125,0 0.609375,0 0.84375,0.015625 V -0.21875 H 2.890625 c -0.4375,0 -0.4375,-0.046875 -0.4375,-0.203125 V -0.8125 Z m -1.0625,-2.03125 v 1.8125 h -1.46875 z m 0,0" + id="id-7930aeb8-5cbb-4581-8e1d-ea16bd59aa87" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ac107fea-8ad0-4aab-a4c0-2d41cd164e68"> + <g + transform="translate(166.763,134.765)" + id="g43753"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-e2a5588a-43f3-44c2-babc-b7b6f01a7826" /> + </g> + <g + transform="translate(171.744,134.765)" + id="g43756"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-cf385c97-8c16-4fa5-b418-96962e985458" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-47b9582e-6d44-4690-a167-ec78d3aaa52d"> + <g + transform="translate(176.414,134.765)" + id="g43760"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-9ad2e3d0-3852-4d08-9378-22ffcbe81879" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,76.106808,187.26056)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\lfloor c_{n_5}/s \\rfloor$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-9-3"> + <defs + id="id-4cc151b0-189e-49b0-b9d1-ea0d7bb4c808"> + <g + id="id-43441dba-a79e-4af1-83ed-93017754ab7c"> + <symbol + overflow="visible" + id="id-06194ad7-0ac3-4a9d-a7a7-686b34df5463"> + <path + style="stroke:none" + d="" + id="id-6639f5a6-549b-47cb-be81-0b04a41b563f" /> + </symbol> + <symbol + overflow="visible" + id="id-b745c3f6-85cb-4d0e-ac05-5d42d92d5cc0"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-c6a39923-15bb-4d1c-b42f-b460b954f788" /> + </symbol> + <symbol + overflow="visible" + id="id-99c0c816-ff83-4477-9bdb-845d2aaa871b"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-0dd15361-7777-4116-896b-c78d1ef9a1eb" /> + </symbol> + <symbol + overflow="visible" + id="id-174f3d77-5d57-45a6-b1a9-4aaccdc40869"> + <path + style="stroke:none" + d="" + id="id-3eebe3f0-a75b-4f40-a813-563b73517436" /> + </symbol> + <symbol + overflow="visible" + id="id-71959008-00a8-4eae-b758-64ec4011aa16"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-264a855e-71bc-470b-a14d-fb44512b169b" /> + </symbol> + <symbol + overflow="visible" + id="id-f4f0f7e8-dc64-4d67-8147-7fefcd59f1ea"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-11c8acf4-b19e-4ada-ac94-1905deb8ab70" /> + </symbol> + <symbol + overflow="visible" + id="id-12511f0d-421b-4942-b257-7109e162d86d"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-1a48520c-8b55-454f-83ed-bc80d25e2743" /> + </symbol> + <symbol + overflow="visible" + id="id-7c202cbd-da2d-4bf0-8452-163f0fba23c4"> + <path + style="stroke:none" + d="" + id="id-2cfa4249-e0d7-45d8-a55e-01b2f2c42e23" /> + </symbol> + <symbol + overflow="visible" + id="id-66f67bd0-9571-4b15-b181-c6bdcb77c534"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-b7fc5d22-9fcc-4df5-9f38-06cf9818200d" /> + </symbol> + <symbol + overflow="visible" + id="id-e51db6d7-9bba-4484-b153-6fdd0227f41c"> + <path + style="stroke:none" + d="" + id="id-2603aec0-5dcc-4dff-95bc-76c3e1d4481b" /> + </symbol> + <symbol + overflow="visible" + id="id-d09de25e-0a4a-4f1b-bb13-931e25d1f51e"> + <path + style="stroke:none" + d="m 0.984375,-2.75 c 0.25,0.0625 0.484375,0.0625 0.53125,0.0625 0.34375,0 0.59375,-0.09375 0.71875,-0.15625 0.125,-0.0625 0.46875,-0.28125 0.46875,-0.390625 0,-0.078125 -0.0625,-0.078125 -0.078125,-0.078125 -0.015625,0 -0.015625,0 -0.078125,0.015625 -0.1875,0.0625 -0.5,0.140625 -0.828125,0.140625 -0.28125,0 -0.546875,-0.046875 -0.8125,-0.140625 C 0.84375,-3.3125 0.84375,-3.3125 0.828125,-3.3125 0.75,-3.3125 0.75,-3.265625 0.75,-3.1875 v 1.5 c 0,0.09375 0,0.15625 0.109375,0.15625 0.046875,0 0.046875,-0.015625 0.09375,-0.0625 0.1875,-0.21875 0.453125,-0.328125 0.796875,-0.328125 0.28125,0 0.453125,0.15625 0.515625,0.265625 0.109375,0.171875 0.140625,0.390625 0.140625,0.640625 0,0.203125 -0.015625,0.484375 -0.21875,0.671875 -0.21875,0.234375 -0.5,0.25 -0.609375,0.25 -0.328125,0 -0.6875,-0.140625 -0.84375,-0.4375 0.203125,-0.015625 0.28125,-0.15625 0.28125,-0.28125 0,-0.15625 -0.125,-0.28125 -0.28125,-0.28125 -0.109375,0 -0.28125,0.078125 -0.28125,0.296875 0,0.5 0.484375,0.90625 1.125,0.90625 0.75,0 1.359375,-0.5 1.359375,-1.109375 0,-0.5625 -0.484375,-1.09375 -1.171875,-1.09375 -0.3125,0 -0.578125,0.078125 -0.78125,0.25 z m 0,0" + id="id-15b83509-c49e-4abf-a1ff-e8403c4a91b7" /> + </symbol> + </g> + </defs> + <g + id="id-0f85ceaf-4a0a-4815-9158-a036d625307b" + transform="translate(-150.446,-127.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-269f042b-d89a-4d63-93f8-09d8374b3659"> + <g + transform="translate(148.712,134.765)" + id="g45753"> + <path + style="stroke:none" + d="M 3.84375,2.5 C 4,2.5 4.203125,2.5 4.203125,2.296875 4.203125,2.09375 4,2.09375 3.84375,2.09375 H 2.140625 V -7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.140625 C 1.734375,2.453125 1.78125,2.5 2.09375,2.5 Z m 0,0" + id="id-b6767a43-8ead-48f0-b6c0-a1cfa26d9672" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-4cef209d-1326-485d-b36a-f1b664601571"> + <g + transform="translate(153.14,134.765)" + id="g45757"> + <path + style="stroke:none" + d="m 3.953125,-3.78125 c -0.171875,0 -0.296875,0 -0.4375,0.125 -0.171875,0.15625 -0.1875,0.328125 -0.1875,0.390625 0,0.25 0.1875,0.359375 0.375,0.359375 0.28125,0 0.546875,-0.25 0.546875,-0.640625 0,-0.484375 -0.46875,-0.859375 -1.171875,-0.859375 -1.34375,0 -2.671875,1.421875 -2.671875,2.828125 0,0.90625 0.578125,1.6875 1.625,1.6875 1.421875,0 2.25,-1.0625 2.25,-1.171875 0,-0.0625 -0.046875,-0.140625 -0.109375,-0.140625 -0.0625,0 -0.078125,0.03125 -0.140625,0.109375 -0.78125,0.984375 -1.875,0.984375 -1.984375,0.984375 -0.625,0 -0.90625,-0.484375 -0.90625,-1.09375 0,-0.40625 0.203125,-1.375 0.546875,-1.984375 0.3125,-0.578125 0.859375,-1 1.40625,-1 0.328125,0 0.71875,0.125 0.859375,0.40625 z m 0,0" + id="id-ada00035-8369-434c-80b0-6211d487a5ff" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-37d12fec-4ff9-4082-a5ad-d6426beab189"> + <g + transform="translate(157.452,136.259)" + id="g45761"> + <path + style="stroke:none" + d="m 0.84375,-0.4375 c -0.015625,0.09375 -0.0625,0.265625 -0.0625,0.28125 0,0.15625 0.125,0.21875 0.234375,0.21875 0.125,0 0.234375,-0.078125 0.28125,-0.140625 0.03125,-0.0625 0.078125,-0.296875 0.125,-0.4375 0.03125,-0.125 0.109375,-0.453125 0.140625,-0.625 0.046875,-0.15625 0.09375,-0.3125 0.125,-0.46875 0.078125,-0.28125 0.09375,-0.34375 0.296875,-0.625 C 2.171875,-2.515625 2.5,-2.875 3.03125,-2.875 c 0.390625,0 0.40625,0.359375 0.40625,0.484375 0,0.421875 -0.296875,1.1875 -0.40625,1.484375 -0.078125,0.203125 -0.109375,0.265625 -0.109375,0.375 0,0.375 0.296875,0.59375 0.65625,0.59375 0.703125,0 1,-0.953125 1,-1.0625 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.09375,0 -0.09375,0.046875 -0.125,0.125 C 4.1875,-0.40625 3.875,-0.125 3.609375,-0.125 c -0.15625,0 -0.1875,-0.09375 -0.1875,-0.25 0,-0.15625 0.046875,-0.25 0.171875,-0.5625 0.078125,-0.21875 0.359375,-0.953125 0.359375,-1.34375 0,-0.671875 -0.53125,-0.796875 -0.90625,-0.796875 -0.578125,0 -0.96875,0.359375 -1.171875,0.640625 -0.046875,-0.484375 -0.453125,-0.640625 -0.75,-0.640625 -0.296875,0 -0.453125,0.21875 -0.546875,0.375 -0.15625,0.265625 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.125 -0.0625,0.390625 -0.125,0.578125 -0.046875,0.1875 -0.109375,0.46875 -0.140625,0.625 z m 0,0" + id="id-9995383a-17ec-4281-b4e7-5d358e256a4e" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-552ac16c-4c8e-45bd-83fb-4948678ff630"> + <g + transform="translate(162.376,137.255)" + id="g45765"> + <path + style="stroke:none" + d="m 0.984375,-2.75 c 0.25,0.0625 0.484375,0.0625 0.53125,0.0625 0.34375,0 0.59375,-0.09375 0.71875,-0.15625 0.125,-0.0625 0.46875,-0.28125 0.46875,-0.390625 0,-0.078125 -0.0625,-0.078125 -0.078125,-0.078125 -0.015625,0 -0.015625,0 -0.078125,0.015625 -0.1875,0.0625 -0.5,0.140625 -0.828125,0.140625 -0.28125,0 -0.546875,-0.046875 -0.8125,-0.140625 C 0.84375,-3.3125 0.84375,-3.3125 0.828125,-3.3125 0.75,-3.3125 0.75,-3.265625 0.75,-3.1875 v 1.5 c 0,0.09375 0,0.15625 0.109375,0.15625 0.046875,0 0.046875,-0.015625 0.09375,-0.0625 0.1875,-0.21875 0.453125,-0.328125 0.796875,-0.328125 0.28125,0 0.453125,0.15625 0.515625,0.265625 0.109375,0.171875 0.140625,0.390625 0.140625,0.640625 0,0.203125 -0.015625,0.484375 -0.21875,0.671875 -0.21875,0.234375 -0.5,0.25 -0.609375,0.25 -0.328125,0 -0.6875,-0.140625 -0.84375,-0.4375 0.203125,-0.015625 0.28125,-0.15625 0.28125,-0.28125 0,-0.15625 -0.125,-0.28125 -0.28125,-0.28125 -0.109375,0 -0.28125,0.078125 -0.28125,0.296875 0,0.5 0.484375,0.90625 1.125,0.90625 0.75,0 1.359375,-0.5 1.359375,-1.109375 0,-0.5625 -0.484375,-1.09375 -1.171875,-1.09375 -0.3125,0 -0.578125,0.078125 -0.78125,0.25 z m 0,0" + id="id-23d07112-73ac-45bc-be7d-f5015afa9a00" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-2cbe04e2-867e-40ec-8902-228bdbf8ef12"> + <g + transform="translate(166.763,134.765)" + id="g45769"> + <path + style="stroke:none" + d="m 4.375,-7.09375 c 0.046875,-0.140625 0.046875,-0.171875 0.046875,-0.1875 0,-0.109375 -0.078125,-0.203125 -0.1875,-0.203125 -0.078125,0 -0.140625,0.03125 -0.171875,0.09375 l -3.46875,9.5 C 0.546875,2.25 0.546875,2.28125 0.546875,2.296875 0.546875,2.40625 0.640625,2.5 0.75,2.5 0.875,2.5 0.90625,2.421875 0.96875,2.25 Z m 0,0" + id="id-172b54c9-d539-4792-b94a-2c559deebc0c" /> + </g> + <g + transform="translate(171.744,134.765)" + id="g45772"> + <path + style="stroke:none" + d="M 3.890625,-3.734375 C 3.625,-3.71875 3.421875,-3.5 3.421875,-3.28125 c 0,0.140625 0.09375,0.296875 0.3125,0.296875 0.21875,0 0.453125,-0.171875 0.453125,-0.5625 C 4.1875,-4 3.765625,-4.40625 3,-4.40625 c -1.3125,0 -1.6875,1.015625 -1.6875,1.453125 0,0.78125 0.734375,0.921875 1.03125,0.984375 0.515625,0.109375 1.03125,0.21875 1.03125,0.765625 0,0.25 -0.21875,1.09375 -1.421875,1.09375 -0.140625,0 -0.90625,0 -1.140625,-0.53125 0.390625,0.046875 0.640625,-0.25 0.640625,-0.53125 0,-0.21875 -0.171875,-0.34375 -0.375,-0.34375 -0.265625,0 -0.5625,0.203125 -0.5625,0.65625 0,0.5625 0.578125,0.96875 1.421875,0.96875 1.625,0 2.015625,-1.203125 2.015625,-1.65625 0,-0.359375 -0.1875,-0.609375 -0.3125,-0.71875 -0.265625,-0.28125 -0.5625,-0.34375 -1,-0.421875 -0.359375,-0.078125 -0.75,-0.15625 -0.75,-0.609375 C 1.890625,-3.578125 2.125,-4.1875 3,-4.1875 c 0.25,0 0.75,0.078125 0.890625,0.453125 z m 0,0" + id="id-a2f15b99-9215-42b3-8032-821609178236" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-8e494d81-eed6-4f20-8cd8-bd5c2acc839c"> + <g + transform="translate(176.414,134.765)" + id="g45776"> + <path + style="stroke:none" + d="m 2.6875,-7.125 c 0,-0.171875 0,-0.359375 -0.203125,-0.359375 -0.203125,0 -0.203125,0.21875 -0.203125,0.359375 V 2.09375 H 0.5625 c -0.140625,0 -0.359375,0 -0.359375,0.203125 C 0.203125,2.5 0.421875,2.5 0.5625,2.5 H 2.328125 C 2.65625,2.5 2.6875,2.46875 2.6875,2.140625 Z m 0,0" + id="id-da648515-8758-429e-8296-74841587c00d" /> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -58.569882,161.85891 36.081935,-33.64433" + id="path46675" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -57.592957,163.61632 34.666608,-21.96501" + id="path46677" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -57.425795,165.6441 34.396275,-1.29004" + id="path46679" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -58.042611,167.14878 35.211877,11.5036" + id="path46681" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -13.94901,123.93963 35.277237,-2.85007" + id="path46683" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -14.167095,127.40906 35.524272,5.9385" + id="path46685" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -14.43601,142.55358 36.283725,-3.39075" + id="path46687" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M -14.428797,138.22429 21.529202,123.81877" + id="path46689" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -14.50708,161.98124 35.132899,0.18761" + id="path46691" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M -14.227272,166.38468 21.73904,174.8371" + id="path46693" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m -14.211844,181.27437 35.676617,-0.76794" + id="path46695" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M -14.030184,178.07427 21.291153,165.28938" + id="path46697" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 29.39709,119.19918 35.808745,0.0306" + id="path46699" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 29.785617,121.45071 65.350313,136.1025" + id="path46701" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 28.751691,123.57068 36.092929,30.2858" + id="path46703" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 27.6792,139.62259 37.662678,47.68634" + id="path46705" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 29.077412,138.42645 36.037186,32.17009" + id="path46707" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 26.989699,158.8351 64.80126,124.23448" + id="path46709" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 29.556739,161.43662 64.849816,141.2088" + id="path46711" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 29.404792,165.07861 35.432216,-6.74839" + id="path46713" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 29.14949,175.68007 35.265989,-1.1479" + id="path46715" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 28.633089,180.77872 35.667159,8.66191" + id="path46717" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 73.287625,121.23048 109.6155,161.07576" + id="path46719" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 73.235603,140.46392 34.951787,22.33053" + id="path46721" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 73.046,157.54841 34.89733,7.1993" + id="path46723" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 73.299796,172.13518 35.268694,-5.22616" + id="path46725" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 72.897566,187.9668 109.8041,168.43717" + id="path46727" /> + <g + transform="matrix(0.40506592,0,0,0.42764304,-44.345827,140.11983)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\rho_\\mathbf{Z}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-06"> + <defs + id="id-1762abac-3aa4-4112-aeb2-6eb976716074-5"> + <g + id="g46805"> + <symbol + overflow="visible" + id="symbol46791"> + <path + style="stroke:none" + d="" + id="path46789" /> + </symbol> + <symbol + overflow="visible" + id="symbol46795"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="path46793" /> + </symbol> + <symbol + overflow="visible" + id="symbol46799"> + <path + style="stroke:none" + d="" + id="path46797" /> + </symbol> + <symbol + overflow="visible" + id="symbol46803"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="path46801" /> + </symbol> + </g> + </defs> + <g + id="id-606ca976-1fc0-4ce2-bcd3-cc17f3e3fc2b-2" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-0345f6c4-58bf-432e-829b-1445e64cf9a0-7"> + <g + transform="translate(148.712,134.765)" + id="g29933-4"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-595f2cfd-716d-4a6f-90a9-910ca9bd3fc2-0" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-71bce2e8-422f-417c-bf78-a63a2de27ed0-3"> + <g + transform="translate(153.863,136.259)" + id="g29937-2"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-ac2c156f-4276-403b-8831-666cbc5ec8e8-8" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-37.53122,161.07381)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\rho_\\mathbf{Z}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-03"> + <defs + id="id-1762abac-3aa4-4112-aeb2-6eb976716074-7"> + <g + id="g46954"> + <symbol + overflow="visible" + id="symbol46940"> + <path + style="stroke:none" + d="" + id="path46938" /> + </symbol> + <symbol + overflow="visible" + id="symbol46944"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="path46942" /> + </symbol> + <symbol + overflow="visible" + id="symbol46948"> + <path + style="stroke:none" + d="" + id="path46946" /> + </symbol> + <symbol + overflow="visible" + id="symbol46952"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="path46950" /> + </symbol> + </g> + </defs> + <g + id="id-606ca976-1fc0-4ce2-bcd3-cc17f3e3fc2b-4" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-0345f6c4-58bf-432e-829b-1445e64cf9a0-4"> + <g + transform="translate(148.712,134.765)" + id="g29933-3"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-595f2cfd-716d-4a6f-90a9-910ca9bd3fc2-8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-71bce2e8-422f-417c-bf78-a63a2de27ed0-6"> + <g + transform="translate(153.863,136.259)" + id="g29937-0"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-ac2c156f-4276-403b-8831-666cbc5ec8e8-89" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-37.795847,151.30336)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\rho_\\mathbf{N}-\\rho_\\mathbf{Z}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-0-2"> + <defs + id="id-dd9e6770-89ad-4047-83fb-288e781cfae2-2"> + <g + id="g47108"> + <symbol + overflow="visible" + id="symbol47082"> + <path + style="stroke:none" + d="" + id="path47080" /> + </symbol> + <symbol + overflow="visible" + id="symbol47086"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="path47084" /> + </symbol> + <symbol + overflow="visible" + id="symbol47090"> + <path + style="stroke:none" + d="" + id="path47088" /> + </symbol> + <symbol + overflow="visible" + id="symbol47094"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="path47092" /> + </symbol> + <symbol + overflow="visible" + id="symbol47098"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="path47096" /> + </symbol> + <symbol + overflow="visible" + id="symbol47102"> + <path + style="stroke:none" + d="" + id="path47100" /> + </symbol> + <symbol + overflow="visible" + id="symbol47106"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="path47104" /> + </symbol> + </g> + </defs> + <g + id="id-25d10de2-50d9-480c-bf15-ca0fe6087a55-9" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-88199d7b-8f3d-45e0-bdf0-9533cfe8b132-8"> + <g + transform="translate(148.712,134.765)" + id="g31666-1"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-e46ea34b-9973-4ddf-86e8-18d24f4fb584-3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d87d38a9-7bab-47d8-baf3-ce0713a971ec-3"> + <g + transform="translate(153.863,136.259)" + id="g31670-3"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-b4239361-8de6-453e-bb45-9bca6d8a4f22-7" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-969ce66b-90d1-4a4f-a402-c283b8df8557-9"> + <g + transform="translate(163.563,134.765)" + id="g31674-8"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-5761f5ef-127a-458c-959c-2ec47f0167f8-6" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-70b6acfe-175f-4e7b-b0e0-229adc0025b8-7"> + <g + transform="translate(173.525,134.765)" + id="g31678-0"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-5b1d2c68-4073-4540-b28d-87fd18d5bb87-4" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7d9a71cf-9ff6-498b-9cbf-2d0e821a2946-8"> + <g + transform="translate(178.676,136.259)" + id="g31682-4"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-82ba62c1-7c86-4c2a-add3-c2ef93ab9b9c-8" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-48.299299,175.30238)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\rho_\\mathbf{N}-\\rho_\\mathbf{Z}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-0-1"> + <defs + id="id-dd9e6770-89ad-4047-83fb-288e781cfae2-6"> + <g + id="g47243"> + <symbol + overflow="visible" + id="symbol47217"> + <path + style="stroke:none" + d="" + id="path47215" /> + </symbol> + <symbol + overflow="visible" + id="symbol47221"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="path47219" /> + </symbol> + <symbol + overflow="visible" + id="symbol47225"> + <path + style="stroke:none" + d="" + id="path47223" /> + </symbol> + <symbol + overflow="visible" + id="symbol47229"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="path47227" /> + </symbol> + <symbol + overflow="visible" + id="symbol47233"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="path47231" /> + </symbol> + <symbol + overflow="visible" + id="symbol47237"> + <path + style="stroke:none" + d="" + id="path47235" /> + </symbol> + <symbol + overflow="visible" + id="symbol47241"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="path47239" /> + </symbol> + </g> + </defs> + <g + id="id-25d10de2-50d9-480c-bf15-ca0fe6087a55-3" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-88199d7b-8f3d-45e0-bdf0-9533cfe8b132-1"> + <g + transform="translate(148.712,134.765)" + id="g31666-4"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-e46ea34b-9973-4ddf-86e8-18d24f4fb584-8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d87d38a9-7bab-47d8-baf3-ce0713a971ec-9"> + <g + transform="translate(153.863,136.259)" + id="g31670-6"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-b4239361-8de6-453e-bb45-9bca6d8a4f22-77" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-969ce66b-90d1-4a4f-a402-c283b8df8557-3"> + <g + transform="translate(163.563,134.765)" + id="g31674-7"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-5761f5ef-127a-458c-959c-2ec47f0167f8-1" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-70b6acfe-175f-4e7b-b0e0-229adc0025b8-2"> + <g + transform="translate(173.525,134.765)" + id="g31678-2"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-5b1d2c68-4073-4540-b28d-87fd18d5bb87-1" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7d9a71cf-9ff6-498b-9cbf-2d0e821a2946-5"> + <g + transform="translate(178.676,136.259)" + id="g31682-0"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-82ba62c1-7c86-4c2a-add3-c2ef93ab9b9c-9" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-7.271113,142.22664)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\rho_\\mathbf{N}-\\rho_\\mathbf{Z}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-0-0"> + <defs + id="id-dd9e6770-89ad-4047-83fb-288e781cfae2-4"> + <g + id="g47378"> + <symbol + overflow="visible" + id="symbol47352"> + <path + style="stroke:none" + d="" + id="path47350" /> + </symbol> + <symbol + overflow="visible" + id="symbol47356"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="path47354" /> + </symbol> + <symbol + overflow="visible" + id="symbol47360"> + <path + style="stroke:none" + d="" + id="path47358" /> + </symbol> + <symbol + overflow="visible" + id="symbol47364"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="path47362" /> + </symbol> + <symbol + overflow="visible" + id="symbol47368"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="path47366" /> + </symbol> + <symbol + overflow="visible" + id="symbol47372"> + <path + style="stroke:none" + d="" + id="path47370" /> + </symbol> + <symbol + overflow="visible" + id="symbol47376"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="path47374" /> + </symbol> + </g> + </defs> + <g + id="id-25d10de2-50d9-480c-bf15-ca0fe6087a55-2" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-88199d7b-8f3d-45e0-bdf0-9533cfe8b132-17"> + <g + transform="translate(148.712,134.765)" + id="g31666-2"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-e46ea34b-9973-4ddf-86e8-18d24f4fb584-4" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d87d38a9-7bab-47d8-baf3-ce0713a971ec-1"> + <g + transform="translate(153.863,136.259)" + id="g31670-65"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-b4239361-8de6-453e-bb45-9bca6d8a4f22-78" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-969ce66b-90d1-4a4f-a402-c283b8df8557-5"> + <g + transform="translate(163.563,134.765)" + id="g31674-9"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-5761f5ef-127a-458c-959c-2ec47f0167f8-2" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-70b6acfe-175f-4e7b-b0e0-229adc0025b8-73"> + <g + transform="translate(173.525,134.765)" + id="g31678-6"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-5b1d2c68-4073-4540-b28d-87fd18d5bb87-47" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7d9a71cf-9ff6-498b-9cbf-2d0e821a2946-9"> + <g + transform="translate(178.676,136.259)" + id="g31682-7"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-82ba62c1-7c86-4c2a-add3-c2ef93ab9b9c-2" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-8.7457839,135.87241)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\rho_\\mathbf{N}-\\rho_\\mathbf{Z}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-0-21"> + <defs + id="id-dd9e6770-89ad-4047-83fb-288e781cfae2-63"> + <g + id="g47513"> + <symbol + overflow="visible" + id="symbol47487"> + <path + style="stroke:none" + d="" + id="path47485" /> + </symbol> + <symbol + overflow="visible" + id="symbol47491"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="path47489" /> + </symbol> + <symbol + overflow="visible" + id="symbol47495"> + <path + style="stroke:none" + d="" + id="path47493" /> + </symbol> + <symbol + overflow="visible" + id="symbol47499"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="path47497" /> + </symbol> + <symbol + overflow="visible" + id="symbol47503"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="path47501" /> + </symbol> + <symbol + overflow="visible" + id="symbol47507"> + <path + style="stroke:none" + d="" + id="path47505" /> + </symbol> + <symbol + overflow="visible" + id="symbol47511"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="path47509" /> + </symbol> + </g> + </defs> + <g + id="id-25d10de2-50d9-480c-bf15-ca0fe6087a55-37" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-88199d7b-8f3d-45e0-bdf0-9533cfe8b132-82"> + <g + transform="translate(148.712,134.765)" + id="g31666-10"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-e46ea34b-9973-4ddf-86e8-18d24f4fb584-5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d87d38a9-7bab-47d8-baf3-ce0713a971ec-8"> + <g + transform="translate(153.863,136.259)" + id="g31670-5"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-b4239361-8de6-453e-bb45-9bca6d8a4f22-5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-969ce66b-90d1-4a4f-a402-c283b8df8557-0"> + <g + transform="translate(163.563,134.765)" + id="g31674-73"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-5761f5ef-127a-458c-959c-2ec47f0167f8-8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-70b6acfe-175f-4e7b-b0e0-229adc0025b8-23"> + <g + transform="translate(173.525,134.765)" + id="g31678-07"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-5b1d2c68-4073-4540-b28d-87fd18d5bb87-7" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7d9a71cf-9ff6-498b-9cbf-2d0e821a2946-7"> + <g + transform="translate(178.676,136.259)" + id="g31682-6"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-82ba62c1-7c86-4c2a-add3-c2ef93ab9b9c-91" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-9.759494,176.54988)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\rho_\\mathbf{N}-\\rho_\\mathbf{Z}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-0-19"> + <defs + id="id-dd9e6770-89ad-4047-83fb-288e781cfae2-0"> + <g + id="g47648"> + <symbol + overflow="visible" + id="symbol47622"> + <path + style="stroke:none" + d="" + id="path47620" /> + </symbol> + <symbol + overflow="visible" + id="symbol47626"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="path47624" /> + </symbol> + <symbol + overflow="visible" + id="symbol47630"> + <path + style="stroke:none" + d="" + id="path47628" /> + </symbol> + <symbol + overflow="visible" + id="symbol47634"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="path47632" /> + </symbol> + <symbol + overflow="visible" + id="symbol47638"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="path47636" /> + </symbol> + <symbol + overflow="visible" + id="symbol47642"> + <path + style="stroke:none" + d="" + id="path47640" /> + </symbol> + <symbol + overflow="visible" + id="symbol47646"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="path47644" /> + </symbol> + </g> + </defs> + <g + id="id-25d10de2-50d9-480c-bf15-ca0fe6087a55-4" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-88199d7b-8f3d-45e0-bdf0-9533cfe8b132-5"> + <g + transform="translate(148.712,134.765)" + id="g31666-6"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-e46ea34b-9973-4ddf-86e8-18d24f4fb584-56" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d87d38a9-7bab-47d8-baf3-ce0713a971ec-84"> + <g + transform="translate(153.863,136.259)" + id="g31670-8"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-b4239361-8de6-453e-bb45-9bca6d8a4f22-8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-969ce66b-90d1-4a4f-a402-c283b8df8557-38"> + <g + transform="translate(163.563,134.765)" + id="g31674-75"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-5761f5ef-127a-458c-959c-2ec47f0167f8-24" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-70b6acfe-175f-4e7b-b0e0-229adc0025b8-5"> + <g + transform="translate(173.525,134.765)" + id="g31678-05"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-5b1d2c68-4073-4540-b28d-87fd18d5bb87-73" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7d9a71cf-9ff6-498b-9cbf-2d0e821a2946-2"> + <g + transform="translate(178.676,136.259)" + id="g31682-72"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-82ba62c1-7c86-4c2a-add3-c2ef93ab9b9c-1" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-11.275455,181.73424)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\rho_\\mathbf{N}-\\rho_\\mathbf{Z}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-0-3"> + <defs + id="id-dd9e6770-89ad-4047-83fb-288e781cfae2-49"> + <g + id="g47783"> + <symbol + overflow="visible" + id="symbol47757"> + <path + style="stroke:none" + d="" + id="path47755" /> + </symbol> + <symbol + overflow="visible" + id="symbol47761"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="path47759" /> + </symbol> + <symbol + overflow="visible" + id="symbol47765"> + <path + style="stroke:none" + d="" + id="path47763" /> + </symbol> + <symbol + overflow="visible" + id="symbol47769"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="path47767" /> + </symbol> + <symbol + overflow="visible" + id="symbol47773"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="path47771" /> + </symbol> + <symbol + overflow="visible" + id="symbol47777"> + <path + style="stroke:none" + d="" + id="path47775" /> + </symbol> + <symbol + overflow="visible" + id="symbol47781"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="path47779" /> + </symbol> + </g> + </defs> + <g + id="id-25d10de2-50d9-480c-bf15-ca0fe6087a55-40" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-88199d7b-8f3d-45e0-bdf0-9533cfe8b132-3"> + <g + transform="translate(148.712,134.765)" + id="g31666-12"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-e46ea34b-9973-4ddf-86e8-18d24f4fb584-7" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d87d38a9-7bab-47d8-baf3-ce0713a971ec-7"> + <g + transform="translate(153.863,136.259)" + id="g31670-9"> + <path + style="stroke:none" + d="M 2.28125,-4.6875 C 2.1875,-4.78125 2.1875,-4.78125 2.03125,-4.78125 H 0.390625 v 0.390625 h 0.75 V -0.5625 c 0,0.109375 0,0.109375 -0.015625,0.125 -0.0625,0.046875 -0.421875,0.046875 -0.5,0.046875 H 0.390625 V 0 c 0.09375,0 0.734375,-0.03125 1,-0.03125 C 1.65625,-0.03125 2.328125,0 2.375,0 V -0.390625 H 2.140625 c -0.09375,0 -0.234375,0 -0.34375,-0.015625 C 1.640625,-0.421875 1.625,-0.421875 1.625,-0.5625 v -3.484375 l 3.734375,3.96875 C 5.421875,0 5.453125,0 5.59375,0 5.796875,0 5.828125,-0.03125 5.828125,-0.25 v -3.96875 c 0,-0.109375 0.015625,-0.109375 0.03125,-0.125 0.0625,-0.046875 0.40625,-0.046875 0.484375,-0.046875 H 6.578125 V -4.78125 c -0.09375,0 -0.71875,0.03125 -0.984375,0.03125 -0.265625,0 -0.9375,-0.03125 -1,-0.03125 v 0.390625 h 0.234375 c 0.109375,0 0.25,0 0.34375,0.015625 0.171875,0.015625 0.171875,0.015625 0.171875,0.15625 v 2.796875 z m 0,0" + id="id-b4239361-8de6-453e-bb45-9bca6d8a4f22-81" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-969ce66b-90d1-4a4f-a402-c283b8df8557-07"> + <g + transform="translate(163.563,134.765)" + id="g31674-6"> + <path + style="stroke:none" + d="m 6.5625,-2.296875 c 0.171875,0 0.359375,0 0.359375,-0.203125 0,-0.1875 -0.1875,-0.1875 -0.359375,-0.1875 H 1.171875 c -0.171875,0 -0.34375,0 -0.34375,0.1875 0,0.203125 0.171875,0.203125 0.34375,0.203125 z m 0,0" + id="id-5761f5ef-127a-458c-959c-2ec47f0167f8-0" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-70b6acfe-175f-4e7b-b0e0-229adc0025b8-1"> + <g + transform="translate(173.525,134.765)" + id="g31678-02"> + <path + style="stroke:none" + d="m 0.328125,1.71875 c -0.03125,0.125 -0.03125,0.140625 -0.03125,0.171875 0,0.140625 0.109375,0.265625 0.28125,0.265625 0.203125,0 0.328125,-0.1875 0.34375,-0.21875 0.0625,-0.078125 0.375,-1.421875 0.640625,-2.5 0.203125,0.40625 0.515625,0.671875 0.984375,0.671875 C 3.71875,0.109375 5,-1.296875 5,-2.78125 c 0,-1.0625 -0.65625,-1.625 -1.375,-1.625 -0.96875,0 -2.015625,1 -2.3125,2.21875 z m 2.21875,-1.828125 C 1.84375,-0.109375 1.6875,-0.90625 1.6875,-1 c 0,-0.03125 0.046875,-0.234375 0.078125,-0.359375 0.28125,-1.125 0.375,-1.484375 0.59375,-1.875 0.4375,-0.734375 0.9375,-0.953125 1.234375,-0.953125 0.375,0 0.6875,0.296875 0.6875,0.984375 0,0.546875 -0.28125,1.65625 -0.546875,2.140625 -0.328125,0.640625 -0.8125,0.953125 -1.1875,0.953125 z m 0,0" + id="id-5b1d2c68-4073-4540-b28d-87fd18d5bb87-5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7d9a71cf-9ff6-498b-9cbf-2d0e821a2946-1"> + <g + transform="translate(178.676,136.259)" + id="g31682-9"> + <path + style="stroke:none" + d="M 4.890625,-4.375 C 4.96875,-4.453125 4.96875,-4.46875 4.96875,-4.578125 4.96875,-4.78125 4.875,-4.78125 4.71875,-4.78125 H 0.75 L 0.640625,-3.109375 H 1.09375 c 0.078125,-1.25 1.15625,-1.28125 1.578125,-1.28125 h 1 L 0.59375,-0.421875 C 0.515625,-0.34375 0.515625,-0.328125 0.515625,-0.21875 0.515625,0 0.609375,0 0.765625,0 H 4.875 l 0.140625,-1.953125 h -0.4375 C 4.5,-0.84375 4.03125,-0.421875 2.921875,-0.421875 h -1.09375 z m 0,0" + id="id-82ba62c1-7c86-4c2a-add3-c2ef93ab9b9c-7" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-6.202225,158.18375)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$1$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-1"> + <defs + id="id-8c25a1aa-1f58-4aca-9861-afdb4f0f4cfe-3"> + <g + id="g47887"> + <symbol + overflow="visible" + id="symbol47881"> + <path + style="stroke:none" + d="" + id="path47879" /> + </symbol> + <symbol + overflow="visible" + id="symbol47885"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="path47883" /> + </symbol> + </g> + </defs> + <g + id="id-64520949-1711-454c-bb71-2ee9495c8a41-4" + transform="translate(-149.603,-128.124)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-c193bae0-ec5b-48e8-9e45-b79390a0cfbb-9"> + <g + transform="translate(148.712,134.765)" + id="g35121-2"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-de33b5b0-585c-4134-91a0-c7fc6f17949b-4" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-6.202225,164.4865)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$1$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-4"> + <defs + id="id-8c25a1aa-1f58-4aca-9861-afdb4f0f4cfe-5"> + <g + id="g47936"> + <symbol + overflow="visible" + id="symbol47930"> + <path + style="stroke:none" + d="" + id="path47928" /> + </symbol> + <symbol + overflow="visible" + id="symbol47934"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="path47932" /> + </symbol> + </g> + </defs> + <g + id="id-64520949-1711-454c-bb71-2ee9495c8a41-0" + transform="translate(-149.603,-128.124)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-c193bae0-ec5b-48e8-9e45-b79390a0cfbb-6"> + <g + transform="translate(148.712,134.765)" + id="g35121-4"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-de33b5b0-585c-4134-91a0-c7fc6f17949b-0" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-5.676692,125.16281)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$1$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-94"> + <defs + id="id-8c25a1aa-1f58-4aca-9861-afdb4f0f4cfe-54"> + <g + id="g47985"> + <symbol + overflow="visible" + id="symbol47979"> + <path + style="stroke:none" + d="" + id="path47977" /> + </symbol> + <symbol + overflow="visible" + id="symbol47983"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="path47981" /> + </symbol> + </g> + </defs> + <g + id="id-64520949-1711-454c-bb71-2ee9495c8a41-5" + transform="translate(-149.603,-128.124)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-c193bae0-ec5b-48e8-9e45-b79390a0cfbb-2"> + <g + transform="translate(148.712,134.765)" + id="g35121-1"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-de33b5b0-585c-4134-91a0-c7fc6f17949b-3" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.40506592,0,0,0.42764304,-5.764281,119.64472)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$1$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-5-4-0"> + <defs + id="id-8c25a1aa-1f58-4aca-9861-afdb4f0f4cfe-9"> + <g + id="g48034"> + <symbol + overflow="visible" + id="symbol48028"> + <path + style="stroke:none" + d="" + id="path48026" /> + </symbol> + <symbol + overflow="visible" + id="symbol48032"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="path48030" /> + </symbol> + </g> + </defs> + <g + id="id-64520949-1711-454c-bb71-2ee9495c8a41-57" + transform="translate(-149.603,-128.124)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-c193bae0-ec5b-48e8-9e45-b79390a0cfbb-3"> + <g + transform="translate(148.712,134.765)" + id="g35121-3"> + <path + style="stroke:none" + d="m 2.9375,-6.375 c 0,-0.25 0,-0.265625 -0.234375,-0.265625 C 2.078125,-6 1.203125,-6 0.890625,-6 v 0.3125 c 0.203125,0 0.78125,0 1.296875,-0.265625 v 5.171875 c 0,0.359375 -0.03125,0.46875 -0.921875,0.46875 h -0.3125 V 0 c 0.34375,-0.03125 1.203125,-0.03125 1.609375,-0.03125 0.390625,0 1.265625,0 1.609375,0.03125 v -0.3125 h -0.3125 c -0.90625,0 -0.921875,-0.109375 -0.921875,-0.46875 z m 0,0" + id="id-de33b5b0-585c-4134-91a0-c7fc6f17949b-8" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g26471" + transform="translate(-77.515812,96.131383)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3" + cx="89.263428" + cy="53.86829" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,88.2697,52.2609)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{s}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6"> + <defs + id="id-c7917549-bead-4fe2-8914-f2edc72486e9"> + <g + id="id-c32c4a99-1d4b-4f96-bc99-03794549d9e8"> + <symbol + overflow="visible" + id="id-85ce1641-a797-41a3-80d6-c31dc5baab30"> + <path + style="stroke:none" + d="" + id="id-05a16e79-fee2-4fcc-a02c-fe91f7bf9dc2" /> + </symbol> + <symbol + overflow="visible" + id="id-28f87cb3-8400-4fe5-bae3-8a97938e3f48"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-661793dd-c022-4f0a-9b05-38a8f25ce49f" /> + </symbol> + </g> + </defs> + <g + id="id-2c7c9baf-4fd8-4d72-a946-9b8bde48793c" + transform="translate(-149.087,-130.249)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-f2a89e2f-db57-484c-b956-cb454c2c249e"> + <g + transform="translate(148.712,134.765)" + id="g4390"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-0b53c534-8c19-4b2e-aa7c-a35279bc41c7" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g27296" + transform="translate(97.504076,126.44992)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-6" + cx="88.699356" + cy="23.549749" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,87.7489,21.4125)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{t}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-1"> + <defs + id="id-aae89ce6-5911-4a24-8e24-a5bfc94528ad"> + <g + id="id-8ecdf416-7420-433d-b232-d25cd2014d41"> + <symbol + overflow="visible" + id="id-6085f62c-e7de-4535-a672-6849904ca7a6"> + <path + style="stroke:none" + d="" + id="id-b555ae83-e10a-4164-a858-16ba75bae1fb" /> + </symbol> + <symbol + overflow="visible" + id="id-0768c856-38ba-4438-9302-d162d012e07e"> + <path + style="stroke:none" + d="m 1.03125,-3.953125 v 2.734375 c 0,1.0625 0.859375,1.28125 1.578125,1.28125 0.75,0 1.203125,-0.578125 1.203125,-1.296875 v -0.53125 H 3.34375 V -1.25 c 0,0.671875 -0.328125,0.90625 -0.609375,0.90625 -0.578125,0 -0.578125,-0.640625 -0.578125,-0.859375 v -2.75 H 3.625 v -0.46875 H 2.15625 v -1.90625 H 1.6875 c 0,1 -0.484375,1.984375 -1.484375,2.015625 v 0.359375 z m 0,0" + id="id-890ce425-b336-4321-8550-e572f39157c7" /> + </symbol> + </g> + </defs> + <g + id="id-49cd7bfd-c6b1-4faf-9ed9-d007d5869376" + transform="translate(-148.915,-128.437)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-67e3cf82-3212-44a0-9470-ac0443790c56"> + <g + transform="translate(148.712,134.765)" + id="g5514"> + <path + style="stroke:none" + d="m 1.03125,-3.953125 v 2.734375 c 0,1.0625 0.859375,1.28125 1.578125,1.28125 0.75,0 1.203125,-0.578125 1.203125,-1.296875 v -0.53125 H 3.34375 V -1.25 c 0,0.671875 -0.328125,0.90625 -0.609375,0.90625 -0.578125,0 -0.578125,-0.640625 -0.578125,-0.859375 v -2.75 H 3.625 v -0.46875 H 2.15625 v -1.90625 H 1.6875 c 0,1 -0.484375,1.984375 -1.484375,2.015625 v 0.359375 z m 0,0" + id="id-7cd1d6f5-1c23-4ccf-a5f7-cf6b1181294d" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g28418"> + <g + id="g29000" + transform="translate(14.165741,-2.1923528)"> + <g + id="g27840" + transform="translate(0.44265148)"> + <g + id="g26551" + transform="translate(-48.087203,37.470493)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-2-92" + cx="88.840378" + cy="75.725845" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,85.676379,72.17292)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{p}_1^+$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-2-6"> + <defs + id="id-cbff7919-d4b5-4394-ba48-48d13b56c92f-6"> + <g + id="g8083"> + <symbol + overflow="visible" + id="symbol8065"> + <path + style="stroke:none" + d="" + id="path8063" /> + </symbol> + <symbol + overflow="visible" + id="symbol8069"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="path8067" /> + </symbol> + <symbol + overflow="visible" + id="symbol8073"> + <path + style="stroke:none" + d="" + id="path8071" /> + </symbol> + <symbol + overflow="visible" + id="symbol8077"> + <path + style="stroke:none" + d="m 3.21875,-1.578125 h 2.140625 c 0.09375,0 0.25,0 0.25,-0.15625 0,-0.1875 -0.15625,-0.1875 -0.25,-0.1875 H 3.21875 V -4.0625 c 0,-0.078125 0,-0.25 -0.15625,-0.25 -0.171875,0 -0.171875,0.15625 -0.171875,0.25 v 2.140625 H 0.75 c -0.09375,0 -0.265625,0 -0.265625,0.171875 0,0.171875 0.15625,0.171875 0.265625,0.171875 H 2.890625 V 0.5625 c 0,0.09375 0,0.265625 0.15625,0.265625 0.171875,0 0.171875,-0.171875 0.171875,-0.265625 z m 0,0" + id="path8075" /> + </symbol> + <symbol + overflow="visible" + id="symbol8081"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path8079" /> + </symbol> + </g> + </defs> + <g + id="id-555eaf7c-0241-4a4f-bd71-2c21d29baebe-1" + transform="translate(-149.087,-126.191)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-a72af59c-4bac-4834-aaf7-058eb01357e1-0"> + <g + transform="translate(148.712,134.765)" + id="g7749-6"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-b6cae2af-8878-418c-b019-25bd92521491-15" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-e2990b93-d2b9-4670-be91-f0ef68d3dd3d-9"> + <g + transform="translate(155.077,130.503)" + id="g7753-49"> + <path + style="stroke:none" + d="m 3.21875,-1.578125 h 2.140625 c 0.09375,0 0.25,0 0.25,-0.15625 0,-0.1875 -0.15625,-0.1875 -0.25,-0.1875 H 3.21875 V -4.0625 c 0,-0.078125 0,-0.25 -0.15625,-0.25 -0.171875,0 -0.171875,0.15625 -0.171875,0.25 v 2.140625 H 0.75 c -0.09375,0 -0.265625,0 -0.265625,0.171875 0,0.171875 0.15625,0.171875 0.265625,0.171875 H 2.890625 V 0.5625 c 0,0.09375 0,0.265625 0.15625,0.265625 0.171875,0 0.171875,-0.171875 0.171875,-0.265625 z m 0,0" + id="id-3b4c96ca-b7a4-44ac-8947-f1231a5944c1-0" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-658bb807-40cf-4a1e-81af-d1ca8d66f367-9"> + <g + transform="translate(155.077,137.421)" + id="g7757-1"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-3572f7f0-1828-4196-b2a7-2f7f0b732bbf-7" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g26525" + transform="translate(-32.011321,50.83425)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-2" + cx="72.764496" + cy="77.277023" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,69.6395,74.423)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{p}_1^-$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-2"> + <defs + id="id-cc436e79-6d21-4a5d-8360-872182a76ed8"> + <g + id="id-f7896580-d5f5-44b5-8526-74c57a51e963"> + <symbol + overflow="visible" + id="id-72d0a318-ebd4-41a6-8243-cfe5f7021f68"> + <path + style="stroke:none" + d="" + id="id-2736591c-ab1a-48f1-b671-fcf4894e6aad" /> + </symbol> + <symbol + overflow="visible" + id="id-bc8e730a-5028-46b4-8a57-31c0ef87b9f5"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-1d94dd4f-b0fb-4016-8a10-db8000e9bc01" /> + </symbol> + <symbol + overflow="visible" + id="id-eb7ca2e4-d9ed-48e2-8e86-9adebdbb0caa"> + <path + style="stroke:none" + d="" + id="id-4a7e82ed-2d34-47a7-8cd3-93f0b7a95072" /> + </symbol> + <symbol + overflow="visible" + id="id-e962f5f5-c727-4c52-8543-b55b4ae5c87f"> + <path + style="stroke:none" + d="m 5.1875,-1.578125 c 0.109375,0 0.28125,0 0.28125,-0.15625 0,-0.1875 -0.171875,-0.1875 -0.28125,-0.1875 H 1.03125 c -0.109375,0 -0.28125,0 -0.28125,0.171875 0,0.171875 0.15625,0.171875 0.28125,0.171875 z m 0,0" + id="id-2be5b272-3044-4a33-9e29-9d179bd5dce5" /> + </symbol> + <symbol + overflow="visible" + id="id-d67a516a-d3b4-4f8f-9673-2fa8e6de6e36"> + <path + style="stroke:none" + d="" + id="id-a011e2d6-6cd7-40d7-a9a5-b5d61b196f33" /> + </symbol> + <symbol + overflow="visible" + id="id-57f0a5c5-5958-4f1c-95df-8516d9f9e9de"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-40194a35-d743-4167-8b56-e34dc886968b" /> + </symbol> + </g> + </defs> + <g + id="id-d54a5e56-c45b-49da-9d08-d0dda768479c" + transform="translate(-149.087,-128.581)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-b422c3ac-1b12-43f7-8f3a-db2ae4188297"> + <g + transform="translate(148.712,134.765)" + id="g9284"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-fde23558-b7ac-4af3-9e96-b5497023a0e5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-998eda56-ce89-426d-b4f3-da151dddb054"> + <g + transform="translate(155.077,130.503)" + id="g9288"> + <path + style="stroke:none" + d="m 5.1875,-1.578125 c 0.109375,0 0.28125,0 0.28125,-0.15625 0,-0.1875 -0.171875,-0.1875 -0.28125,-0.1875 H 1.03125 c -0.109375,0 -0.28125,0 -0.28125,0.171875 0,0.171875 0.15625,0.171875 0.28125,0.171875 z m 0,0" + id="id-93e7af07-d4e3-4216-8fae-8b5de5d40dff" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-0f9adf07-2769-4ec4-a084-94d359631a65"> + <g + transform="translate(155.077,137.421)" + id="g9292"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-82fa32c6-12c3-44d2-9f33-a48890c69d77" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-48-7-8" + transform="matrix(0,0.96576732,-0.96576732,0,171.045,41.875233)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-1-8-0"> + <g + transform="translate(148.712,134.765)" + id="g3573-2-9-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-9-1-29" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-3-5-6"> + <g + transform="translate(153.143,134.765)" + id="g3577-9-4-1"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-0-9-0" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-8-2-4"> + <g + transform="translate(157.565,134.765)" + id="g3581-8-5-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-5-7-22" /> + </g> + </g> + </g> + <g + id="g27894" + transform="translate(-26.938574,38.914846)"> + <g + id="g26497-9" + transform="translate(-4.7711169,20.125469)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-2-9-4" + cx="72.905518" + cy="93.070869" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,69.7415,89.5176)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{p}_2^+$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-2-4-2"> + <defs + id="id-11dc312f-0805-48d3-9d1b-a1a01bfddabd-2"> + <g + id="g27626"> + <symbol + overflow="visible" + id="symbol27608"> + <path + style="stroke:none" + d="" + id="path27606" /> + </symbol> + <symbol + overflow="visible" + id="symbol27612"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="path27610" /> + </symbol> + <symbol + overflow="visible" + id="symbol27616"> + <path + style="stroke:none" + d="" + id="path27614" /> + </symbol> + <symbol + overflow="visible" + id="symbol27620"> + <path + style="stroke:none" + d="m 3.21875,-1.578125 h 2.140625 c 0.09375,0 0.25,0 0.25,-0.15625 0,-0.1875 -0.15625,-0.1875 -0.25,-0.1875 H 3.21875 V -4.0625 c 0,-0.078125 0,-0.25 -0.15625,-0.25 -0.171875,0 -0.171875,0.15625 -0.171875,0.25 v 2.140625 H 0.75 c -0.09375,0 -0.265625,0 -0.265625,0.171875 0,0.171875 0.15625,0.171875 0.265625,0.171875 H 2.890625 V 0.5625 c 0,0.09375 0,0.265625 0.15625,0.265625 0.171875,0 0.171875,-0.171875 0.171875,-0.265625 z m 0,0" + id="path27618" /> + </symbol> + <symbol + overflow="visible" + id="symbol27624"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="path27622" /> + </symbol> + </g> + </defs> + <g + id="id-feffe247-4099-4d6e-99cd-f50d785976e9-6" + transform="translate(-149.087,-126.191)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-ebe7a007-371a-41bd-b1ae-09e510aa7d3b-8"> + <g + transform="translate(148.712,134.765)" + id="g10486-3"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-68da610c-1fc4-4ae5-9ee0-0f9083e3846e-8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-95f86fce-3c44-4736-b9c2-69b022370c73-3"> + <g + transform="translate(155.077,130.503)" + id="g10490-3"> + <path + style="stroke:none" + d="m 3.21875,-1.578125 h 2.140625 c 0.09375,0 0.25,0 0.25,-0.15625 0,-0.1875 -0.15625,-0.1875 -0.25,-0.1875 H 3.21875 V -4.0625 c 0,-0.078125 0,-0.25 -0.15625,-0.25 -0.171875,0 -0.171875,0.15625 -0.171875,0.25 v 2.140625 H 0.75 c -0.09375,0 -0.265625,0 -0.265625,0.171875 0,0.171875 0.15625,0.171875 0.265625,0.171875 H 2.890625 V 0.5625 c 0,0.09375 0,0.265625 0.15625,0.265625 0.171875,0 0.171875,-0.171875 0.171875,-0.265625 z m 0,0" + id="id-f70ee1c6-5f69-4f2e-86f3-2238535e6d6c-3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-45ce6d79-6cca-422a-bb80-03cb1f30fa36-8"> + <g + transform="translate(155.077,137.421)" + id="g10494-0"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-372a0257-6671-439b-bfec-29c7490b927b-4" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g26579-7" + transform="translate(-20.705977,36.027518)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-2-93-6" + cx="88.840378" + cy="92.083755" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,85.7154,89.2297)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{p}_2^-$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-2-7-8"> + <defs + id="id-419a2143-5415-4f34-a3da-99e3b97b61cc-9"> + <g + id="g27666"> + <symbol + overflow="visible" + id="symbol27644"> + <path + style="stroke:none" + d="" + id="path27642" /> + </symbol> + <symbol + overflow="visible" + id="symbol27648"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="path27646" /> + </symbol> + <symbol + overflow="visible" + id="symbol27652"> + <path + style="stroke:none" + d="" + id="path27650" /> + </symbol> + <symbol + overflow="visible" + id="symbol27656"> + <path + style="stroke:none" + d="m 5.1875,-1.578125 c 0.109375,0 0.28125,0 0.28125,-0.15625 0,-0.1875 -0.171875,-0.1875 -0.28125,-0.1875 H 1.03125 c -0.109375,0 -0.28125,0 -0.28125,0.171875 0,0.171875 0.15625,0.171875 0.28125,0.171875 z m 0,0" + id="path27654" /> + </symbol> + <symbol + overflow="visible" + id="symbol27660"> + <path + style="stroke:none" + d="" + id="path27658" /> + </symbol> + <symbol + overflow="visible" + id="symbol27664"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="path27662" /> + </symbol> + </g> + </defs> + <g + id="id-22981f9c-7129-4d29-ac71-fe33050ce9d5-5" + transform="translate(-149.087,-128.581)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-955cfe51-1891-42b4-b609-82658f81695e-2"> + <g + transform="translate(148.712,134.765)" + id="g11688-6"> + <path + style="stroke:none" + d="m 2.1875,-3.28125 c 0,-0.1875 0.015625,-0.203125 0.15625,-0.34375 0.390625,-0.40625 0.921875,-0.46875 1.140625,-0.46875 0.65625,0 1.21875,0.609375 1.21875,1.875 0,1.40625 -0.703125,1.921875 -1.34375,1.921875 -0.140625,0 -0.609375,0 -1.0625,-0.546875 C 2.1875,-0.96875 2.1875,-0.984375 2.1875,-1.171875 Z m 0,2.890625 c 0.4375,0.34375 0.875,0.453125 1.28125,0.453125 1.5,0 2.515625,-0.90625 2.515625,-2.28125 0,-1.328125 -0.90625,-2.265625 -2.34375,-2.265625 -0.75,0 -1.28125,0.3125 -1.5,0.484375 V -4.484375 L 0.375,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.375 V 1.46875 H 0.375 V 1.9375 C 0.640625,1.921875 1.25,1.90625 1.625,1.90625 c 0.390625,0 0.984375,0.015625 1.25,0.03125 V 1.46875 H 2.1875 Z m 0,0" + id="id-fb6cff27-25a3-4c4c-a332-5674b274d4da-5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-2666335c-fba9-43e3-bd44-c2255b06ab31-8"> + <g + transform="translate(155.077,130.503)" + id="g11692-7"> + <path + style="stroke:none" + d="m 5.1875,-1.578125 c 0.109375,0 0.28125,0 0.28125,-0.15625 0,-0.1875 -0.171875,-0.1875 -0.28125,-0.1875 H 1.03125 c -0.109375,0 -0.28125,0 -0.28125,0.171875 0,0.171875 0.15625,0.171875 0.28125,0.171875 z m 0,0" + id="id-bc7bcd3e-5dcd-4e53-926e-46d5230ae6b6-9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-b65e27da-76c8-482c-83d9-ddb3240ca129-6"> + <g + transform="translate(155.077,137.421)" + id="g11696-0"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-e50eb5b3-2097-423d-bb46-3fd4794d6db0-4" /> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + <g + id="g28882" + transform="translate(0.02761459,2.2741605)"> + <g + id="g27198" + transform="translate(71.041038,62.848048)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-6-2" + cx="71.520828" + cy="42.215851" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,69.019147,40.199105)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{n}_1$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-1-8"> + <defs + id="id-45914acb-032b-43c0-8ddd-38b2b8e72e9d"> + <g + id="id-00d32c9f-a51c-4240-83bf-259b482dcea1"> + <symbol + overflow="visible" + id="id-5f0025dc-030d-4084-af3b-a9a4663a193c"> + <path + style="stroke:none" + d="" + id="id-df8af8b7-5886-40e5-899f-47e7cf5b8b17" /> + </symbol> + <symbol + overflow="visible" + id="id-cd00f367-5da5-4de6-be52-c7c1883ab922"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-221539ed-1bec-4221-89be-2d4dc66dae8b" /> + </symbol> + <symbol + overflow="visible" + id="id-d0300774-e73b-47c9-9bd5-23f2cd9cfd8e"> + <path + style="stroke:none" + d="" + id="id-0b619acc-2494-4ca6-83a3-a836876d0a09" /> + </symbol> + <symbol + overflow="visible" + id="id-63aaa364-69ff-4be2-bbf2-1ebe3d6600a5"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-44fdab85-d842-4b2b-82ce-7b2e608c47bb" /> + </symbol> + </g> + </defs> + <g + id="id-be1f0151-7451-43cc-bfe9-647862687e9f" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-d96c88b2-1cab-47e1-ae80-299a6ef6b8f2"> + <g + transform="translate(148.712,134.765)" + id="g19902"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-bc0d7caf-2778-4642-a548-a6faae4744b5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-6c03ebd3-7519-48eb-b795-e18d50886574"> + <g + transform="translate(155.077,136.259)" + id="g19906"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-c84b09a8-63f6-4fa7-939d-6b09c812f5bc" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g27219" + transform="translate(90.642332,85.114141)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-6-2-1" + cx="51.919533" + cy="36.998241" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,49.357347,34.981277)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{n}_2$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-1-8-0"> + <defs + id="id-51e1d412-5bfa-4632-89f0-b48ad485b5b1"> + <g + id="id-60fe5164-3be3-433a-b56a-1d9a52e3bffc"> + <symbol + overflow="visible" + id="id-c39314af-29bf-4333-8757-9fbf0676c7b7"> + <path + style="stroke:none" + d="" + id="id-c176c63e-3dbd-462c-ae01-78d17f3d1184" /> + </symbol> + <symbol + overflow="visible" + id="id-aad606d6-3c24-4d59-949f-9b99fac1ea03"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-ca0aa8f2-c168-4ce1-9294-323d8ed7633a" /> + </symbol> + <symbol + overflow="visible" + id="id-60075ebc-cbe6-4a81-ad84-0b3b5f3ec421"> + <path + style="stroke:none" + d="" + id="id-ff6b42e9-f25e-4ac6-ba4f-bbbeddf939b7" /> + </symbol> + <symbol + overflow="visible" + id="id-3c4237f6-ad71-4ecd-a7dc-92a2ee1074d6"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-c5c5c25b-a32c-41c5-afd6-fc5df6dc2433" /> + </symbol> + </g> + </defs> + <g + id="id-1ae23398-236e-4189-a33a-cdab5d56e111" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-3733dc23-c0fe-472c-97e9-1256c40960ac"> + <g + transform="translate(148.712,134.765)" + id="g21756"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-7f97ed92-b8d2-4eed-80b4-f07128538896" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-aae71f97-eb1e-4778-91de-50e87fe45e23"> + <g + transform="translate(155.077,136.259)" + id="g21760"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-d41f9e61-3c29-426d-9614-9c23f51f4042" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g27240" + transform="translate(90.501314,83.830472)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-6-2-6" + cx="52.060551" + cy="55.330383" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,49.481047,53.272267)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{n}_3$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-1-8-2"> + <defs + id="id-110ae961-4b05-441d-a0bb-28d87ee5fc89"> + <g + id="id-aff5bb63-998c-4e5e-ab3d-8efb11040c2d"> + <symbol + overflow="visible" + id="id-1be7eff2-41dc-44e4-a88f-7cbbd6109bb2"> + <path + style="stroke:none" + d="" + id="id-27187d80-2a7e-4165-af43-e8de998169fc" /> + </symbol> + <symbol + overflow="visible" + id="id-ad4a0718-8961-4b72-86ea-d560142fa3e8"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-05965ada-79f7-4e9b-90d2-00d4024a5cfe" /> + </symbol> + <symbol + overflow="visible" + id="id-51bdd8aa-a682-4abc-a01e-4fb818b5e3da"> + <path + style="stroke:none" + d="" + id="id-fe7837e8-2233-4c61-a92f-f100e1ff6fff" /> + </symbol> + <symbol + overflow="visible" + id="id-f487420a-75a3-4cde-a6be-196da607c53c"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-9da7bd1d-0e69-4a41-9050-52a67a174659" /> + </symbol> + </g> + </defs> + <g + id="id-235262a9-19de-46dd-832d-cc8ed5548361" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-93f279de-884e-428c-9d07-4d71f20b6847"> + <g + transform="translate(148.712,134.765)" + id="g23257"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-ac7f498e-fb71-4eb9-81bf-a4e53b3355ea" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-88c35522-c6db-453c-bb64-6ebaaeede29e"> + <g + transform="translate(155.077,136.259)" + id="g23261"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-2965f1ea-d259-4b06-a204-c05af60f68ad" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g27261" + transform="translate(70.617988,101.58403)" + inkscape:transform-center-x="31.462444" + inkscape:transform-center-y="-39.124011"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-6-2-3" + cx="71.943878" + cy="54.625301" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,69.333947,52.608367)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{n}_4$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-1-8-3"> + <defs + id="id-bdd040f6-8d63-4a5f-9831-e2068ca29838"> + <g + id="id-cd602e19-e307-4934-9bf6-688302bef207"> + <symbol + overflow="visible" + id="id-7e3eb14d-ddac-4fa3-b49b-5b23808e6d11"> + <path + style="stroke:none" + d="" + id="id-26dd23b8-40e3-473a-9482-9af887c63f39" /> + </symbol> + <symbol + overflow="visible" + id="id-6c92e5a4-681b-4478-8a6e-1aa65babdef9"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-314cadac-24dd-4bfc-aa58-eda03ad91536" /> + </symbol> + <symbol + overflow="visible" + id="id-cb937a67-ffbc-45a4-8f15-68c6c2f50410"> + <path + style="stroke:none" + d="" + id="id-1ff7268a-6274-4630-9dd1-17bcef99942a" /> + </symbol> + <symbol + overflow="visible" + id="id-789237d4-74db-4d8d-9bf4-25894a7f99c0"> + <path + style="stroke:none" + d="m 3.6875,-1.140625 v -0.25 H 2.90625 V -4.5 c 0,-0.140625 0,-0.203125 -0.140625,-0.203125 -0.09375,0 -0.125,0 -0.1875,0.109375 l -2.3125,3.203125 v 0.25 h 2.0625 v 0.5625 c 0,0.25 0,0.328125 -0.578125,0.328125 H 1.5625 V 0 C 1.921875,-0.015625 2.359375,-0.03125 2.609375,-0.03125 2.875,-0.03125 3.3125,-0.015625 3.671875,0 v -0.25 h -0.1875 C 2.90625,-0.25 2.90625,-0.328125 2.90625,-0.578125 v -0.5625 z M 2.375,-3.9375 v 2.546875 H 0.53125 Z m 0,0" + id="id-a03236c6-c587-49f4-8ea9-830382d3c730" /> + </symbol> + </g> + </defs> + <g + id="id-46adb2c6-8b7f-48da-b88b-f683e7c0f4ac" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-1d3d6b1e-c406-4398-9d84-a0daadb4ec05"> + <g + transform="translate(148.712,134.765)" + id="g24758"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-dda84927-c29c-4726-81be-694dd23af394" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-388bb5e8-6daf-4c39-88d6-aff509f27241"> + <g + transform="translate(155.077,136.259)" + id="g24762"> + <path + style="stroke:none" + d="m 3.6875,-1.140625 v -0.25 H 2.90625 V -4.5 c 0,-0.140625 0,-0.203125 -0.140625,-0.203125 -0.09375,0 -0.125,0 -0.1875,0.109375 l -2.3125,3.203125 v 0.25 h 2.0625 v 0.5625 c 0,0.25 0,0.328125 -0.578125,0.328125 H 1.5625 V 0 C 1.921875,-0.015625 2.359375,-0.03125 2.609375,-0.03125 2.875,-0.03125 3.3125,-0.015625 3.671875,0 v -0.25 h -0.1875 C 2.90625,-0.25 2.90625,-0.328125 2.90625,-0.578125 v -0.5625 z M 2.375,-3.9375 v 2.546875 H 0.53125 Z m 0,0" + id="id-fd433ea1-eff7-4101-b171-e84bf6949b8d" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g27282" + transform="translate(86.834885,106.92813)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-3-6-2-60" + cx="55.726978" + cy="66.329666" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,53.164847,64.271567)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{n}_5$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-6-1-8-27"> + <defs + id="id-2daf03c9-c51e-4488-bd2a-c98f2432e115"> + <g + id="id-b478188a-876f-49bd-b98e-6895f4efc723"> + <symbol + overflow="visible" + id="id-68dbef6e-830b-4d56-8e2f-1f0a7753f80a"> + <path + style="stroke:none" + d="" + id="id-50bf5820-460d-4c1e-bd50-603ee4a921b0" /> + </symbol> + <symbol + overflow="visible" + id="id-0faba2fa-a520-45cb-a3cd-dba5db952691"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-864b1b7f-f9d0-4a31-a581-6a01cc8d66c7" /> + </symbol> + <symbol + overflow="visible" + id="id-5007b378-8f66-403c-a44a-60f2c28139da"> + <path + style="stroke:none" + d="" + id="id-fadf5266-8a39-4d4a-87cf-fe9e10947c15" /> + </symbol> + <symbol + overflow="visible" + id="id-b35389b7-05ed-4d09-b918-c800c21a236f"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-991a11f4-1697-4677-ac30-cb50ebd29149" /> + </symbol> + </g> + </defs> + <g + id="id-38730de9-b460-4b61-90b5-4671c831bb14" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-020157b9-9609-47cb-80d5-ecd64d306e7e"> + <g + transform="translate(148.712,134.765)" + id="g26259"> + <path + style="stroke:none" + d="m 1.140625,-3.546875 v 3.078125 h -0.6875 V 0 c 0.28125,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 v -0.46875 h -0.6875 v -2.078125 c 0,-1.09375 0.859375,-1.578125 1.5,-1.578125 0.328125,0 0.546875,0.203125 0.546875,0.96875 v 2.6875 H 3.625 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.25,-0.03125 0.390625,0 0.984375,0.015625 1.25,0.03125 V -0.46875 H 5.4375 v -2.578125 c 0,-1.046875 -0.53125,-1.4375 -1.53125,-1.4375 -0.953125,0 -1.484375,0.5625 -1.75,1.078125 V -4.484375 L 0.453125,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 z m 0,0" + id="id-07f3eaa9-4d87-4cbe-a579-3b8705b29a55" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-313a52af-f738-4fb4-926a-dd7797bdde1b"> + <g + transform="translate(155.077,136.259)" + id="g26263"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-2120d8a4-f44f-4d71-b4d5-4096e01ddf3e" /> + </g> + </g> + </g> + </g> + </g> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-48-7-8-7" + transform="matrix(0,0.96576732,-0.96576732,0,271.77993,41.074646)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-1-8-0-9"> + <g + transform="translate(148.712,134.765)" + id="g3573-2-9-4-3"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-9-1-29-9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-3-5-6-2"> + <g + transform="translate(153.143,134.765)" + id="g3577-9-4-1-8"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-0-9-0-3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-8-2-4-0"> + <g + transform="translate(157.565,134.765)" + id="g3581-8-5-2-1"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-5-7-22-7" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g28614" + transform="translate(21.871283,-1.3436526)"> + <g + id="g28244" + transform="translate(-26.61125,47.552324)"> + <g + id="g28058" + transform="translate(-6.3702406,-11.121029)"> + <g + id="g27177" + transform="matrix(1.4900032,0,0,1.4900032,-136.83736,-23.879228)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.280019;stop-color:#000000" + id="path833-9-6-6-7-4" + cx="165.71983" + cy="102.00683" + r="3.0310459" /> + <g + transform="matrix(0.231666,0,0,0.244577,163.09695,100.93597)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{p_2,z_2}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="0.6747439928928148" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.2380339792592646" + id="g866-26-1-2-1-8"> + <defs + id="id-6bb3ead9-cd6c-469c-afff-26f679272086"> + <g + id="id-908df72f-de8b-4f86-b543-0e9588cf71ea"> + <symbol + overflow="visible" + id="id-7a1b501f-af2a-4dbe-9b31-c0748f2a648e"> + <path + style="stroke:none" + d="" + id="id-67261c9d-77e9-4807-af69-99ebd8af83aa" /> + </symbol> + <symbol + overflow="visible" + id="id-df1b178e-9d15-4042-ac82-9f6b974bec47"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-16e0cdf6-7bb7-4fe4-a149-4671b2166f31" /> + </symbol> + <symbol + overflow="visible" + id="id-a1f1af77-8d82-465e-aefd-cd89e83d83d8"> + <path + style="stroke:none" + d="" + id="id-482aea71-3488-4c6e-88b4-d8c20b820a44" /> + </symbol> + <symbol + overflow="visible" + id="id-4cced342-06dd-456d-be37-7eb6a6de41ef"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-e3681581-c4bb-4148-8ef9-ccd2bf3dbb6f" /> + </symbol> + <symbol + overflow="visible" + id="id-cd9ebb03-4b32-4b3b-b360-f4c2842e2688"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-a71f8592-e5e6-4018-b4cb-349e953753e3" /> + </symbol> + <symbol + overflow="visible" + id="id-f22938a5-337e-4b8a-934c-d50ed9388598"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-5417b346-edf6-4199-a9cb-c98c61d0b122" /> + </symbol> + <symbol + overflow="visible" + id="id-baa3f21e-be5c-407a-a3df-ec784cc81812"> + <path + style="stroke:none" + d="" + id="id-a0cd3ff5-47d7-457b-850c-ae65445c76e0" /> + </symbol> + <symbol + overflow="visible" + id="id-58b44953-0b1e-4458-959b-8e58fc88f03e"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-344c40c8-bc3d-4556-acaa-163f06cd8f17" /> + </symbol> + </g> + </defs> + <g + id="id-0a35047f-44d6-4acc-8f7a-8f255890a07a" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-831f7fb0-6d9c-4aac-9309-422b1d4479b1"> + <g + transform="translate(148.712,134.765)" + id="g16813"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-6d043273-cc0e-461e-9f0b-14afd25b1249" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-a75e980b-0906-412d-8ac5-44a93cf62ca0"> + <g + transform="translate(154.759,136.259)" + id="g16817"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-69d1322a-b039-4dc5-9376-5a91c6d32ebb" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b5e9a90-a427-4ce2-912f-288e915bcedf"> + <g + transform="translate(158.866,137.255)" + id="g16821"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-b771975e-cd6c-4ec8-a2cc-2a0fe5f497d1" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-0fd35d3b-e27d-4b06-bc87-20229c8236c8"> + <g + transform="translate(162.754,136.259)" + id="g16825"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-881a57b4-5bb4-46b0-89e2-645ce3a85aaf" /> + </g> + <g + transform="translate(165.12,136.259)" + id="g16828"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-b43407c6-1f55-4457-a191-69076e104b54" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-257ec4eb-40c2-4cb2-9039-16c401cfd241"> + <g + transform="translate(168.927,137.255)" + id="g16832"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-704431a3-12c5-4ae1-a67e-231df6890ce4" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g27095" + transform="matrix(1.4900032,0,0,1.4900032,-78.845606,-49.089805)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.280019;stop-color:#000000" + id="path833-9-6-6-7-4-3" + cx="126.79928" + cy="108.91664" + r="3.0310459" /> + <g + transform="matrix(0.231666,0,0,0.244577,124.19595,107.84577)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{p_2,z_1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="0.6747439928928148" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.2380339792592646" + id="g866-26-1-2-1-8-3"> + <defs + id="id-27a3932f-c54e-41ce-9f99-dc9c6ccaebe2"> + <g + id="id-e53b5bdc-3c1f-4e8b-b820-301ab026db7a"> + <symbol + overflow="visible" + id="id-98159872-7f01-4ce6-851a-6f3733cd71cd"> + <path + style="stroke:none" + d="" + id="id-d15731a5-f68e-432f-babf-adc7869fcc85" /> + </symbol> + <symbol + overflow="visible" + id="id-9c5fe564-3af7-42ca-a946-365142d98464"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-ed55e7a8-6e9a-4e0d-8d92-9350106c0715" /> + </symbol> + <symbol + overflow="visible" + id="id-1305386c-b867-40ed-974b-65843b730256"> + <path + style="stroke:none" + d="" + id="id-ac488bf6-1937-4799-855f-9c8ce350519f" /> + </symbol> + <symbol + overflow="visible" + id="id-9e4e0c21-7ce5-4706-a986-af8e83e05a50"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-fb52b0da-2654-4621-a73e-d5e5dab95d6c" /> + </symbol> + <symbol + overflow="visible" + id="id-b8e623a3-c6ed-40d3-9777-65903f9c2e5d"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-b3c486bc-657c-403e-b5b3-b7eb76aaa4ac" /> + </symbol> + <symbol + overflow="visible" + id="id-cb10adbd-4487-4959-8aa7-e7b6d7a3a4ca"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-c50052a6-b2f3-4305-bc28-402f90765124" /> + </symbol> + <symbol + overflow="visible" + id="id-45a108eb-9e0c-4646-85e5-bcf4e6670f19"> + <path + style="stroke:none" + d="" + id="id-5c7ce7a6-0865-47e3-b37d-5f63c05d7b8a" /> + </symbol> + <symbol + overflow="visible" + id="id-3331477a-a7c0-489d-a742-c1afc0a8c519"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-c2bea3d0-dfaf-437a-b60a-026cefd7160d" /> + </symbol> + <symbol + overflow="visible" + id="id-e72f95ad-cb60-425c-8d74-6f88b8b5297b"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-00131303-28bf-4d82-899b-c8a64959e991" /> + </symbol> + </g> + </defs> + <g + id="id-162413c7-9d8d-4cf1-afd4-b2ce178ff5e9" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-c3517f41-de2f-44a0-a47f-f672739b3898"> + <g + transform="translate(148.712,134.765)" + id="g18403"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-a57a897a-9dfb-4c7f-b58e-49fca5b9a427" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-89b7546f-22db-49aa-be07-446713573ba7"> + <g + transform="translate(154.759,136.259)" + id="g18407"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-73c2cfa4-a25c-4ef4-ba87-ca908ba83be8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-83027bb8-9821-407c-8165-34cf67f14153"> + <g + transform="translate(158.866,137.255)" + id="g18411"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-63d251b1-dc82-4804-a58f-c90428a0e075" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-e2cb03da-7216-4b10-9a96-4da7739e68a2"> + <g + transform="translate(162.754,136.259)" + id="g18415"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-6013bb53-cd42-440b-b039-08a7c5ff9137" /> + </g> + <g + transform="translate(165.12,136.259)" + id="g18418"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-b05524b7-bfaa-403f-83d5-2c94df92ba2d" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-d0a26a9d-651d-4ba4-891e-1afd6a5f7fc0"> + <g + transform="translate(168.927,137.255)" + id="g18422"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-aa00fc60-7143-48e5-a2d2-c395683f4ae1" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-48-7-0" + transform="matrix(0,0.569333,-0.569333,0,180.13919,39.692814)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-1-8-5"> + <g + transform="translate(148.712,134.765)" + id="g3573-2-9-5"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-9-1-290" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-3-5-2"> + <g + transform="translate(153.143,134.765)" + id="g3577-9-4-8"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-0-9-3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-8-2-8"> + <g + transform="translate(157.565,134.765)" + id="g3581-8-5-04"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-5-7-0" /> + </g> + </g> + </g> + </g> + <g + id="g28151" + transform="translate(-6.2632879,5.7011351)"> + <g + id="g27976" + transform="translate(-11.60293,-11.121029)"> + <g + id="g27053" + transform="matrix(1.4900032,0,0,1.4900032,-84.679622,-37.241249)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.280019;stop-color:#000000" + id="path833-9-6-6" + cx="120.57026" + cy="100.96461" + r="3.0310459" /> + <g + transform="matrix(0.23166559,0,0,0.24457726,117.96773,99.893767)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{p_1,z_1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="0.5954852130115595" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.21007325185277634" + id="g866-26-1-2"> + <defs + id="id-b3fb168d-1b8c-4896-9470-aed341c3026a"> + <g + id="id-a01347b0-90cd-4ec9-887d-e01c8629d928"> + <symbol + overflow="visible" + id="id-e2096ad2-356a-479f-a2f9-5925f4afcaa1"> + <path + style="stroke:none" + d="" + id="id-7837e5a9-dcac-457d-90f5-19f20ee9dd8a" /> + </symbol> + <symbol + overflow="visible" + id="id-2f5bd605-362a-4503-ba8c-87e200e07c06"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-81206ab1-a3a5-46da-ba36-7c8c717e72e6" /> + </symbol> + <symbol + overflow="visible" + id="id-5e0f6526-c13a-40e8-91b2-49ba2188873f"> + <path + style="stroke:none" + d="" + id="id-3ee9a253-0b22-457c-bb8d-4226261beb62" /> + </symbol> + <symbol + overflow="visible" + id="id-24a2d54f-2c8f-44c8-8f23-2cf5b8a6b3c5"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-ff486641-3d0d-487c-8dc8-f94a741f33a6" /> + </symbol> + <symbol + overflow="visible" + id="id-1d38454e-e7de-4727-b847-a1bd5002ba1c"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-1f75dab9-f01f-4b70-ad77-0266aa16464b" /> + </symbol> + <symbol + overflow="visible" + id="id-385e44bb-6401-4a80-a1d1-c074bfab2b38"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-4092b46c-8929-491f-9ddc-bf3b5005c174" /> + </symbol> + <symbol + overflow="visible" + id="id-28fbc256-4cf8-4e21-862e-a17885055d04"> + <path + style="stroke:none" + d="" + id="id-ccd5aec0-565c-4e9c-9d74-c102587e659c" /> + </symbol> + <symbol + overflow="visible" + id="id-a7e0e44a-c9e9-4406-bf0f-6e553e16582e"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-92de082a-00d6-413f-8025-89281d3ce1e8" /> + </symbol> + </g> + </defs> + <g + id="id-02466583-a73b-45db-88a3-b2f309d65223" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-b77590cd-8bb6-4e9b-a9e9-43e2d4512f6c"> + <g + transform="translate(148.712,134.765)" + id="g13742"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-d993cba8-29d8-46ad-ae22-b50c82fa33bf" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-dbe35584-1fc4-4028-aac8-6a3b16bacd1c"> + <g + transform="translate(154.759,136.259)" + id="g13746"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-ab2422b4-af17-4ec6-860b-a60bbeb54267" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-187ba614-4d81-4901-8ff9-b5a39917b63e"> + <g + transform="translate(158.866,137.255)" + id="g13750"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-9798eacf-653e-47b2-9812-318c566cb1fc" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-f7fb31c4-44da-4e9b-a759-b0f5326d3802"> + <g + transform="translate(162.754,136.259)" + id="g13754"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-a830757a-e380-4cda-b37c-9a64027f51bf" /> + </g> + <g + transform="translate(165.12,136.259)" + id="g13757"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-dd3d1bf3-9bbd-49a0-bbe2-ca431d43b77a" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-992f9d25-4a01-4d6b-b189-46b09afcf3ab"> + <g + transform="translate(168.927,137.255)" + id="g13761"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-50883ac2-dba6-4261-96b5-dd09f4d93028" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g27137" + transform="matrix(1.4900032,0,0,1.4900032,-124.21744,-20.72751)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.280019;stop-color:#000000" + id="path833-9-6-6-7" + cx="147.10565" + cy="99.891586" + r="3.0310459" /> + <g + transform="matrix(0.231666,0,0,0.244577,144.48295,98.820767)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{p_1,z_2}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="0.6747439928928148" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.2380339792592646" + id="g866-26-1-2-1"> + <defs + id="id-7a78ca20-af1b-4c5e-ba5f-5b76430e2c48"> + <g + id="id-f5eba645-3f13-4a42-aaa6-05aa2197ffd9"> + <symbol + overflow="visible" + id="id-97ebea65-8696-4324-b4a9-ea64fea52451"> + <path + style="stroke:none" + d="" + id="id-29c62201-07d3-4d0e-9015-fc3b613afc04" /> + </symbol> + <symbol + overflow="visible" + id="id-c951b5d4-ec77-491f-8a28-531b7b771e7d"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-60f43291-5366-4a80-91e5-189861a482cc" /> + </symbol> + <symbol + overflow="visible" + id="id-9aeda8b7-4c1d-427b-81ca-afcaeb0b8c3a"> + <path + style="stroke:none" + d="" + id="id-55936e21-63a5-4ee4-bbcc-96e27570a9b1" /> + </symbol> + <symbol + overflow="visible" + id="id-f63fe2fd-13ba-4d8b-b4f3-b465c699579c"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-141e3032-0ae9-4a99-8a5e-d512025e8347" /> + </symbol> + <symbol + overflow="visible" + id="id-be5efca8-361b-4cf3-9be4-6787c3e88072"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-c9cb8af7-555f-4c51-a4fc-cc8a8cdc9a6b" /> + </symbol> + <symbol + overflow="visible" + id="id-045ed82c-5de9-42f0-a258-77adfaab19a4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-a26948c5-8f06-47e7-a1c5-3884ed945a29" /> + </symbol> + <symbol + overflow="visible" + id="id-71580648-a504-4160-a6ce-e1cb5c34587e"> + <path + style="stroke:none" + d="" + id="id-854a77bf-ed57-4290-b614-9eaa9f1904b5" /> + </symbol> + <symbol + overflow="visible" + id="id-f5c4f8e1-2994-46fe-a65b-0490dea016e9"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-e00a1bcc-3781-4b53-86ae-955bf2cf45cf" /> + </symbol> + <symbol + overflow="visible" + id="id-855ee492-4f24-4765-a992-322badd0d0ce"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-20b0356c-0ed5-4b90-b1e6-80112b710712" /> + </symbol> + </g> + </defs> + <g + id="id-08e1a23c-ed07-45f4-8f1a-e5bf8cf2ae4a" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-26f6dbc6-fe38-4197-8a1b-4e8335d53043"> + <g + transform="translate(148.712,134.765)" + id="g15266"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-ca119fa4-cd61-4432-8e59-91cc415f4d76" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-5c645b54-a853-4e56-b608-12eca7fb31a1"> + <g + transform="translate(154.759,136.259)" + id="g15270"> + <path + style="stroke:none" + d="m 0.515625,0.84375 c -0.046875,0.203125 -0.0625,0.25 -0.328125,0.25 -0.09375,0 -0.1875,0 -0.1875,0.15625 0,0.078125 0.0625,0.109375 0.09375,0.109375 0.171875,0 0.40625,-0.03125 0.59375,-0.03125 0.234375,0 0.5,0.03125 0.734375,0.03125 0.0625,0 0.140625,-0.03125 0.140625,-0.15625 0,-0.109375 -0.09375,-0.109375 -0.1875,-0.109375 -0.15625,0 -0.34375,0 -0.34375,-0.078125 0,-0.03125 0.0625,-0.21875 0.078125,-0.3125 0.09375,-0.375 0.1875,-0.75 0.265625,-1.046875 0.078125,0.140625 0.296875,0.40625 0.71875,0.40625 0.84375,0 1.78125,-0.9375 1.78125,-1.96875 0,-0.8125 -0.5625,-1.171875 -1.03125,-1.171875 -0.4375,0 -0.8125,0.296875 -1,0.5 -0.109375,-0.40625 -0.5,-0.5 -0.71875,-0.5 -0.265625,0 -0.4375,0.1875 -0.546875,0.375 -0.140625,0.234375 -0.25,0.65625 -0.25,0.703125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.015625 0.140625,-0.203125 0.109375,-0.40625 0.25,-0.75 0.515625,-0.75 0.1875,0 0.234375,0.15625 0.234375,0.34375 0,0.078125 -0.015625,0.15625 -0.03125,0.203125 z M 1.84375,-2.234375 C 2.25,-2.78125 2.59375,-2.875 2.8125,-2.875 c 0.28125,0 0.515625,0.203125 0.515625,0.671875 0,0.28125 -0.15625,1 -0.359375,1.40625 -0.1875,0.34375 -0.515625,0.671875 -0.875,0.671875 -0.5,0 -0.625,-0.53125 -0.625,-0.609375 0,-0.03125 0.015625,-0.078125 0.015625,-0.109375 z m 0,0" + id="id-01089a11-5664-4955-9cdc-8cce84f02556" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-b9301779-edfa-4884-ab29-80d9485c8345"> + <g + transform="translate(158.866,137.255)" + id="g15274"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-aac2ff88-4842-4eb2-a043-b49187211dea" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-683056a8-25ea-43ac-8abb-87507d0164eb"> + <g + transform="translate(162.754,136.259)" + id="g15278"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-55495a28-c2ef-47ab-b47c-875c30fe9b10" /> + </g> + <g + transform="translate(165.12,136.259)" + id="g15281"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-23379bdf-22c4-43d9-91eb-5f7ed839bbd8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7c9ddda4-4445-4233-a8fc-e51b40a7fcb2"> + <g + transform="translate(168.927,137.255)" + id="g15285"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-f71de9cf-41e1-4f0e-993a-d9dfc5a1d202" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-48-7-91" + transform="matrix(0,0.569333,-0.569333,0,159.79122,39.692814)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-1-8-9"> + <g + transform="translate(148.712,134.765)" + id="g3573-2-9-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-9-1-25" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-3-5-4"> + <g + transform="translate(153.143,134.765)" + id="g3577-9-4-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-0-9-9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-8-2-93"> + <g + transform="translate(157.565,134.765)" + id="g3581-8-5-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-5-7-05" /> + </g> + </g> + </g> + </g> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-48-7-8-1" + transform="matrix(0,0.96576732,-0.96576732,0,206.7428,45.622967)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-1-8-0-0"> + <g + transform="translate(148.712,134.765)" + id="g3573-2-9-4-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-9-1-29-8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-3-5-6-7"> + <g + transform="translate(153.143,134.765)" + id="g3577-9-4-1-0"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-0-9-0-8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-8-2-4-6"> + <g + transform="translate(157.565,134.765)" + id="g3581-8-5-2-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-5-7-22-4" /> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/doc/optimal_layout_report/figures/mini_node.pdf b/doc/optimal_layout_report/figures/mini_node.pdf Binary files differnew file mode 100644 index 00000000..6df8a5b2 --- /dev/null +++ b/doc/optimal_layout_report/figures/mini_node.pdf diff --git a/doc/optimal_layout_report/figures/mini_node.svg b/doc/optimal_layout_report/figures/mini_node.svg new file mode 100644 index 00000000..b044b0cd --- /dev/null +++ b/doc/optimal_layout_report/figures/mini_node.svg @@ -0,0 +1,3962 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:ns3="http://www.iki.fi/pav/software/textext/" + 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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + viewBox="0 0 210 297" + version="1.1" + id="svg8" + sodipodi:docname="mini_node.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <defs + id="defs2"> + <marker + style="overflow:visible" + id="marker29335" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotM" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path29333" /> + </marker> + <marker + style="overflow:visible" + id="marker29325" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotM" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path29323" /> + </marker> + <marker + style="overflow:visible" + id="marker29315" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotM" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path29313" /> + </marker> + <marker + style="overflow:visible" + id="marker29025" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotM" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path29023" /> + </marker> + <marker + inkscape:stockid="DistanceStart" + orient="auto" + refY="0.0" + refX="0.0" + id="marker28638" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g28636" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path28630" + d="M 0,0 L 2,0" + style="fill:#000000;stroke:#000000;stroke-width:1.15;stroke-linecap:square;stroke-opacity:1;fill-opacity:1" /> + <path + id="path28632" + d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z " + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;fill-opacity:1" /> + <path + id="path28634" + d="M 0,-4 L 0,40" + style="fill:#000000;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <marker + inkscape:stockid="DistanceStart" + orient="auto" + refY="0.0" + refX="0.0" + id="marker28613" + style="overflow:visible" + inkscape:isstock="true"> + <g + id="g28611" + style="stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1"> + <path + id="path28605" + d="M 0,0 L 2,0" + style="fill:#000000;stroke:#000000;stroke-width:1.15;stroke-linecap:square;stroke-opacity:1;fill-opacity:1" /> + <path + id="path28607" + d="M 0,0 L 13,4 L 9,0 13,-4 L 0,0 z " + style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-opacity:1;fill-opacity:1" /> + <path + id="path28609" + d="M 0,-4 L 0,40" + style="fill:#000000;stroke:#000000;stroke-width:1;stroke-linecap:square;stroke-opacity:1;fill-opacity:1" /> + </g> + </marker> + <marker + style="overflow:visible;" + id="marker5128" + 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="path5126" /> + </marker> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-5"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-5" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-6"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-2" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-1" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-7" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-9" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-3"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-6" /> + </symbol> + </g> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff-5"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253-9"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442-2" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5-2"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525-8" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-3"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-1"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-9" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-4"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-7" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-8"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-4" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-5"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-0" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-6" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-1"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-0" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-9"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-37"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-4" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-5"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-25" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-4"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-7" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-4" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-30"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-7" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-8"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-68" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-4"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-50" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-48"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-71" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-2" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-7"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-2" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-2"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-61" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-0"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-61" /> + </symbol> + </g> + <g + id="id-f665f0ad-6acc-4c65-818f-65538ae870ec-7"> + <symbol + overflow="visible" + id="id-b528872c-9c37-40cc-8f3c-4a3820527247-7"> + <path + style="stroke:none" + d="" + id="id-b9b64af8-af4d-498f-81ae-f2cb3b370123-6" /> + </symbol> + <symbol + overflow="visible" + id="id-d0bf1643-b2f5-444d-a657-4aaefc6c89d4-7"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-311ed8ac-5c86-4922-8ddd-c8730c4eb1f1-3" /> + </symbol> + <symbol + overflow="visible" + id="id-1911bbd6-3c25-4e44-b82f-6e209a9efbf4-6"> + <path + style="stroke:none" + d="" + id="id-ad0a7a76-9842-4d63-89a8-c9c17aa71c17-5" /> + </symbol> + <symbol + overflow="visible" + id="id-756b752a-2988-4d30-9ec2-f35e31955def-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-3ec43921-ba3b-4f7d-b817-b8c615e98630-3" /> + </symbol> + </g> + <g + id="id-f98b961b-31b5-4c0f-bfb1-2760408a739a-8"> + <symbol + overflow="visible" + id="id-4737c041-b95c-4219-8e7e-c562852710ea-5"> + <path + style="stroke:none" + d="" + id="id-c55a79d7-b066-4a99-ae31-2b04d4c628d0-0" /> + </symbol> + <symbol + overflow="visible" + id="id-80361aa1-942d-4c7e-b9e6-0b746bab4670-9"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-46772014-ff2f-4c4f-bd9c-546c16e45ebe-6" /> + </symbol> + <symbol + overflow="visible" + id="id-8dac91f2-ce64-4971-ad7d-d446cd8c9c1c-3"> + <path + style="stroke:none" + d="" + id="id-604b9e94-17f8-4699-8fca-83a7170f9ad1-8" /> + </symbol> + <symbol + overflow="visible" + id="id-7656f371-933a-4b40-8c22-717f88b408ac-5"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-99006318-9528-4ad3-a74f-c639da460421-6" /> + </symbol> + </g> + <g + id="id-71316add-b757-483c-8195-02b65d505b23-3"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f-4" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe-4" /> + </symbol> + </g> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff-8"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253-5"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442-7" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5-4"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525-1" /> + </symbol> + </g> + <g + id="id-e9cdbc45-842a-4299-856a-e73e8a96598a-8"> + <symbol + overflow="visible" + id="id-4c9afea4-0492-4e68-ad02-526d968a9dda-8"> + <path + style="stroke:none" + d="" + id="id-022447e8-2b8e-45a6-9421-6bb9cee18fb8-3" /> + </symbol> + <symbol + overflow="visible" + id="id-eb4351ed-2b75-4189-9149-06b49bb09d39-1"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-9793d5ee-1e50-443d-8e24-59e74686be5c-8" /> + </symbol> + <symbol + overflow="visible" + id="id-acdb85cf-666d-461d-bcc6-3145d4b5a194-9"> + <path + style="stroke:none" + d="" + id="id-974496ba-fe40-4bde-9d6c-97d29282be67-6" /> + </symbol> + <symbol + overflow="visible" + id="id-a9937435-0508-4c68-9850-f26d0b685df1-4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-9c0b6904-6368-4d8f-ad75-244ef0a02a48-3" /> + </symbol> + <symbol + overflow="visible" + id="id-4dbc287f-4992-4820-8c67-423900ff8378-3"> + <path + style="stroke:none" + d="" + id="id-d9c1862f-dbd4-4f66-9f79-92002bb14eb8-3" /> + </symbol> + <symbol + overflow="visible" + id="id-7933b5d5-7f25-482f-b30b-4ba167fd355d-8"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-7f05503e-8203-4760-910b-5af86e2658b9-6" /> + </symbol> + </g> + <g + id="id-eea55ade-e2c2-48c1-a3f1-d65d7b23c75c-3"> + <symbol + overflow="visible" + id="id-702cf98a-7855-4a56-b3b9-be3e9c89e5eb-0"> + <path + style="stroke:none" + d="" + id="id-3d08f3b9-fc2d-4c8b-a693-2f069085b4c8-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4db591ab-5b31-4921-a71b-d732a9a3a154-2"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-fb3ea09c-6864-4691-95b5-1c3c652a23e5-5" /> + </symbol> + <symbol + overflow="visible" + id="id-a45ec7ed-aed1-44f6-87e2-879d7497660b-4"> + <path + style="stroke:none" + d="" + id="id-7b47d29b-e6d8-48a4-b8b1-d1b172f6aa82-0" /> + </symbol> + <symbol + overflow="visible" + id="id-b6a5b321-fb81-4c79-8c77-e89277728de4-5"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1c892cf5-670f-4af9-9c88-c02621bf8637-9" /> + </symbol> + <symbol + overflow="visible" + id="id-ad80f9d7-8845-4991-af60-575fc64207c6-4"> + <path + style="stroke:none" + d="" + id="id-62aa46d3-6905-4658-9610-06a86458f6eb-6" /> + </symbol> + <symbol + overflow="visible" + id="id-25df116e-62f9-4a97-a0aa-f3214438cb8a-9"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-c94b97b0-0e4d-4d84-8e0b-6baff1ddbc84-2" /> + </symbol> + </g> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38-6"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed-8"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37-0" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49-2"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81-1" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2-0"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2-5" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20-1"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8-1" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3-0"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843-8" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4-5"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83-0" /> + </symbol> + </g> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38-4"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed-0"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37-6" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49-29"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81-9" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2-08"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2-1" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20-3"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8-11" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3-03"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843-4" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4-0"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83-3" /> + </symbol> + </g> + <g + id="id-3a24776d-bc3a-4985-8b28-ce4db2a93534-6"> + <symbol + overflow="visible" + id="id-600184e5-ac31-4222-b7ac-c96016dc366e-2"> + <path + style="stroke:none" + d="" + id="id-b7300ca4-41d0-48a7-a3fc-3384bcd315e5-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4a311171-3d88-48c1-a768-920db7a376f3-1"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-5d0de5d4-3de1-4182-916c-5c15cb8a379b-2" /> + </symbol> + <symbol + overflow="visible" + id="id-576666de-5b44-48e6-9102-7af5342bec6c-7"> + <path + style="stroke:none" + d="" + id="id-0e138fba-e636-4a6e-9029-bed27c4c236d-0" /> + </symbol> + <symbol + overflow="visible" + id="id-5c29be59-448a-4add-8ecc-e56873e1ddfc-9"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-6ac25928-d877-42ea-8378-021164984a12-3" /> + </symbol> + <symbol + overflow="visible" + id="id-2e32c15b-8346-4486-99eb-6ed6ac946f95-6"> + <path + style="stroke:none" + d="" + id="id-e410f52f-63d2-4f94-9516-ca72f51d8167-0" /> + </symbol> + <symbol + overflow="visible" + id="id-6fde21de-66ce-4992-8ea8-55bfd138b407-6"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-a1d7aab6-721b-4b77-952a-736ac7a8cd57-2" /> + </symbol> + </g> + <g + id="id-867ce786-433a-4da2-985c-f4cd6863ba62-8"> + <symbol + overflow="visible" + id="id-122aceff-8d13-469a-b644-0d6fd18cd894-9"> + <path + style="stroke:none" + d="" + id="id-2cd1b095-e373-4c3f-a0aa-744195118e83-7" /> + </symbol> + <symbol + overflow="visible" + id="id-c8aaab59-3861-421a-b529-5baf8e5e105a-3"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-87b88ba1-7415-4d4b-b760-06d0f7266a0e-6" /> + </symbol> + <symbol + overflow="visible" + id="id-1aa2c0b5-6103-4aa2-9d79-186256e46b98-1"> + <path + style="stroke:none" + d="" + id="id-5b56f2fc-39dd-4f93-a95e-522f63446f1d-2" /> + </symbol> + <symbol + overflow="visible" + id="id-94706a17-f2b8-4015-86aa-c8b784d104c0-9"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-8b337c95-3244-40d9-acd0-15e8cf49b85d-3" /> + </symbol> + <symbol + overflow="visible" + id="id-4b1b0546-799b-4ba0-b279-6150411621c0-1"> + <path + style="stroke:none" + d="" + id="id-76817e90-5713-4d7a-8eea-1d9bc905ce1c-9" /> + </symbol> + <symbol + overflow="visible" + id="id-8c7eaeb2-7288-4b4e-9783-6b0d54556574-4"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-96737164-dbb3-4a15-a741-8519aff719ee-7" /> + </symbol> + </g> + <g + id="id-191a8d0d-801e-4c83-808c-0c3b14a8656f-5"> + <symbol + overflow="visible" + id="id-d2dbfc85-2301-46fd-9709-ae722299c440-4"> + <path + style="stroke:none" + d="" + id="id-bd2b6b64-d0bb-4bfd-9ee5-aa0162ccd436-7" /> + </symbol> + <symbol + overflow="visible" + id="id-8f6eda09-66ab-48f3-bdc5-3268f9982c5c-6"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-c26027ed-aa0b-445f-8a04-0b1d8586f076-5" /> + </symbol> + <symbol + overflow="visible" + id="id-e82a7900-b849-40c5-9d84-f91ba760191e-6"> + <path + style="stroke:none" + d="" + id="id-bdef97d3-91b2-431e-bcba-cd1dde53c3fd-9" /> + </symbol> + <symbol + overflow="visible" + id="id-96bf7acc-5861-4f0a-a6b4-5070340b1159-3"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-306b6f47-5f0b-477a-bc27-8fd1d14b7fd4-7" /> + </symbol> + <symbol + overflow="visible" + id="id-d6f36ceb-a70c-418b-b2f8-e2c8897f2e1f-4"> + <path + style="stroke:none" + d="" + id="id-d1c9ac07-f16e-48d4-9e4b-fcdc563bd700-5" /> + </symbol> + <symbol + overflow="visible" + id="id-6bdd5aca-01cb-4249-abb6-586c8fc56b95-2"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-bd1f25a0-c96b-4dcb-a3ff-50d4a65385e0-5" /> + </symbol> + </g> + <g + id="id-71316add-b757-483c-8195-02b65d505b23-31"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b-4"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f-9" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe-0" /> + </symbol> + </g> + <g + id="id-f71ea667-3b4d-4d21-ad1f-0ecb1dd3e484-2"> + <symbol + overflow="visible" + id="id-34dc3a3d-2276-4043-8291-b700fbc2dff1-7"> + <path + style="stroke:none" + d="" + id="id-9cccc023-3ff4-416e-878b-ddafd3dd0fcd-2" /> + </symbol> + <symbol + overflow="visible" + id="id-9bd60f18-4c4d-4ddd-b181-16f7a2d92fbc-2"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-d86d8910-8168-40a7-ac81-0c33df86ab0e-6" /> + </symbol> + <symbol + overflow="visible" + id="id-d9fa921e-ba7e-461c-9b85-204169b0b876-1"> + <path + style="stroke:none" + d="" + id="id-513ff48d-b30f-41d2-a80a-6d4ac5c4bdf2-0" /> + </symbol> + <symbol + overflow="visible" + id="id-ba38b8ec-61ee-49f7-aa7b-b60f1f54849e-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-99aee4ff-3e86-462c-8595-98407ac2efa0-1" /> + </symbol> + </g> + <marker + style="overflow:visible" + id="marker4270-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7" /> + </marker> + <marker + style="overflow:visible" + id="marker4270-7-1" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-5" /> + </marker> + <marker + style="overflow:visible" + id="marker4270-7-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-7" /> + </marker> + <g + id="id-71316add-b757-483c-8195-02b65d505b23-6"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b-5"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f-6" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f-3"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe-9" /> + </symbol> + </g> + <marker + style="overflow:visible" + id="marker4270-7-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-9" /> + </marker> + <marker + style="overflow:visible" + id="marker4270-7-1-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-5-3" /> + </marker> + <marker + style="overflow:visible" + id="marker4270-7-7-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-7-5" /> + </marker> + <g + id="g9297-9"> + <symbol + overflow="visible" + id="symbol9283-8"> + <path + style="stroke:none" + d="" + id="path9281-4" /> + </symbol> + <symbol + overflow="visible" + id="symbol9287-8"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="path9285-1" /> + </symbol> + <symbol + overflow="visible" + id="symbol9291-0"> + <path + style="stroke:none" + d="" + id="path9289-3" /> + </symbol> + <symbol + overflow="visible" + id="symbol9295-0"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path9293-4" /> + </symbol> + </g> + <g + id="id-8b1176ff-fed7-4d1f-a95d-2f901e2aa6da-8"> + <symbol + overflow="visible" + id="id-50ca6f89-1cf3-46ce-b624-794728268749-5"> + <path + style="stroke:none" + d="" + id="id-3007ebfc-2e24-4566-9ce5-f9269724a7af-7" /> + </symbol> + <symbol + overflow="visible" + id="id-0f52c0e5-e7bb-4649-867b-67f9ffd54d5c-4"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-e0a286b4-1895-4457-9d47-fdd1ee2aef8e-1" /> + </symbol> + <symbol + overflow="visible" + id="id-f33a0be7-00c4-4c53-9793-ea8e553e3b04-8"> + <path + style="stroke:none" + d="" + id="id-8d37aeb7-f373-42df-8441-9e8e63c73fea-5" /> + </symbol> + <symbol + overflow="visible" + id="id-331b803c-1ca4-4d9e-ae0a-b94c0868ef22-9"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-79a21791-6cb0-4234-a47b-4bd9ede6c0b2-7" /> + </symbol> + <symbol + overflow="visible" + id="id-02613bae-770a-4a52-a47b-fef4b2c26411-5"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-afc2da90-6d57-475c-a8d5-7767638414df-3" /> + </symbol> + <symbol + overflow="visible" + id="id-1f8fea30-ac48-4986-984b-906d5fb66dce-8"> + <path + style="stroke:none" + d="" + id="id-2db340cb-906e-44a4-b69f-d20f40866d22-8" /> + </symbol> + <symbol + overflow="visible" + id="id-1159c11c-5ca0-4515-84ea-dbc2c0071b76-3"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-47e8b9e4-606d-4d63-adc7-5bbddf20c9ca-1" /> + </symbol> + <symbol + overflow="visible" + id="id-d2a45eb8-4bc1-4f97-847e-131cb18000c7-8"> + <path + style="stroke:none" + d="" + id="id-b7d83c78-2ab3-430e-8d1b-ea63a6e16936-9" /> + </symbol> + <symbol + overflow="visible" + id="id-c2d57daa-bbd4-45c0-8d46-e646f76639f4-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-530c2961-ca82-486c-a6db-d81ce2884279-4" /> + </symbol> + </g> + <g + id="id-945a6e37-a95b-44e9-82b7-2ac83c7d6d9c-2"> + <symbol + overflow="visible" + id="id-5413b550-28b0-4f27-b0e0-efb018e9abb1-5"> + <path + style="stroke:none" + d="" + id="id-a8d13d71-db36-4835-9549-9f3622025a5e-4" /> + </symbol> + <symbol + overflow="visible" + id="id-12cf6e23-f040-4a9f-99b8-10631bfdf663-0"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-20759e13-f2c8-45c1-b35a-f43212bfcee3-5" /> + </symbol> + <symbol + overflow="visible" + id="id-591b00bb-e13d-4d74-8c6c-fd8f6ea3db65-9"> + <path + style="stroke:none" + d="" + id="id-3c0c7864-f3cb-4470-8f6b-48d3abc32653-4" /> + </symbol> + <symbol + overflow="visible" + id="id-bef4c849-1488-4ffd-88f3-58fc74337fa5-6"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-e2e9ead5-8b0c-48eb-8713-a9278af03c05-9" /> + </symbol> + <symbol + overflow="visible" + id="id-bcb3bf03-198d-41ab-b887-5d49a6fec79b-2"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-9a1955e3-cb8d-48d9-96d1-9989ce648fff-2" /> + </symbol> + <symbol + overflow="visible" + id="id-e586bbb8-1d83-4c06-b2e2-870f9006d650-4"> + <path + style="stroke:none" + d="" + id="id-92894d48-f372-4004-9679-16918abac50d-7" /> + </symbol> + <symbol + overflow="visible" + id="id-f066668e-909e-4312-80d1-04749c262cb4-7"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-973279b7-cd89-4f57-a650-ba85eb525e1d-5" /> + </symbol> + <symbol + overflow="visible" + id="id-9423f50a-7bbb-437e-a3ab-686b0a1c420d-4"> + <path + style="stroke:none" + d="" + id="id-3a813a52-2d44-41db-ac8c-e6155f5cb9b9-8" /> + </symbol> + <symbol + overflow="visible" + id="id-b0386dcd-1db9-41fd-a360-42e59588bfe9-1"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-918e55b9-f187-4747-989f-66efac9d6872-2" /> + </symbol> + </g> + <g + id="id-58309c68-7535-4da9-8dc6-1b52eaa73e19-8"> + <symbol + overflow="visible" + id="id-29067988-3659-4747-86bb-6cc1b8b5c91e-6"> + <path + style="stroke:none" + d="" + id="id-80cc09ad-f6c7-4d0e-b4a0-0dd52e7cf885-2" /> + </symbol> + <symbol + overflow="visible" + id="id-213f7785-a032-4538-9e90-29c9ecd79a4a-8"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-b0ad5f67-012c-4eb4-9df9-7915797561d9-4" /> + </symbol> + <symbol + overflow="visible" + id="id-80c58fdf-7f87-456a-90d4-ebd25fde26f8-7"> + <path + style="stroke:none" + d="" + id="id-74527db0-d834-4b21-a3a3-787ef4f1584f-2" /> + </symbol> + <symbol + overflow="visible" + id="id-aad71265-bf77-4f0f-8166-b3b625e9d750-4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1c3fa1ea-dfa0-42fc-92ce-a84f36b57ca7-0" /> + </symbol> + <symbol + overflow="visible" + id="id-e1479489-482e-49ef-a82f-7e97279af4e1-6"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-5e3cb470-a9d3-4ef6-a007-ed9d6b5de59b-2" /> + </symbol> + <symbol + overflow="visible" + id="id-5366a9cc-cff2-4e31-9a8f-998905cec9a9-9"> + <path + style="stroke:none" + d="" + id="id-46c1bd63-2d42-4a96-9494-d4a8f64c983d-9" /> + </symbol> + <symbol + overflow="visible" + id="id-aa6ec137-fdf3-4e1a-a9aa-2340ca00987b-0"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-b880bd61-8e28-44ff-b1b7-319821d36654-8" /> + </symbol> + <symbol + overflow="visible" + id="id-9f4b5d89-4f82-443e-aeab-44850820982d-1"> + <path + style="stroke:none" + d="" + id="id-d65784a0-aa5d-47b4-bc0b-6bafea1755bf-3" /> + </symbol> + <symbol + overflow="visible" + id="id-042c7792-5675-40b4-a5a6-74b1df22e176-1"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-0247951f-4384-4d49-ad6d-5360e43ffcae-1" /> + </symbol> + </g> + <g + id="g5405-0"> + <symbol + overflow="visible" + id="symbol5399-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path5397-4" /> + </symbol> + <symbol + overflow="visible" + id="symbol5403-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="path5401-2" /> + </symbol> + </g> + <g + id="id-f71ea667-3b4d-4d21-ad1f-0ecb1dd3e484-1"> + <symbol + overflow="visible" + id="id-34dc3a3d-2276-4043-8291-b700fbc2dff1-5"> + <path + style="stroke:none" + d="" + id="id-9cccc023-3ff4-416e-878b-ddafd3dd0fcd-9" /> + </symbol> + <symbol + overflow="visible" + id="id-9bd60f18-4c4d-4ddd-b181-16f7a2d92fbc-9"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-d86d8910-8168-40a7-ac81-0c33df86ab0e-1" /> + </symbol> + <symbol + overflow="visible" + id="id-d9fa921e-ba7e-461c-9b85-204169b0b876-4"> + <path + style="stroke:none" + d="" + id="id-513ff48d-b30f-41d2-a80a-6d4ac5c4bdf2-9" /> + </symbol> + <symbol + overflow="visible" + id="id-ba38b8ec-61ee-49f7-aa7b-b60f1f54849e-1"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-99aee4ff-3e86-462c-8595-98407ac2efa0-0" /> + </symbol> + </g> + <g + id="id-3dd9cb25-d8bd-4dc2-8273-d7c70d917f95-6"> + <symbol + overflow="visible" + id="id-d8a0ff0d-809d-4bcd-a58a-2bfbeec9c60b-1"> + <path + style="stroke:none" + d="" + id="id-3c760ccd-e80e-4aff-b97d-43dfe4ec5786-0" /> + </symbol> + <symbol + overflow="visible" + id="id-11720994-ac59-4f48-b2ec-903fd008e9d7-4"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0e848706-d066-42a0-8094-73a654a15a4b-2" /> + </symbol> + <symbol + overflow="visible" + id="id-e3c71763-ea79-4aae-a08c-cbf6475bf644-2"> + <path + style="stroke:none" + d="" + id="id-8ede1f05-b6ab-4daa-8c2a-61b53065ee5e-2" /> + </symbol> + <symbol + overflow="visible" + id="id-38128339-202c-45b3-8c2b-93e27d8e0313-0"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c5c824f9-8bf0-4998-a405-4a2b8257fc16-5" /> + </symbol> + <symbol + overflow="visible" + id="id-4308d98e-09ef-4d6f-ac9e-2e47ab175120-5"> + <path + style="stroke:none" + d="" + id="id-252f59a8-9cf1-4882-9572-5ca5c2c28b8a-2" /> + </symbol> + <symbol + overflow="visible" + id="id-d1ff7ffe-4bae-494f-b96b-420a591d1181-9"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-67bf598d-87db-40b4-a708-8d12284c270f-0" /> + </symbol> + </g> + <g + id="id-3dd9cb25-d8bd-4dc2-8273-d7c70d917f95-4"> + <symbol + overflow="visible" + id="id-d8a0ff0d-809d-4bcd-a58a-2bfbeec9c60b-9"> + <path + style="stroke:none" + d="" + id="id-3c760ccd-e80e-4aff-b97d-43dfe4ec5786-9" /> + </symbol> + <symbol + overflow="visible" + id="id-11720994-ac59-4f48-b2ec-903fd008e9d7-3"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0e848706-d066-42a0-8094-73a654a15a4b-6" /> + </symbol> + <symbol + overflow="visible" + id="id-e3c71763-ea79-4aae-a08c-cbf6475bf644-0"> + <path + style="stroke:none" + d="" + id="id-8ede1f05-b6ab-4daa-8c2a-61b53065ee5e-5" /> + </symbol> + <symbol + overflow="visible" + id="id-38128339-202c-45b3-8c2b-93e27d8e0313-02"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c5c824f9-8bf0-4998-a405-4a2b8257fc16-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4308d98e-09ef-4d6f-ac9e-2e47ab175120-4"> + <path + style="stroke:none" + d="" + id="id-252f59a8-9cf1-4882-9572-5ca5c2c28b8a-3" /> + </symbol> + <symbol + overflow="visible" + id="id-d1ff7ffe-4bae-494f-b96b-420a591d1181-5"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-67bf598d-87db-40b4-a708-8d12284c270f-1" /> + </symbol> + </g> + <g + id="id-3dd9cb25-d8bd-4dc2-8273-d7c70d917f95-9"> + <symbol + overflow="visible" + id="id-d8a0ff0d-809d-4bcd-a58a-2bfbeec9c60b-2"> + <path + style="stroke:none" + d="" + id="id-3c760ccd-e80e-4aff-b97d-43dfe4ec5786-8" /> + </symbol> + <symbol + overflow="visible" + id="id-11720994-ac59-4f48-b2ec-903fd008e9d7-8"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0e848706-d066-42a0-8094-73a654a15a4b-8" /> + </symbol> + <symbol + overflow="visible" + id="id-e3c71763-ea79-4aae-a08c-cbf6475bf644-6"> + <path + style="stroke:none" + d="" + id="id-8ede1f05-b6ab-4daa-8c2a-61b53065ee5e-8" /> + </symbol> + <symbol + overflow="visible" + id="id-38128339-202c-45b3-8c2b-93e27d8e0313-3"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c5c824f9-8bf0-4998-a405-4a2b8257fc16-8" /> + </symbol> + <symbol + overflow="visible" + id="id-4308d98e-09ef-4d6f-ac9e-2e47ab175120-3"> + <path + style="stroke:none" + d="" + id="id-252f59a8-9cf1-4882-9572-5ca5c2c28b8a-33" /> + </symbol> + <symbol + overflow="visible" + id="id-d1ff7ffe-4bae-494f-b96b-420a591d1181-8"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-67bf598d-87db-40b4-a708-8d12284c270f-04" /> + </symbol> + </g> + <g + id="id-3dd9cb25-d8bd-4dc2-8273-d7c70d917f95-2"> + <symbol + overflow="visible" + id="id-d8a0ff0d-809d-4bcd-a58a-2bfbeec9c60b-6"> + <path + style="stroke:none" + d="" + id="id-3c760ccd-e80e-4aff-b97d-43dfe4ec5786-5" /> + </symbol> + <symbol + overflow="visible" + id="id-11720994-ac59-4f48-b2ec-903fd008e9d7-2"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0e848706-d066-42a0-8094-73a654a15a4b-65" /> + </symbol> + <symbol + overflow="visible" + id="id-e3c71763-ea79-4aae-a08c-cbf6475bf644-8"> + <path + style="stroke:none" + d="" + id="id-8ede1f05-b6ab-4daa-8c2a-61b53065ee5e-7" /> + </symbol> + <symbol + overflow="visible" + id="id-38128339-202c-45b3-8c2b-93e27d8e0313-9"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c5c824f9-8bf0-4998-a405-4a2b8257fc16-6" /> + </symbol> + <symbol + overflow="visible" + id="id-4308d98e-09ef-4d6f-ac9e-2e47ab175120-0"> + <path + style="stroke:none" + d="" + id="id-252f59a8-9cf1-4882-9572-5ca5c2c28b8a-4" /> + </symbol> + <symbol + overflow="visible" + id="id-d1ff7ffe-4bae-494f-b96b-420a591d1181-1"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-67bf598d-87db-40b4-a708-8d12284c270f-048" /> + </symbol> + </g> + <defs + id="id-2d87e1eb-bc7d-4d81-9582-86bf8727c9c8-3"> + <g + id="g9835"> + <symbol + overflow="visible" + id="symbol9829"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path9827" /> + </symbol> + <symbol + overflow="visible" + id="symbol9833"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="path9831" /> + </symbol> + </g> + </defs> + <marker + style="overflow:visible" + id="marker4270-7-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-99" /> + </marker> + <marker + style="overflow:visible" + id="marker4270-7-4-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-99-9" /> + </marker> + <marker + style="overflow:visible" + id="marker4270-7-4-5-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-99-9-7" /> + </marker> + <marker + style="overflow:visible" + id="marker4270-7-4-5-5-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268-7-99-9-7-1" /> + </marker> + <g + id="id-b15114a7-ca09-4a21-ad11-725124638424-9"> + <symbol + overflow="visible" + id="id-310b4048-7c0e-46eb-bfd0-a76166008027-6"> + <path + style="stroke:none" + d="" + id="id-d6720d2c-5774-4364-8d54-58341c455226-2" /> + </symbol> + <symbol + overflow="visible" + id="id-380331dc-88ab-482c-b934-cf4ac9c4ff54-1"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-3a19059e-f020-4a72-9f12-a604927b3cd3-2" /> + </symbol> + <symbol + overflow="visible" + id="id-d8429f02-44d9-4eea-baa5-885d8a467e29-0"> + <path + style="stroke:none" + d="" + id="id-2ca3837e-ef16-4602-a5db-d5f0c7eef876-7" /> + </symbol> + <symbol + overflow="visible" + id="id-e6901dc5-9917-4fb0-a181-aa79499a7893-3"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-3d07bff7-8536-4d05-9265-e222d0ded5de-1" /> + </symbol> + <symbol + overflow="visible" + id="id-d654728c-9737-434e-9366-43d67bc9135b-1"> + <path + style="stroke:none" + d="" + id="id-2cb602a0-1505-4afe-9908-6b3a2a7e619e-9" /> + </symbol> + <symbol + overflow="visible" + id="id-364e5767-a7b9-4262-a86d-4fa669215069-0"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-92389ee1-b7ce-499d-b00c-189d8877af98-5" /> + </symbol> + </g> + <g + id="id-eb52ad1a-98d6-4508-8c52-d822e8214559-2"> + <symbol + overflow="visible" + id="id-90e0f0c5-a5dc-4c99-be01-17ce75139c28-6"> + <path + style="stroke:none" + d="" + id="id-0aab7f5a-cce1-4a3b-a8f8-a6fa9bdb2442-0" /> + </symbol> + <symbol + overflow="visible" + id="id-350d3c26-9d68-4293-9402-db84f99a56a0-6"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-9989a360-a08e-439e-b73c-db08ffd06058-6" /> + </symbol> + <symbol + overflow="visible" + id="id-6218964a-9604-4244-bd4b-9454bf0bb4b0-4"> + <path + style="stroke:none" + d="" + id="id-d9651d3c-227d-4426-8b25-41f32650ce85-6" /> + </symbol> + <symbol + overflow="visible" + id="id-71be12ed-4366-49ab-b52d-f913ea29ee61-2"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-c69d8307-964b-4a94-852d-813bbd63d286-8" /> + </symbol> + </g> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.8762584" + inkscape:cx="565.87924" + inkscape:cy="219.4027" + inkscape:document-units="mm" + inkscape:current-layer="g24410" + inkscape:document-rotation="0" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="992" + inkscape:window-x="0" + inkscape:window-y="32" + inkscape:window-maximized="1" /> + <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"> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-48" + transform="matrix(0,0.569333,-0.569333,0,204.88008,-31.590907)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-1"> + <g + transform="translate(148.712,134.765)" + id="g3573-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-3"> + <g + transform="translate(153.143,134.765)" + id="g3577-9"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-0" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-8"> + <g + transform="translate(157.565,134.765)" + id="g3581-8"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-5" /> + </g> + </g> + </g> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-48-7" + transform="matrix(0,0.569333,-0.569333,0,242.65143,-1.4306635)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-1-8"> + <g + transform="translate(148.712,134.765)" + id="g3573-2-9"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-9-1" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-3-5"> + <g + transform="translate(153.143,134.765)" + id="g3577-9-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-0-9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-8-2"> + <g + transform="translate(157.565,134.765)" + id="g3581-8-5"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-5-7" /> + </g> + </g> + </g> + <g + id="g24410" + transform="translate(73.769425,-14.640859)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-76" + cx="92.458305" + cy="41.815311" + r="4.4921422" /> + <g + transform="matrix(0.515009,0,0,0.543714,89.2473,39.6505)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{u}_{v_1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13"> + <defs + id="id-b780726d-e34e-4d25-81b3-f183d1f09d35"> + <g + id="id-b15114a7-ca09-4a21-ad11-725124638424"> + <symbol + overflow="visible" + id="id-310b4048-7c0e-46eb-bfd0-a76166008027"> + <path + style="stroke:none" + d="" + id="id-d6720d2c-5774-4364-8d54-58341c455226" /> + </symbol> + <symbol + overflow="visible" + id="id-380331dc-88ab-482c-b934-cf4ac9c4ff54"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-3a19059e-f020-4a72-9f12-a604927b3cd3" /> + </symbol> + <symbol + overflow="visible" + id="id-d8429f02-44d9-4eea-baa5-885d8a467e29"> + <path + style="stroke:none" + d="" + id="id-2ca3837e-ef16-4602-a5db-d5f0c7eef876" /> + </symbol> + <symbol + overflow="visible" + id="id-e6901dc5-9917-4fb0-a181-aa79499a7893"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-3d07bff7-8536-4d05-9265-e222d0ded5de" /> + </symbol> + <symbol + overflow="visible" + id="id-d654728c-9737-434e-9366-43d67bc9135b"> + <path + style="stroke:none" + d="" + id="id-2cb602a0-1505-4afe-9908-6b3a2a7e619e" /> + </symbol> + <symbol + overflow="visible" + id="id-364e5767-a7b9-4262-a86d-4fa669215069"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-92389ee1-b7ce-499d-b00c-189d8877af98" /> + </symbol> + </g> + </defs> + <g + id="id-8be54d3b-d8f5-48f8-af23-3a13605c56b8" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-0883fc9e-49d1-4539-8d95-7e67c8f3fb4c"> + <g + transform="translate(148.712,134.765)" + id="g19864"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-e6d691c4-ff51-4af9-b89d-5151dc65963d" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-bf0fde30-a752-4026-bff5-0f557ff3ccd1"> + <g + transform="translate(155.077,136.259)" + id="g19868"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-da164201-d337-42ed-8e0d-1bec40c3f63b" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-47c329ac-2bd8-4dc5-a838-0177b0f30867"> + <g + transform="translate(159.062,137.255)" + id="g19872"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-a5908090-d1e3-4f5a-ad79-dfcf6bce4a49" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.515009,0,0,0.543714,102.29442,52.084138)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$z_1$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-0"> + <defs + id="id-a11443ae-5680-4fd2-998c-03aac8884898"> + <g + id="id-eb52ad1a-98d6-4508-8c52-d822e8214559"> + <symbol + overflow="visible" + id="id-90e0f0c5-a5dc-4c99-be01-17ce75139c28"> + <path + style="stroke:none" + d="" + id="id-0aab7f5a-cce1-4a3b-a8f8-a6fa9bdb2442" /> + </symbol> + <symbol + overflow="visible" + id="id-350d3c26-9d68-4293-9402-db84f99a56a0"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-9989a360-a08e-439e-b73c-db08ffd06058" /> + </symbol> + <symbol + overflow="visible" + id="id-6218964a-9604-4244-bd4b-9454bf0bb4b0"> + <path + style="stroke:none" + d="" + id="id-d9651d3c-227d-4426-8b25-41f32650ce85" /> + </symbol> + <symbol + overflow="visible" + id="id-71be12ed-4366-49ab-b52d-f913ea29ee61"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-c69d8307-964b-4a94-852d-813bbd63d286" /> + </symbol> + </g> + </defs> + <g + id="id-670fa564-d04f-49e4-89d3-f292cee9d0dd" + transform="translate(-149.134,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-629bac1d-d732-45ea-9e2f-8035df467324"> + <g + transform="translate(148.712,134.765)" + id="g26730"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-0bc4890f-d8a5-4415-b063-687e79c23127" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-42c9571a-ce67-496a-8929-1d871d953abf"> + <g + transform="translate(153.345,136.259)" + id="g26734"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-17fc3d6a-f9b2-4d2c-bb1f-80dcfcdbb3f8" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.515009,0,0,0.543714,102.23809,76.905914)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$z_2$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-0-5"> + <defs + id="id-a79d82ac-8aaf-416e-a36b-571e15cb9710"> + <g + id="id-022b9cfd-0373-492a-9e99-748252aaa67d"> + <symbol + overflow="visible" + id="id-387bff1c-c94c-49ed-8e60-e86ce176dbee"> + <path + style="stroke:none" + d="" + id="id-b0e6d18f-27b4-4447-8743-4d8edc538653" /> + </symbol> + <symbol + overflow="visible" + id="id-b7a7550f-7c6c-466b-bc14-15c8477d9fc6"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-12659a36-2fd8-474b-8bbf-c36049526c5b" /> + </symbol> + <symbol + overflow="visible" + id="id-20a34618-31be-42e1-994d-95b52dc1001c"> + <path + style="stroke:none" + d="" + id="id-aa3160c6-d31a-4183-aecc-68c90f87bc71" /> + </symbol> + <symbol + overflow="visible" + id="id-f07fb4a5-caca-4471-bfad-9331d7c6ffb6"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-59300b1b-d873-443e-9730-404955e857fc" /> + </symbol> + </g> + </defs> + <g + id="id-fc18a75c-6e05-429c-8c54-023b26326500" + transform="translate(-149.134,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-d45b489c-5200-4750-9613-9332429336f7"> + <g + transform="translate(148.712,134.765)" + id="g27756"> + <path + style="stroke:none" + d="m 1.328125,-0.828125 c 0.53125,-0.578125 0.828125,-0.828125 1.1875,-1.140625 0,0 0.609375,-0.53125 0.96875,-0.890625 C 4.4375,-3.78125 4.65625,-4.265625 4.65625,-4.3125 c 0,-0.09375 -0.09375,-0.09375 -0.109375,-0.09375 -0.078125,0 -0.09375,0.015625 -0.15625,0.109375 -0.296875,0.484375 -0.5,0.640625 -0.734375,0.640625 -0.25,0 -0.359375,-0.15625 -0.515625,-0.328125 -0.1875,-0.21875 -0.359375,-0.421875 -0.6875,-0.421875 -0.75,0 -1.203125,0.921875 -1.203125,1.140625 0,0.046875 0.03125,0.109375 0.109375,0.109375 0.09375,0 0.109375,-0.046875 0.140625,-0.109375 0.1875,-0.46875 0.765625,-0.46875 0.84375,-0.46875 0.203125,0 0.390625,0.0625 0.625,0.140625 0.40625,0.15625 0.515625,0.15625 0.765625,0.15625 -0.359375,0.421875 -1.1875,1.140625 -1.375,1.296875 l -0.90625,0.84375 C 0.78125,-0.625 0.421875,-0.0625 0.421875,0.015625 c 0,0.09375 0.109375,0.09375 0.125,0.09375 0.078125,0 0.09375,-0.015625 0.15625,-0.125 0.234375,-0.359375 0.53125,-0.625 0.859375,-0.625 0.21875,0 0.328125,0.09375 0.578125,0.375 0.15625,0.21875 0.34375,0.375 0.625,0.375 1,0 1.578125,-1.265625 1.578125,-1.53125 0,-0.046875 -0.046875,-0.109375 -0.125,-0.109375 -0.09375,0 -0.109375,0.0625 -0.140625,0.140625 C 3.84375,-0.75 3.203125,-0.5625 2.875,-0.5625 c -0.1875,0 -0.375,-0.0625 -0.578125,-0.125 -0.34375,-0.125 -0.5,-0.171875 -0.703125,-0.171875 -0.015625,0 -0.171875,0 -0.265625,0.03125 z m 0,0" + id="id-add79b81-133b-42ad-aa75-a25f6b4a6c85" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-61dde61b-bcd9-43d2-94f3-2cf108756810"> + <g + transform="translate(153.345,136.259)" + id="g27760"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-c4384b96-920c-4538-bd3d-d508259ea6f0" /> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker29315);marker-end:url(#marker29335)" + d="M 99.761563,38.217555 V 69.706602" + id="path28223" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.265;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker29025);marker-end:url(#marker29325)" + d="m 99.757563,74.368522 0.008,8.438784" + id="path28225" /> + </g> + <g + id="g24438" + transform="translate(74.777741,-17.574269)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-76-4" + cx="91.449989" + cy="56.940018" + r="4.4921422" /> + <g + transform="matrix(0.515009,0,0,0.543714,88.1947,54.7752)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{u}_{v_2}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-2"> + <defs + id="id-8f11701c-4dab-4a5f-8771-999cfd5ed1fa"> + <g + id="id-30510b08-7734-4fd5-b159-b76ecb33013b"> + <symbol + overflow="visible" + id="id-2961f993-f97b-4ee1-9d2f-5268c11398a0"> + <path + style="stroke:none" + d="" + id="id-ddf725b8-080b-49fd-bfd7-bd3ecaee28cc" /> + </symbol> + <symbol + overflow="visible" + id="id-f3b1f3bc-1567-42bf-b5e6-26d5707ffbb8"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-2eebffef-347d-420c-812f-b0a4af4881ed" /> + </symbol> + <symbol + overflow="visible" + id="id-aa26cb96-498f-4cd2-b409-7c60eda19c5f"> + <path + style="stroke:none" + d="" + id="id-5cefe848-a7d1-4adf-afda-f08ed966326b" /> + </symbol> + <symbol + overflow="visible" + id="id-1d375acc-dadc-4eea-b2e0-58c13c3afe1d"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-035d9138-4d06-4565-bd96-bfd78304ad71" /> + </symbol> + <symbol + overflow="visible" + id="id-6d207ea7-9e4f-4b0d-8420-d74f8a0bb8d7"> + <path + style="stroke:none" + d="" + id="id-ee6d7794-8a5b-4588-938d-04d7a0ae0d1d" /> + </symbol> + <symbol + overflow="visible" + id="id-ab2d3123-45ef-4677-9517-26a71b3485ba"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-3308d970-4d64-4ce6-b220-bb6bd6165752" /> + </symbol> + </g> + </defs> + <g + id="id-34acc751-e11b-4cc7-9911-4d0ae3207020" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-d65e3a5b-054f-48a2-8bc0-aff334ca7257"> + <g + transform="translate(148.712,134.765)" + id="g20903"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-131833f1-3651-4a3b-b0a4-5edeb079b2c3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-2f9115db-d780-4dd2-b4e9-bd9c6d7f86c6"> + <g + transform="translate(155.077,136.259)" + id="g20907"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-c86d5ab8-8d94-4c26-8883-5ef06c407760" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-4fb98a21-51a7-40f7-87de-49ce4247f04c"> + <g + transform="translate(159.062,137.255)" + id="g20911"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-0672656c-a479-499c-895c-2b9c4de89147" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g24466" + transform="translate(74.921784,-18.058922)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-76-6" + cx="91.305946" + cy="69.615959" + r="4.4921422" /> + <g + transform="matrix(0.515009,0,0,0.543714,88.0385,67.4215)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{u}_{v_3}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-25"> + <defs + id="id-9f02248e-2188-4291-b6ed-d1237ae0613c"> + <g + id="id-2a0f0ca1-6181-4403-907a-55c0dccd34af"> + <symbol + overflow="visible" + id="id-16ed2af1-d7db-481f-9b05-966c51297bd5"> + <path + style="stroke:none" + d="" + id="id-9ff7e98d-8e7a-47c8-9ab2-9af716d6dc84" /> + </symbol> + <symbol + overflow="visible" + id="id-91ea47fb-f870-4fc8-9085-82eb0df482ad"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-0a027810-8442-4623-bfb9-0856dc5adfa6" /> + </symbol> + <symbol + overflow="visible" + id="id-96c04f4c-aa14-42d2-adbb-4db161208b11"> + <path + style="stroke:none" + d="" + id="id-979250eb-df1c-415d-b93c-a4c6b6771a22" /> + </symbol> + <symbol + overflow="visible" + id="id-751fcaa7-ab19-4de7-b8bf-6bed03650313"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-af7f9a5b-00d0-40fe-8192-1d4c5d1bf56c" /> + </symbol> + <symbol + overflow="visible" + id="id-b3166a87-57ee-4a25-a359-e97cb3f1886a"> + <path + style="stroke:none" + d="" + id="id-82137dbf-838e-4e9a-9cd1-d2f5d9b1d580" /> + </symbol> + <symbol + overflow="visible" + id="id-dfaf2751-7388-4f62-84a4-bf7d7f46b0f7"> + <path + style="stroke:none" + d="m 1.640625,-1.65625 c 0.46875,0 0.765625,0.296875 0.765625,0.78125 0,0.515625 -0.3125,0.78125 -0.75,0.78125 -0.0625,0 -0.65625,0 -0.90625,-0.265625 0.203125,-0.03125 0.265625,-0.171875 0.265625,-0.296875 0,-0.1875 -0.140625,-0.3125 -0.3125,-0.3125 -0.15625,0 -0.296875,0.109375 -0.296875,0.328125 0,0.515625 0.578125,0.75 1.265625,0.75 0.8125,0 1.3125,-0.5 1.3125,-0.984375 0,-0.40625 -0.359375,-0.75 -0.921875,-0.875 0.59375,-0.203125 0.75,-0.578125 0.75,-0.859375 0,-0.40625 -0.5,-0.703125 -1.125,-0.703125 -0.625,0 -1.109375,0.25 -1.109375,0.703125 0,0.234375 0.1875,0.296875 0.28125,0.296875 0.140625,0 0.28125,-0.109375 0.28125,-0.296875 0,-0.109375 -0.0625,-0.25 -0.234375,-0.28125 C 1.109375,-3.109375 1.5625,-3.125 1.671875,-3.125 c 0.359375,0 0.609375,0.171875 0.609375,0.515625 0,0.296875 -0.1875,0.75 -0.703125,0.78125 -0.140625,0 -0.15625,0 -0.296875,0.015625 -0.046875,0 -0.109375,0 -0.109375,0.078125 0,0.078125 0.046875,0.078125 0.140625,0.078125 z m 0,0" + id="id-e87bb530-ca7b-4027-9427-5733eedc0af8" /> + </symbol> + </g> + </defs> + <g + id="id-5c6360ab-bb5f-458e-b46b-374cfe9c0d43" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-31dae273-b1e6-4edc-9dab-8e65beed875f"> + <g + transform="translate(148.712,134.765)" + id="g21942"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-a750a409-cf86-4a94-b2b3-ffcba528d108" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-6fa762a8-1197-4314-b407-c3d6069b3b3e"> + <g + transform="translate(155.077,136.259)" + id="g21946"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-366983cd-0011-4995-ad06-52d3675ba25d" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-5c841653-2569-48da-b085-6b9264aa1c85"> + <g + transform="translate(159.062,137.255)" + id="g21950"> + <path + style="stroke:none" + d="m 1.640625,-1.65625 c 0.46875,0 0.765625,0.296875 0.765625,0.78125 0,0.515625 -0.3125,0.78125 -0.75,0.78125 -0.0625,0 -0.65625,0 -0.90625,-0.265625 0.203125,-0.03125 0.265625,-0.171875 0.265625,-0.296875 0,-0.1875 -0.140625,-0.3125 -0.3125,-0.3125 -0.15625,0 -0.296875,0.109375 -0.296875,0.328125 0,0.515625 0.578125,0.75 1.265625,0.75 0.8125,0 1.3125,-0.5 1.3125,-0.984375 0,-0.40625 -0.359375,-0.75 -0.921875,-0.875 0.59375,-0.203125 0.75,-0.578125 0.75,-0.859375 0,-0.40625 -0.5,-0.703125 -1.125,-0.703125 -0.625,0 -1.109375,0.25 -1.109375,0.703125 0,0.234375 0.1875,0.296875 0.28125,0.296875 0.140625,0 0.28125,-0.109375 0.28125,-0.296875 0,-0.109375 -0.0625,-0.25 -0.234375,-0.28125 C 1.109375,-3.109375 1.5625,-3.125 1.671875,-3.125 c 0.359375,0 0.609375,0.171875 0.609375,0.515625 0,0.296875 -0.1875,0.75 -0.703125,0.78125 -0.140625,0 -0.15625,0 -0.296875,0.015625 -0.046875,0 -0.109375,0 -0.109375,0.078125 0,0.078125 0.046875,0.078125 0.140625,0.078125 z m 0,0" + id="id-7d6d95fd-e83c-4d73-96ef-0aaded6d077d" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g24494" + transform="translate(74.921784,-19.695938)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-76-41" + cx="91.305946" + cy="83.444267" + r="4.4921422" /> + <g + transform="matrix(0.515009,0,0,0.543714,88.0144,81.2795)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{u}_{v_4}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-28"> + <defs + id="id-d449062f-ff31-4600-9bef-99b8e1d648c4"> + <g + id="id-a89101cb-965b-4798-941e-b7efa0bd6152"> + <symbol + overflow="visible" + id="id-3109833d-4333-4e93-8fdd-1fffbb006aa2"> + <path + style="stroke:none" + d="" + id="id-9ddb5159-265d-4c11-a0f0-e5678854c622" /> + </symbol> + <symbol + overflow="visible" + id="id-f8a7b5f9-a4b6-429d-b064-2cb73707a350"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-957a0772-f252-480b-96bc-ac54bb88517a" /> + </symbol> + <symbol + overflow="visible" + id="id-f6409c77-91f6-42b9-8605-81748501bcb8"> + <path + style="stroke:none" + d="" + id="id-a310ae88-53bb-47f8-83ca-9a0edc0bc664" /> + </symbol> + <symbol + overflow="visible" + id="id-205e4939-3a4e-458c-9820-ada1ab8369ed"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-5b42ea04-5023-4abd-b41b-67f4ec4881d7" /> + </symbol> + <symbol + overflow="visible" + id="id-aebef0f5-8ed0-4e3d-83ee-ff49c8514585"> + <path + style="stroke:none" + d="" + id="id-b1f7c061-6512-44c5-9362-dccf095b588e" /> + </symbol> + <symbol + overflow="visible" + id="id-817027f1-51a9-48ab-abda-b6c7ed18e8fd"> + <path + style="stroke:none" + d="m 3.078125,-0.8125 v -0.21875 h -0.625 v -2.1875 c 0,-0.125 0,-0.15625 -0.140625,-0.15625 -0.09375,0 -0.09375,0 -0.15625,0.078125 L 0.3125,-1.03125 v 0.21875 h 1.65625 v 0.390625 c 0,0.15625 0,0.203125 -0.421875,0.203125 h -0.1875 V 0 c 0.234375,-0.015625 0.5625,-0.015625 0.859375,-0.015625 0.28125,0 0.609375,0 0.84375,0.015625 V -0.21875 H 2.890625 c -0.4375,0 -0.4375,-0.046875 -0.4375,-0.203125 V -0.8125 Z m -1.0625,-2.03125 v 1.8125 h -1.46875 z m 0,0" + id="id-e1f68fa8-a032-4d6a-8312-b7160aaa2cc7" /> + </symbol> + </g> + </defs> + <g + id="id-25c35880-564f-40ce-aadb-7c08f55befc5" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-c4f1985a-5078-4d3e-b8ed-cf21deaf3894"> + <g + transform="translate(148.712,134.765)" + id="g22981"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-5de4116d-6929-4460-9b81-a1fa840e6489" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-df740d97-8437-4733-8477-2841e8cff77f"> + <g + transform="translate(155.077,136.259)" + id="g22985"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-293816eb-0662-49b0-bea7-28b241eee240" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-256bb376-6491-4521-b32d-59dfb544b338"> + <g + transform="translate(159.062,137.255)" + id="g22989"> + <path + style="stroke:none" + d="m 3.078125,-0.8125 v -0.21875 h -0.625 v -2.1875 c 0,-0.125 0,-0.15625 -0.140625,-0.15625 -0.09375,0 -0.09375,0 -0.15625,0.078125 L 0.3125,-1.03125 v 0.21875 h 1.65625 v 0.390625 c 0,0.15625 0,0.203125 -0.421875,0.203125 h -0.1875 V 0 c 0.234375,-0.015625 0.5625,-0.015625 0.859375,-0.015625 0.28125,0 0.609375,0 0.84375,0.015625 V -0.21875 H 2.890625 c -0.4375,0 -0.4375,-0.046875 -0.4375,-0.203125 V -0.8125 Z m -1.0625,-2.03125 v 1.8125 h -1.46875 z m 0,0" + id="id-dd5e2c73-b569-417a-a8e3-8d6485e06ab9" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g24522" + transform="translate(74.345604,-20.32463)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-76-3" + cx="91.882126" + cy="96.264252" + r="4.4921422" /> + <g + transform="matrix(0.515009,0,0,0.543714,88.6268,94.0697)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{u}_{v_5}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.5" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.5291668956255673" + id="g866-2-13-7"> + <defs + id="id-525d9370-71fd-418b-a54d-a7559a427518"> + <g + id="id-81776753-6357-47ae-be02-7130b734cbd6"> + <symbol + overflow="visible" + id="id-2f1e3580-a485-41d3-85ba-38e205c7773b"> + <path + style="stroke:none" + d="" + id="id-9e24f081-d9e5-414c-9562-86e7ea95d8fa" /> + </symbol> + <symbol + overflow="visible" + id="id-7b96ef11-a7e8-4175-8fbd-6550f1860b28"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-7f4d9fab-a55d-4854-9a5a-64f8a537ceea" /> + </symbol> + <symbol + overflow="visible" + id="id-dcce8706-86fc-4a12-93c3-745b3b48522b"> + <path + style="stroke:none" + d="" + id="id-dd7db2ae-b691-49f7-b5cb-19799b844746" /> + </symbol> + <symbol + overflow="visible" + id="id-2bf57ad6-b0d5-4cf9-8858-7c6da4ba32dd"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-7cdacf57-0553-4799-be89-192f69f02dc8" /> + </symbol> + <symbol + overflow="visible" + id="id-f7b73519-d3c2-43f5-a559-e52d16e07f2d"> + <path + style="stroke:none" + d="" + id="id-5b2d9418-8247-4e22-a220-23c243bd71c0" /> + </symbol> + <symbol + overflow="visible" + id="id-4f60c04d-7c4d-4d73-ae62-3513bed2deb5"> + <path + style="stroke:none" + d="m 0.984375,-2.75 c 0.25,0.0625 0.484375,0.0625 0.53125,0.0625 0.34375,0 0.59375,-0.09375 0.71875,-0.15625 0.125,-0.0625 0.46875,-0.28125 0.46875,-0.390625 0,-0.078125 -0.0625,-0.078125 -0.078125,-0.078125 -0.015625,0 -0.015625,0 -0.078125,0.015625 -0.1875,0.0625 -0.5,0.140625 -0.828125,0.140625 -0.28125,0 -0.546875,-0.046875 -0.8125,-0.140625 C 0.84375,-3.3125 0.84375,-3.3125 0.828125,-3.3125 0.75,-3.3125 0.75,-3.265625 0.75,-3.1875 v 1.5 c 0,0.09375 0,0.15625 0.109375,0.15625 0.046875,0 0.046875,-0.015625 0.09375,-0.0625 0.1875,-0.21875 0.453125,-0.328125 0.796875,-0.328125 0.28125,0 0.453125,0.15625 0.515625,0.265625 0.109375,0.171875 0.140625,0.390625 0.140625,0.640625 0,0.203125 -0.015625,0.484375 -0.21875,0.671875 -0.21875,0.234375 -0.5,0.25 -0.609375,0.25 -0.328125,0 -0.6875,-0.140625 -0.84375,-0.4375 0.203125,-0.015625 0.28125,-0.15625 0.28125,-0.28125 0,-0.15625 -0.125,-0.28125 -0.28125,-0.28125 -0.109375,0 -0.28125,0.078125 -0.28125,0.296875 0,0.5 0.484375,0.90625 1.125,0.90625 0.75,0 1.359375,-0.5 1.359375,-1.109375 0,-0.5625 -0.484375,-1.09375 -1.171875,-1.09375 -0.3125,0 -0.578125,0.078125 -0.78125,0.25 z m 0,0" + id="id-f71d3f01-b281-440e-8934-3596b6b51eae" /> + </symbol> + </g> + </defs> + <g + id="id-f718af03-9ab4-4d7f-ad24-e28e58546fcb" + transform="translate(-149.165,-130.281)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-59eafef2-d7e1-4072-9d8e-d713917cd0ca"> + <g + transform="translate(148.712,134.765)" + id="g24020"> + <path + style="stroke:none" + d="M 4.359375,-0.71875 V 0.0625 L 6.125,0 v -0.46875 c -0.609375,0 -0.6875,0 -0.6875,-0.390625 v -3.625 L 3.625,-4.40625 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 1.90625 c 0,0.8125 -0.515625,1.34375 -1.234375,1.34375 -0.78125,0 -0.8125,-0.25 -0.8125,-0.796875 v -3.390625 l -1.8125,0.078125 v 0.46875 c 0.609375,0 0.6875,0 0.6875,0.390625 v 2.328125 c 0,1.0625 0.796875,1.28125 1.796875,1.28125 0.25,0 0.96875,0 1.421875,-0.78125 z m 0,0" + id="id-88e21b0a-7ad0-417a-87ba-fc3939d4ca59" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-dfbd88fb-e624-41c1-aa94-a402992137e3"> + <g + transform="translate(155.077,136.259)" + id="g24024"> + <path + style="stroke:none" + d="m 3.71875,-2.53125 c 0,-0.546875 -0.328125,-0.546875 -0.34375,-0.546875 -0.1875,0 -0.375,0.1875 -0.375,0.375 0,0.109375 0.0625,0.171875 0.109375,0.203125 0.125,0.109375 0.265625,0.28125 0.265625,0.5625 0,0.3125 -0.46875,1.8125 -1.296875,1.8125 -0.5625,0 -0.5625,-0.5 -0.5625,-0.625 0,-0.3125 0.125,-0.703125 0.390625,-1.359375 C 1.953125,-2.25 2,-2.359375 2,-2.46875 2,-2.84375 1.6875,-3.078125 1.34375,-3.078125 0.640625,-3.078125 0.328125,-2.125 0.328125,-2 c 0,0.078125 0.09375,0.078125 0.125,0.078125 0.09375,0 0.09375,-0.03125 0.125,-0.109375 C 0.734375,-2.59375 1.03125,-2.875 1.3125,-2.875 c 0.125,0 0.171875,0.078125 0.171875,0.234375 0,0.171875 -0.046875,0.3125 -0.125,0.46875 -0.296875,0.78125 -0.375,1.078125 -0.375,1.328125 0,0.6875 0.546875,0.90625 1.078125,0.90625 1.171875,0 1.65625,-2.015625 1.65625,-2.59375 z m 0,0" + id="id-f89cf5b7-ce27-44f5-a14a-7acdccbe9ee7" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-862beb6c-b57e-417f-8603-b2e05d990f56"> + <g + transform="translate(159.062,137.255)" + id="g24028"> + <path + style="stroke:none" + d="m 0.984375,-2.75 c 0.25,0.0625 0.484375,0.0625 0.53125,0.0625 0.34375,0 0.59375,-0.09375 0.71875,-0.15625 0.125,-0.0625 0.46875,-0.28125 0.46875,-0.390625 0,-0.078125 -0.0625,-0.078125 -0.078125,-0.078125 -0.015625,0 -0.015625,0 -0.078125,0.015625 -0.1875,0.0625 -0.5,0.140625 -0.828125,0.140625 -0.28125,0 -0.546875,-0.046875 -0.8125,-0.140625 C 0.84375,-3.3125 0.84375,-3.3125 0.828125,-3.3125 0.75,-3.3125 0.75,-3.265625 0.75,-3.1875 v 1.5 c 0,0.09375 0,0.15625 0.109375,0.15625 0.046875,0 0.046875,-0.015625 0.09375,-0.0625 0.1875,-0.21875 0.453125,-0.328125 0.796875,-0.328125 0.28125,0 0.453125,0.15625 0.515625,0.265625 0.109375,0.171875 0.140625,0.390625 0.140625,0.640625 0,0.203125 -0.015625,0.484375 -0.21875,0.671875 -0.21875,0.234375 -0.5,0.25 -0.609375,0.25 -0.328125,0 -0.6875,-0.140625 -0.84375,-0.4375 0.203125,-0.015625 0.28125,-0.15625 0.28125,-0.28125 0,-0.15625 -0.125,-0.28125 -0.28125,-0.28125 -0.109375,0 -0.28125,0.078125 -0.28125,0.296875 0,0.5 0.484375,0.90625 1.125,0.90625 0.75,0 1.359375,-0.5 1.359375,-1.109375 0,-0.5625 -0.484375,-1.09375 -1.171875,-1.09375 -0.3125,0 -0.578125,0.078125 -0.78125,0.25 z m 0,0" + id="id-62223988-6229-45fd-addd-59f0f7f30ae2" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g10297" + transform="translate(0.1126499)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7" + cx="150.3588" + cy="38.079559" + r="4.4921422" + transform="translate(-30.339869,0.01340608)" /> + <g + transform="matrix(0.55409999,0,0,0.58498399,117.54052,36.094154)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1"> + <defs + id="id-fe0395f9-cd9e-4370-972a-09b96d88acd1-7"> + <g + id="g9297"> + <symbol + overflow="visible" + id="symbol9283"> + <path + style="stroke:none" + d="" + id="path9281" /> + </symbol> + <symbol + overflow="visible" + id="symbol9287"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="path9285" /> + </symbol> + <symbol + overflow="visible" + id="symbol9291"> + <path + style="stroke:none" + d="" + id="path9289" /> + </symbol> + <symbol + overflow="visible" + id="symbol9295"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path9293" /> + </symbol> + </g> + </defs> + <g + id="id-7457a538-d31c-4782-b54c-900abce06f81-5" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-9046b2be-23a5-484a-aa3e-6ee99c22343e-9"> + <g + transform="translate(148.712,134.765)" + id="g3356-4"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-639a072d-d722-49fa-9a16-92456d870490-9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-064cff21-d081-4fc0-8c9f-3ad5839426f9-0"> + <g + transform="translate(154.759,136.259)" + id="g3360-9"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-80e94a18-ccd4-4ad2-9c5c-5e4866b6db59-1" /> + </g> + </g> + </g> + </g> + <g + id="g10025"> + <g + id="g3799-3" + transform="translate(84.418525,-17.043995)"> + <g + id="g8974" + transform="matrix(0.59548521,0,0,0.59548521,19.480669,21.053929)"> + <g + id="g3156-6" + transform="translate(-11.789786,-1.6856517)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-7" + cx="70.011894" + cy="42.18951" + r="4.4921422" /> + <g + transform="matrix(0.377673,0,0,0.398724,66.4383,40.4741)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y\n}_{z_1,1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.1" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.38805578110885036" + id="g866-53"> + <defs + id="id-6be0af8f-52f7-4cd6-9b57-971846d210d0"> + <g + id="id-8b1176ff-fed7-4d1f-a95d-2f901e2aa6da"> + <symbol + overflow="visible" + id="id-50ca6f89-1cf3-46ce-b624-794728268749"> + <path + style="stroke:none" + d="" + id="id-3007ebfc-2e24-4566-9ce5-f9269724a7af" /> + </symbol> + <symbol + overflow="visible" + id="id-0f52c0e5-e7bb-4649-867b-67f9ffd54d5c"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-e0a286b4-1895-4457-9d47-fdd1ee2aef8e" /> + </symbol> + <symbol + overflow="visible" + id="id-f33a0be7-00c4-4c53-9793-ea8e553e3b04"> + <path + style="stroke:none" + d="" + id="id-8d37aeb7-f373-42df-8441-9e8e63c73fea" /> + </symbol> + <symbol + overflow="visible" + id="id-331b803c-1ca4-4d9e-ae0a-b94c0868ef22"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-79a21791-6cb0-4234-a47b-4bd9ede6c0b2" /> + </symbol> + <symbol + overflow="visible" + id="id-02613bae-770a-4a52-a47b-fef4b2c26411"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-afc2da90-6d57-475c-a8d5-7767638414df" /> + </symbol> + <symbol + overflow="visible" + id="id-1f8fea30-ac48-4986-984b-906d5fb66dce"> + <path + style="stroke:none" + d="" + id="id-2db340cb-906e-44a4-b69f-d20f40866d22" /> + </symbol> + <symbol + overflow="visible" + id="id-1159c11c-5ca0-4515-84ea-dbc2c0071b76"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-47e8b9e4-606d-4d63-adc7-5bbddf20c9ca" /> + </symbol> + <symbol + overflow="visible" + id="id-d2a45eb8-4bc1-4f97-847e-131cb18000c7"> + <path + style="stroke:none" + d="" + id="id-b7d83c78-2ab3-430e-8d1b-ea63a6e16936" /> + </symbol> + <symbol + overflow="visible" + id="id-c2d57daa-bbd4-45c0-8d46-e646f76639f4"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-530c2961-ca82-486c-a6db-d81ce2884279" /> + </symbol> + </g> + </defs> + <g + id="id-b65296b8-cd1e-4853-bf30-f01f997445fc" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-ff31267b-1011-4ebe-a2b3-322e67482823"> + <g + transform="translate(148.712,134.765)" + id="g7575"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-fb26ff1a-890e-4a88-ba4a-5caf57890df3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ec56088c-bb0d-471c-abe7-c18498ca6c04"> + <g + transform="translate(154.759,136.259)" + id="g7579"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-aa616a6c-a072-4034-9cdf-2e0b544efe58" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-55a64f55-78ec-4ba3-9ad9-8551d4676701"> + <g + transform="translate(158.565,137.255)" + id="g7583"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-8f9cb614-bd57-4124-828b-80379cb59b0c" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-e6d6b41a-348c-445d-b6d0-7b54b1956bdb"> + <g + transform="translate(162.454,136.259)" + id="g7587"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-1bb9f3d5-cd2b-46f6-bac3-e24c728635a9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-f49d8197-a2da-489d-b770-b1923dd1c1dc"> + <g + transform="translate(164.82,136.259)" + id="g7591"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-d99894be-3c76-4844-b308-43a751048c67" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3184-5" + transform="translate(-11.934691,-3.882734)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-6-9" + cx="70.156799" + cy="56.775902" + r="4.4921422" /> + <g + transform="matrix(0.377673,0,0,0.398723,66.5834,55.0601)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{z_2,1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.1" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.3880552944864945" + id="g866-5-2"> + <defs + id="id-557dc6da-601e-4c39-aaf4-3c6cf1e4bd70"> + <g + id="id-945a6e37-a95b-44e9-82b7-2ac83c7d6d9c"> + <symbol + overflow="visible" + id="id-5413b550-28b0-4f27-b0e0-efb018e9abb1"> + <path + style="stroke:none" + d="" + id="id-a8d13d71-db36-4835-9549-9f3622025a5e" /> + </symbol> + <symbol + overflow="visible" + id="id-12cf6e23-f040-4a9f-99b8-10631bfdf663"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-20759e13-f2c8-45c1-b35a-f43212bfcee3" /> + </symbol> + <symbol + overflow="visible" + id="id-591b00bb-e13d-4d74-8c6c-fd8f6ea3db65"> + <path + style="stroke:none" + d="" + id="id-3c0c7864-f3cb-4470-8f6b-48d3abc32653" /> + </symbol> + <symbol + overflow="visible" + id="id-bef4c849-1488-4ffd-88f3-58fc74337fa5"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-e2e9ead5-8b0c-48eb-8713-a9278af03c05" /> + </symbol> + <symbol + overflow="visible" + id="id-bcb3bf03-198d-41ab-b887-5d49a6fec79b"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-9a1955e3-cb8d-48d9-96d1-9989ce648fff" /> + </symbol> + <symbol + overflow="visible" + id="id-e586bbb8-1d83-4c06-b2e2-870f9006d650"> + <path + style="stroke:none" + d="" + id="id-92894d48-f372-4004-9679-16918abac50d" /> + </symbol> + <symbol + overflow="visible" + id="id-f066668e-909e-4312-80d1-04749c262cb4"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-973279b7-cd89-4f57-a650-ba85eb525e1d" /> + </symbol> + <symbol + overflow="visible" + id="id-9423f50a-7bbb-437e-a3ab-686b0a1c420d"> + <path + style="stroke:none" + d="" + id="id-3a813a52-2d44-41db-ac8c-e6155f5cb9b9" /> + </symbol> + <symbol + overflow="visible" + id="id-b0386dcd-1db9-41fd-a360-42e59588bfe9"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-918e55b9-f187-4747-989f-66efac9d6872" /> + </symbol> + </g> + </defs> + <g + id="id-25cbd960-346c-44d5-a7a7-cd259f220412" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-e070969d-cbbb-4e16-8382-3bd97bcb823c"> + <g + transform="translate(148.712,134.765)" + id="g8161"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-e26019c6-b7f9-4b86-8846-e0ed96094457" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ea6ef407-f30f-4578-8380-be23faf354d2"> + <g + transform="translate(154.759,136.259)" + id="g8165"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1067d6bd-46da-4bdd-8d6a-ccf22d52d139" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-0e4c0db8-7660-4dc5-b68a-dda7cfd5c269"> + <g + transform="translate(158.565,137.255)" + id="g8169"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-1603147b-17cc-4897-bc31-1789f0b0948c" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-746c89f4-82f5-4adc-9cd1-a83e90a088ce"> + <g + transform="translate(162.454,136.259)" + id="g8173"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-975b9346-f9d9-4fca-9c96-3533ca1ad123" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-6261188b-d4ca-4286-b5ad-16403a3817c3"> + <g + transform="translate(164.82,136.259)" + id="g8177"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-6d9313f7-331a-417f-8898-9220a3bedaa8" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3241-2" + transform="translate(-9.890387,-8.2691788)"> + <g + id="g3212-0"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-9-6" + cx="68.112495" + cy="82.236786" + r="4.4921422" /> + <g + transform="matrix(0.377673,0,0,0.398723,64.4508,80.521)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{z_k,1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.1" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.3880552944864945" + id="g866-26-1"> + <defs + id="id-2323ec52-c994-466e-8d33-618ba88d4860"> + <g + id="id-58309c68-7535-4da9-8dc6-1b52eaa73e19"> + <symbol + overflow="visible" + id="id-29067988-3659-4747-86bb-6cc1b8b5c91e"> + <path + style="stroke:none" + d="" + id="id-80cc09ad-f6c7-4d0e-b4a0-0dd52e7cf885" /> + </symbol> + <symbol + overflow="visible" + id="id-213f7785-a032-4538-9e90-29c9ecd79a4a"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-b0ad5f67-012c-4eb4-9df9-7915797561d9" /> + </symbol> + <symbol + overflow="visible" + id="id-80c58fdf-7f87-456a-90d4-ebd25fde26f8"> + <path + style="stroke:none" + d="" + id="id-74527db0-d834-4b21-a3a3-787ef4f1584f" /> + </symbol> + <symbol + overflow="visible" + id="id-aad71265-bf77-4f0f-8166-b3b625e9d750"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1c3fa1ea-dfa0-42fc-92ce-a84f36b57ca7" /> + </symbol> + <symbol + overflow="visible" + id="id-e1479489-482e-49ef-a82f-7e97279af4e1"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-5e3cb470-a9d3-4ef6-a007-ed9d6b5de59b" /> + </symbol> + <symbol + overflow="visible" + id="id-5366a9cc-cff2-4e31-9a8f-998905cec9a9"> + <path + style="stroke:none" + d="" + id="id-46c1bd63-2d42-4a96-9494-d4a8f64c983d" /> + </symbol> + <symbol + overflow="visible" + id="id-aa6ec137-fdf3-4e1a-a9aa-2340ca00987b"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-b880bd61-8e28-44ff-b1b7-319821d36654" /> + </symbol> + <symbol + overflow="visible" + id="id-9f4b5d89-4f82-443e-aeab-44850820982d"> + <path + style="stroke:none" + d="" + id="id-d65784a0-aa5d-47b4-bc0b-6bafea1755bf" /> + </symbol> + <symbol + overflow="visible" + id="id-042c7792-5675-40b4-a5a6-74b1df22e176"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-0247951f-4384-4d49-ad6d-5360e43ffcae" /> + </symbol> + </g> + </defs> + <g + id="id-377717a6-de98-4b04-af83-580aa9c91cb5" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-865943bf-ed0d-49b3-bfd3-2c7c1863acea"> + <g + transform="translate(148.712,134.765)" + id="g8759"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-deeebaa0-f246-455c-bb25-c359b03afc42" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-f3ba9b81-94ca-42ff-9a63-303a7219a2ca"> + <g + transform="translate(154.759,136.259)" + id="g8763"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-8da0be5a-e5a2-48a6-97d6-93bada94716d" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ba3748b7-b86a-4dad-bed6-65fae8eef817"> + <g + transform="translate(158.565,137.316)" + id="g8767"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-cf22f53f-b2a3-4e40-a835-7c6d41c24c47" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-1ad87ffc-08c4-4089-8756-c42664031daa"> + <g + transform="translate(162.921,136.259)" + id="g8771"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-c230669e-37cb-4e21-b60e-f8881d4e0907" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-88830b4d-ed53-4e7a-92c6-6b719406a084"> + <g + transform="translate(165.287,136.259)" + id="g8775"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-7b3e9969-44c1-45d9-9a03-ef47af2f5c8b" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + transform="matrix(0,0.569333,-0.569333,0,58.524851,60.34743)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\dots$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569333" + id="g3585-8"> + <defs + id="id-2d87e1eb-bc7d-4d81-9582-86bf8727c9c8-4"> + <g + id="g5405"> + <symbol + overflow="visible" + id="symbol5399"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path5397" /> + </symbol> + <symbol + overflow="visible" + id="symbol5403"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="path5401" /> + </symbol> + </g> + </defs> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-6" + transform="translate(-149.571,-133.702)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-8"> + <g + transform="translate(148.712,134.765)" + id="g3573-9"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-2" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-6"> + <g + transform="translate(153.143,134.765)" + id="g3577-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-4" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-95"> + <g + transform="translate(157.565,134.765)" + id="g3581-0"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-4" /> + </g> + </g> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7)" + d="M 123.76463,35.576286 135.63397,29.31187" + id="path4260-1" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-1)" + d="m 135.86319,36.066561 -11.0209,1.680237" + id="path4260-1-9" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-7)" + d="m 123.32254,41.369235 12.15101,6.16385" + id="path4260-1-6" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-4)" + d="m 141.22891,28.199035 20.1827,-1.019358" + id="path4260-1-4" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-4-5)" + d="m 161.74555,37.989892 -20.50217,-8.10921" + id="path4260-1-4-3" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-4-5-5)" + d="M 162.54596,48.792117 140.04573,30.56522" + id="path4260-1-4-3-0" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-4-5-5-8)" + d="M 162.80641,60.927672 140.71487,37.474567" + id="path4260-1-4-3-0-9" + sodipodi:nodetypes="cc" /> + </g> + </g> + <g + id="g10297-6" + transform="translate(0.1126499,36.580412)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-7-1" + cx="150.3588" + cy="38.079559" + r="4.4921422" + transform="translate(-30.339869,0.01340608)" /> + <g + id="g10025-7"> + <g + id="g3799-3-5" + transform="translate(84.418525,-17.043995)"> + <g + id="g8974-9" + transform="matrix(0.59548521,0,0,0.59548521,19.480669,21.053929)"> + <g + id="g3156-6-6" + transform="translate(-11.789786,-1.6856517)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-7-2" + cx="70.011894" + cy="42.18951" + r="4.4921422" /> + <g + transform="matrix(0.343339,0,0,0.362476,66.1854,40.6058)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y\n}_{z_1,N}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.0" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.35277775916857346" + id="g866-53-1"> + <defs + id="id-2e1e9694-27de-4bc5-b6f1-155c33ca7154"> + <g + id="id-18ab7cc1-d512-4dbc-b490-f9b5797772ae"> + <symbol + overflow="visible" + id="id-0ae35fa3-5805-446c-a162-5e7066b04c1d"> + <path + style="stroke:none" + d="" + id="id-3ce9d299-a7e8-494e-b4da-236b2e8af455" /> + </symbol> + <symbol + overflow="visible" + id="id-d104c6f6-83e7-4c3b-bdb0-bda62469c803"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-03cb2b92-56ef-4164-a181-b7e036961d69" /> + </symbol> + <symbol + overflow="visible" + id="id-0063ec77-d1ef-4294-aded-6fb34b25452c"> + <path + style="stroke:none" + d="" + id="id-ed240e9e-fb6f-47f0-9fec-19e256b65474" /> + </symbol> + <symbol + overflow="visible" + id="id-b78aa94e-a748-4118-8254-bc4ac4401cd3"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-6ccbc17b-d54d-4ffd-828f-0971e1a0568c" /> + </symbol> + <symbol + overflow="visible" + id="id-8853ccd5-1c22-411f-a77b-11473226831f"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-ea30ef66-1636-4670-bd31-f38f7da9b3d7" /> + </symbol> + <symbol + overflow="visible" + id="id-06f084b3-c80b-4d0d-bbdb-d3d84bb857a5"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-6d6f3605-9595-4e8e-8584-43290a4b83ae" /> + </symbol> + <symbol + overflow="visible" + id="id-6679a993-2e9a-4274-a282-8c4ab5d5b4cb"> + <path + style="stroke:none" + d="" + id="id-092365e5-8b02-4a40-9174-02e022ad759b" /> + </symbol> + <symbol + overflow="visible" + id="id-4116aa0e-8949-444b-b832-4fc27ef35cfd"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-95c724ad-ef6f-43d5-8ea4-d475d235e132" /> + </symbol> + </g> + </defs> + <g + id="id-a0537bbc-3bb0-4a7a-b63d-6f4dfc0f829f" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-c59b42d5-3fb3-4ed4-858f-117ad8f713e1"> + <g + transform="translate(148.712,134.765)" + id="g15539"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-ac69d72b-4256-416e-9547-ec4829beffc8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-072d89c1-5443-4204-8c93-9ec1dca8e4ce"> + <g + transform="translate(154.759,136.259)" + id="g15543"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-e06bdaea-9917-42af-bdeb-f797778559f9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b45d471-ace3-4bd5-9bdf-b6b120381159"> + <g + transform="translate(158.565,137.255)" + id="g15547"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-f94bf12b-d26e-4e59-a91a-9848ca49bd48" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-c2947fab-b7a7-45e2-a961-95c3091e6151"> + <g + transform="translate(162.454,136.259)" + id="g15551"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-63dd9231-82e4-41b6-8c18-4073708f3295" /> + </g> + <g + transform="translate(164.82,136.259)" + id="g15554"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-d23c3a57-d52c-4660-adf7-6c9cba0ade41" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3184-5-0" + transform="translate(-11.934691,-3.882734)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-6-9-3" + cx="70.156799" + cy="56.775902" + r="4.4921422" /> + <g + transform="matrix(0.343339,0,0,0.362475,66.3305,55.1918)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{z_2,N}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.0" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.35277727254600744" + id="g866-5-2-0"> + <defs + id="id-fa6ad06a-6ea2-420e-bf32-9c1035756bb8"> + <g + id="id-67377935-c67d-4294-b80f-d5c7090e76a2"> + <symbol + overflow="visible" + id="id-11f194a2-4f1e-4e9d-9c12-eaeb0576ba4f"> + <path + style="stroke:none" + d="" + id="id-35e81819-81cf-43ec-a106-5d598095ec61" /> + </symbol> + <symbol + overflow="visible" + id="id-7ae560de-c3d3-4d52-bf1a-ed1cc7022b0d"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-cd1638bf-25f8-4395-99ad-736d7cbaac2c" /> + </symbol> + <symbol + overflow="visible" + id="id-077cd2a9-f72c-4998-9f28-c2ca79278d8c"> + <path + style="stroke:none" + d="" + id="id-3e48370c-8ec9-4101-b706-4d7965684719" /> + </symbol> + <symbol + overflow="visible" + id="id-9e7e9970-d3d6-4748-affa-3a7f38b6e332"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-42a3207a-aa68-4ae0-84e4-803708d270d8" /> + </symbol> + <symbol + overflow="visible" + id="id-f832a4db-9150-4235-a7ce-ed944b41d8ec"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-75959ca4-ca20-4ec0-986b-895097752c6a" /> + </symbol> + <symbol + overflow="visible" + id="id-50f56806-6f07-4f35-a21c-dc678513aa0d"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-4f1a7a33-b9b5-4560-8236-311299d342bf" /> + </symbol> + <symbol + overflow="visible" + id="id-8506b1c1-8634-4ac2-b48f-3dd43b2cb5b8"> + <path + style="stroke:none" + d="" + id="id-ca9fad8a-6b86-4caf-a1f5-3ef8c9866904" /> + </symbol> + <symbol + overflow="visible" + id="id-e812e2db-3284-42c0-ba52-be0102cd4361"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-74d32960-e886-4533-b740-1c7dccd1a5c5" /> + </symbol> + </g> + </defs> + <g + id="id-690cecd6-813b-4235-a29e-fb0e2e06c91f" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-8c788b86-d904-4af3-b989-634f9a9dedfa"> + <g + transform="translate(148.712,134.765)" + id="g14712"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-eb409d9f-f3f9-4b36-b171-69b8152ade11" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-5e8fe62b-067f-448e-b856-e2ba25399d64"> + <g + transform="translate(154.759,136.259)" + id="g14716"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-17d610ce-19cb-43c9-9be3-6919457982a8" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-9e3b10e4-e32c-4f42-ab9d-cc3c6e8453ff"> + <g + transform="translate(158.565,137.255)" + id="g14720"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-06549e56-7f18-4cd0-ac67-0ab3ba9e14fa" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-f993e053-b2c5-4fff-8030-89911bcd9745"> + <g + transform="translate(162.454,136.259)" + id="g14724"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-0f9626a6-dcbd-489e-bf4b-cf1fe8bb15e9" /> + </g> + <g + transform="translate(164.82,136.259)" + id="g14727"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-c3d305d1-9a67-47fe-9c62-1a741616d1fd" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3241-2-6" + transform="translate(-9.890387,-8.2691788)"> + <g + id="g3212-0-4"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-9-6-6" + cx="68.112495" + cy="82.236786" + r="4.4921422" /> + <g + transform="matrix(0.343339,0,0,0.362475,64.2061,80.6526)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{z_k,N}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.0" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.35277727254600744" + id="g866-26-1-2"> + <defs + id="id-298e0f63-7d86-40dd-aeeb-eb3472603432"> + <g + id="id-dd266ffb-8bd6-4b8b-908e-347b77cce2f0"> + <symbol + overflow="visible" + id="id-54f93a05-f33f-4e1f-b14b-033dbe0100e1"> + <path + style="stroke:none" + d="" + id="id-662a621e-5e45-40f5-8ea1-8f20c3f932d5" /> + </symbol> + <symbol + overflow="visible" + id="id-d6fd58c8-7306-441f-a7a0-bbba8e210d18"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-eedc4925-c0b2-4708-83aa-15c1b0378193" /> + </symbol> + <symbol + overflow="visible" + id="id-c4ef2db4-0efb-43a7-9f72-cb56a42f6ac4"> + <path + style="stroke:none" + d="" + id="id-727aa764-3087-45d8-9639-138ba68080ef" /> + </symbol> + <symbol + overflow="visible" + id="id-818fcb3c-8f9a-4bca-9cb9-20409f7ecdd9"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-4b0f8225-b958-420c-9925-ed7980d0bea7" /> + </symbol> + <symbol + overflow="visible" + id="id-4a5bb1b9-44a1-495b-970d-c3000f4357b0"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-e6a10cba-4376-48b7-af5c-c1d263a490b6" /> + </symbol> + <symbol + overflow="visible" + id="id-0f0ba165-1d40-4c1f-adba-e72a1f9040f5"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-1a3fd7c0-5d35-445b-ad7f-95596e6bb0c6" /> + </symbol> + <symbol + overflow="visible" + id="id-ff109d01-388b-448f-9978-0aa115e2b857"> + <path + style="stroke:none" + d="" + id="id-c448260a-4a67-4cfc-b867-a7747c30dba7" /> + </symbol> + <symbol + overflow="visible" + id="id-16ce620d-5aa1-4693-b9dc-7b93aa698785"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-ef1023f0-c94f-4abd-a191-51cf1f501069" /> + </symbol> + </g> + </defs> + <g + id="id-6a466e26-0a4e-4ab6-a17c-a4034b0e58e0" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-d88a4264-ca84-44e4-a93e-09647b1019a3"> + <g + transform="translate(148.712,134.765)" + id="g16474"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-26351d39-f081-4dc0-98b9-930543e5c1c1" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cfe36fd9-f569-43bb-8ebb-304ed516d808"> + <g + transform="translate(154.759,136.259)" + id="g16478"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-c2b2bcb1-47a8-4b4e-8ea7-2391e9d1a814" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-7ab8b2f8-e8ca-41a2-94e1-e7bed9b6c779"> + <g + transform="translate(158.565,137.316)" + id="g16482"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-9d3ab79d-6e09-4ed3-b956-f0fefafee598" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-0da4babe-cdbc-4790-ad86-4deb739a699d"> + <g + transform="translate(162.921,136.259)" + id="g16486"> + <path + style="stroke:none" + d="m 1.46875,-0.109375 c 0,0.375 -0.0625,0.828125 -0.546875,1.265625 C 0.90625,1.1875 0.875,1.21875 0.875,1.25 c 0,0.046875 0.0625,0.09375 0.09375,0.09375 0.109375,0 0.703125,-0.5625 0.703125,-1.390625 0,-0.421875 -0.171875,-0.75 -0.5,-0.75 -0.21875,0 -0.390625,0.171875 -0.390625,0.390625 C 0.78125,-0.1875 0.9375,0 1.1875,0 1.359375,0 1.46875,-0.109375 1.46875,-0.109375 Z m 0,0" + id="id-d89a1d55-b72f-4420-b4c5-c8faaa78d823" /> + </g> + <g + transform="translate(165.287,136.259)" + id="g16489"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-af2a8735-1b1c-4743-ab87-7cbdcc972bb9" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + transform="matrix(0,0.569333,-0.569333,0,58.524851,60.34743)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\dots$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569333" + id="g3585-8-6"> + <defs + id="id-2d87e1eb-bc7d-4d81-9582-86bf8727c9c8-4-4"> + <g + id="g10972"> + <symbol + overflow="visible" + id="symbol10966"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path10964" /> + </symbol> + <symbol + overflow="visible" + id="symbol10970"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="path10968" /> + </symbol> + </g> + </defs> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-6-6" + transform="translate(-149.571,-133.702)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-8-7"> + <g + transform="translate(148.712,134.765)" + id="g3573-9-5"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-2-6" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-6-9"> + <g + transform="translate(153.143,134.765)" + id="g3577-6-8"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-4-7" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-95-2"> + <g + transform="translate(157.565,134.765)" + id="g3581-0-8"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-4-2" /> + </g> + </g> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-0)" + d="M 123.76463,35.576286 135.63397,29.31187" + id="path4260-1-99" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-1-6)" + d="m 124.35444,38.164321 11.0209,-1.680237" + id="path4260-1-9-6" + sodipodi:nodetypes="cc" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270-7-7-8)" + d="m 135.87179,47.647478 -12.15101,-6.16385" + id="path4260-1-6-0" + sodipodi:nodetypes="cc" /> + </g> + <g + transform="matrix(0.5541,0,0,0.584984,116.601,36.0943)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{N}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855802346762" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-1-1"> + <defs + id="id-d3fb6856-5d38-43e1-965f-380ef846a3f0"> + <g + id="id-5db43806-ce80-48c5-8991-17f0ecf77a78"> + <symbol + overflow="visible" + id="id-9f75520a-2f6e-43a3-a5fc-b484d7c34025"> + <path + style="stroke:none" + d="" + id="id-918e2cb1-bfb3-4125-ae37-98ecf49ea82d" /> + </symbol> + <symbol + overflow="visible" + id="id-32e7f17d-1aa5-4c05-8c87-5c52cf4df567"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5ca8e939-cf8d-49f5-89e4-8f4e371df442" /> + </symbol> + <symbol + overflow="visible" + id="id-e85cff33-aae1-47c5-b492-c54acacf6be2"> + <path + style="stroke:none" + d="" + id="id-ff587f55-c7f0-4a92-9b00-5b074f56717a" /> + </symbol> + <symbol + overflow="visible" + id="id-58db586a-9b92-4cf8-ab2b-eb4fa0eea663"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-f02e888d-d17e-4050-a624-3be22c21f74c" /> + </symbol> + </g> + </defs> + <g + id="id-65fe7cf0-7c06-4e65-a635-382721b5c5f4" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-d24f6bde-c234-4f10-8294-f57b54c2b5bb"> + <g + transform="translate(148.712,134.765)" + id="g12211"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-9411c0c9-acaf-47b2-842a-da578cdcd85c" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-4b88eec4-a4f8-4042-b489-653f0c2c9913"> + <g + transform="translate(154.759,136.259)" + id="g12215"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-8d28aa9c-1d28-4bfe-a918-c2ba22fa7138" /> + </g> + </g> + </g> + </g> + </g> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-48-7-9" + transform="matrix(0,0.569333,-0.569333,0,227.58806,-26.352687)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-1-8-7"> + <g + transform="translate(148.712,134.765)" + id="g3573-2-9-8"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-9-1-2" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-3-5-5"> + <g + transform="translate(153.143,134.765)" + id="g3577-9-4-3"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-0-9-4" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-8-2-9"> + <g + transform="translate(157.565,134.765)" + id="g3581-8-5-0"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-5-7-2" /> + </g> + </g> + </g> + </g> +</svg> diff --git a/doc/optimal_layout_report/figures/mini_zone.pdf b/doc/optimal_layout_report/figures/mini_zone.pdf Binary files differnew file mode 100644 index 00000000..36085c52 --- /dev/null +++ b/doc/optimal_layout_report/figures/mini_zone.pdf diff --git a/doc/optimal_layout_report/figures/mini_zone.svg b/doc/optimal_layout_report/figures/mini_zone.svg new file mode 100644 index 00000000..5c505539 --- /dev/null +++ b/doc/optimal_layout_report/figures/mini_zone.svg @@ -0,0 +1,1562 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:ns3="http://www.iki.fi/pav/software/textext/" + 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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + viewBox="0 0 210 297" + version="1.1" + id="svg8" + sodipodi:docname="mini_zone.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <defs + id="defs2"> + <marker + style="overflow:visible;" + id="marker5128" + 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="path5126" /> + </marker> + <marker + style="overflow:visible;" + id="marker4822" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4820" /> + </marker> + <marker + style="overflow:visible;" + id="marker4732" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4730" /> + </marker> + <marker + style="overflow:visible;" + id="marker4648" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4646" /> + </marker> + <marker + style="overflow:visible;" + id="marker4570" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4568" /> + </marker> + <marker + style="overflow:visible;" + id="marker4498" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4496" /> + </marker> + <marker + style="overflow:visible;" + id="marker4432" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4430" /> + </marker> + <marker + style="overflow:visible;" + id="marker4372" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4370" /> + </marker> + <marker + style="overflow:visible;" + id="marker4318" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4316" /> + </marker> + <marker + style="overflow:visible;" + id="marker4270" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:isstock="true" + inkscape:collect="always"> + <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="path4268" /> + </marker> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-5"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-5" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-6"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-2" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-1" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-2"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-7" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-9" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-3"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-6" /> + </symbol> + </g> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff-5"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253-9"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442-2" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5-2"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525-8" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-3"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-1"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-9" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-4"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-7" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-8"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-4" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-5"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-0" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-6" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-1"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-0" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-9"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-37"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-4" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-5"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-25" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-4"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-7" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-4" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-30"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-7" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-8"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-68" /> + </symbol> + </g> + <g + id="id-1326d3bc-9eb9-41c7-a782-1493224ab9b8-4"> + <symbol + overflow="visible" + id="id-526e90b2-6c3e-41c5-8d6f-f0cd897f75fc-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-f90a0839-69b8-41f4-bfca-4510a71f784f-50" /> + </symbol> + <symbol + overflow="visible" + id="id-9161cfde-34a8-4083-835e-e3ff87402147-48"> + <path + style="stroke:none;stroke-width:0" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-5b87e3e3-95fa-4c6d-b0f4-0d87595f99ea-71" /> + </symbol> + <symbol + overflow="visible" + id="id-71a1d34a-b2d8-4880-a0ab-e2cc1c41148f-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-9f84e59d-4dcd-4022-8f5f-2e2ac2123cd8-2" /> + </symbol> + <symbol + overflow="visible" + id="id-c3155d45-1683-4dca-bea0-1830721f6bea-7"> + <path + style="stroke:none;stroke-width:0" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-518cc7d9-1fe0-430f-b9d0-f705991de9b3-2" /> + </symbol> + <symbol + overflow="visible" + id="id-80fd135c-95aa-4d43-a203-46c244616eee-2"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-efe98237-6fd5-4c48-9bb8-22812bd06c8b-61" /> + </symbol> + <symbol + overflow="visible" + id="id-282f7dff-00f0-4136-a937-90b7ec5ce165-0"> + <path + style="stroke:none;stroke-width:0" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-5cef49ea-eac5-4e19-9115-8a792ca899e5-61" /> + </symbol> + </g> + <g + id="id-f665f0ad-6acc-4c65-818f-65538ae870ec-7"> + <symbol + overflow="visible" + id="id-b528872c-9c37-40cc-8f3c-4a3820527247-7"> + <path + style="stroke:none" + d="" + id="id-b9b64af8-af4d-498f-81ae-f2cb3b370123-6" /> + </symbol> + <symbol + overflow="visible" + id="id-d0bf1643-b2f5-444d-a657-4aaefc6c89d4-7"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-311ed8ac-5c86-4922-8ddd-c8730c4eb1f1-3" /> + </symbol> + <symbol + overflow="visible" + id="id-1911bbd6-3c25-4e44-b82f-6e209a9efbf4-6"> + <path + style="stroke:none" + d="" + id="id-ad0a7a76-9842-4d63-89a8-c9c17aa71c17-5" /> + </symbol> + <symbol + overflow="visible" + id="id-756b752a-2988-4d30-9ec2-f35e31955def-6"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-3ec43921-ba3b-4f7d-b817-b8c615e98630-3" /> + </symbol> + </g> + <g + id="id-f98b961b-31b5-4c0f-bfb1-2760408a739a-8"> + <symbol + overflow="visible" + id="id-4737c041-b95c-4219-8e7e-c562852710ea-5"> + <path + style="stroke:none" + d="" + id="id-c55a79d7-b066-4a99-ae31-2b04d4c628d0-0" /> + </symbol> + <symbol + overflow="visible" + id="id-80361aa1-942d-4c7e-b9e6-0b746bab4670-9"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-46772014-ff2f-4c4f-bd9c-546c16e45ebe-6" /> + </symbol> + <symbol + overflow="visible" + id="id-8dac91f2-ce64-4971-ad7d-d446cd8c9c1c-3"> + <path + style="stroke:none" + d="" + id="id-604b9e94-17f8-4699-8fca-83a7170f9ad1-8" /> + </symbol> + <symbol + overflow="visible" + id="id-7656f371-933a-4b40-8c22-717f88b408ac-5"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-99006318-9528-4ad3-a74f-c639da460421-6" /> + </symbol> + </g> + <g + id="id-71316add-b757-483c-8195-02b65d505b23-3"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b-0"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f-4" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f-4"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe-4" /> + </symbol> + </g> + <g + id="id-47935b59-06ee-4c7d-aad1-b2eb9c1ecfff-8"> + <symbol + overflow="visible" + id="id-30a4c9fc-8faf-46a0-bc6c-a9f87fef6253-5"> + <path + style="stroke:none" + d="" + id="id-786b0d14-3a5a-48ea-b6c0-3bcb1008f442-7" /> + </symbol> + <symbol + overflow="visible" + id="id-ae643f90-7e2b-4001-aa11-715997a19ee5-4"> + <path + style="stroke:none" + d="M 2.109375,-2.9375 C 1.734375,-3 1.09375,-3.109375 1.09375,-3.578125 c 0,-0.625 0.921875,-0.625 1.109375,-0.625 0.75,0 1.125,0.296875 1.171875,0.84375 0.015625,0.15625 0.03125,0.203125 0.234375,0.203125 0.234375,0 0.234375,-0.046875 0.234375,-0.28125 v -0.796875 c 0,-0.1875 0,-0.28125 -0.171875,-0.28125 -0.046875,0 -0.0625,0 -0.453125,0.1875 -0.265625,-0.125 -0.609375,-0.1875 -1,-0.1875 -0.3125,0 -1.84375,0 -1.84375,1.3125 0,0.390625 0.203125,0.65625 0.40625,0.828125 0.390625,0.34375 0.78125,0.40625 1.546875,0.546875 0.359375,0.0625 1.09375,0.1875 1.09375,0.78125 0,0.75 -0.90625,0.75 -1.125,0.75 -1.0625,0 -1.3125,-0.734375 -1.4375,-1.15625 C 0.8125,-1.59375 0.75,-1.59375 0.625,-1.59375 c -0.25,0 -0.25,0.0625 -0.25,0.28125 v 1.09375 c 0,0.1875 0,0.28125 0.1875,0.28125 0.0625,0 0.078125,0 0.296875,-0.15625 0.015625,0 0.234375,-0.140625 0.25,-0.171875 0.46875,0.328125 0.984375,0.328125 1.1875,0.328125 0.3125,0 1.84375,0 1.84375,-1.453125 0,-0.4375 -0.203125,-0.78125 -0.546875,-1.0625 C 3.203125,-2.734375 2.875,-2.796875 2.109375,-2.9375 Z m 0,0" + id="id-9b3da47a-1b25-40c1-9823-033905267525-1" /> + </symbol> + </g> + <g + id="id-e9cdbc45-842a-4299-856a-e73e8a96598a-8"> + <symbol + overflow="visible" + id="id-4c9afea4-0492-4e68-ad02-526d968a9dda-8"> + <path + style="stroke:none" + d="" + id="id-022447e8-2b8e-45a6-9421-6bb9cee18fb8-3" /> + </symbol> + <symbol + overflow="visible" + id="id-eb4351ed-2b75-4189-9149-06b49bb09d39-1"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-9793d5ee-1e50-443d-8e24-59e74686be5c-8" /> + </symbol> + <symbol + overflow="visible" + id="id-acdb85cf-666d-461d-bcc6-3145d4b5a194-9"> + <path + style="stroke:none" + d="" + id="id-974496ba-fe40-4bde-9d6c-97d29282be67-6" /> + </symbol> + <symbol + overflow="visible" + id="id-a9937435-0508-4c68-9850-f26d0b685df1-4"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-9c0b6904-6368-4d8f-ad75-244ef0a02a48-3" /> + </symbol> + <symbol + overflow="visible" + id="id-4dbc287f-4992-4820-8c67-423900ff8378-3"> + <path + style="stroke:none" + d="" + id="id-d9c1862f-dbd4-4f66-9f79-92002bb14eb8-3" /> + </symbol> + <symbol + overflow="visible" + id="id-7933b5d5-7f25-482f-b30b-4ba167fd355d-8"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-7f05503e-8203-4760-910b-5af86e2658b9-6" /> + </symbol> + </g> + <g + id="id-eea55ade-e2c2-48c1-a3f1-d65d7b23c75c-3"> + <symbol + overflow="visible" + id="id-702cf98a-7855-4a56-b3b9-be3e9c89e5eb-0"> + <path + style="stroke:none" + d="" + id="id-3d08f3b9-fc2d-4c8b-a693-2f069085b4c8-9" /> + </symbol> + <symbol + overflow="visible" + id="id-4db591ab-5b31-4921-a71b-d732a9a3a154-2"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-fb3ea09c-6864-4691-95b5-1c3c652a23e5-5" /> + </symbol> + <symbol + overflow="visible" + id="id-a45ec7ed-aed1-44f6-87e2-879d7497660b-4"> + <path + style="stroke:none" + d="" + id="id-7b47d29b-e6d8-48a4-b8b1-d1b172f6aa82-0" /> + </symbol> + <symbol + overflow="visible" + id="id-b6a5b321-fb81-4c79-8c77-e89277728de4-5"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-1c892cf5-670f-4af9-9c88-c02621bf8637-9" /> + </symbol> + <symbol + overflow="visible" + id="id-ad80f9d7-8845-4991-af60-575fc64207c6-4"> + <path + style="stroke:none" + d="" + id="id-62aa46d3-6905-4658-9610-06a86458f6eb-6" /> + </symbol> + <symbol + overflow="visible" + id="id-25df116e-62f9-4a97-a0aa-f3214438cb8a-9"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-c94b97b0-0e4d-4d84-8e0b-6baff1ddbc84-2" /> + </symbol> + </g> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38-6"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed-8"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37-0" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49-2"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81-1" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2-0"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2-5" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20-1"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8-1" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3-0"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843-8" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4-5"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83-0" /> + </symbol> + </g> + <g + id="id-e222d3e7-5a3e-4726-a518-5c6732a58b38-4"> + <symbol + overflow="visible" + id="id-078cb2fa-d1b6-4887-ba5f-5b66b97fd3ed-0"> + <path + style="stroke:none" + d="" + id="id-61f320b7-89e9-479b-bc4e-49a54067dc37-6" /> + </symbol> + <symbol + overflow="visible" + id="id-59aac359-51b0-40e5-b69b-22218a35fc49-29"> + <path + style="stroke:none" + d="m 0.875,-0.59375 c -0.03125,0.15625 -0.09375,0.390625 -0.09375,0.4375 0,0.171875 0.140625,0.265625 0.296875,0.265625 0.125,0 0.296875,-0.078125 0.375,-0.28125 0,-0.015625 0.125,-0.484375 0.1875,-0.734375 l 0.21875,-0.890625 C 1.90625,-2.03125 1.96875,-2.25 2.03125,-2.46875 c 0.03125,-0.171875 0.109375,-0.46875 0.125,-0.5 0.140625,-0.3125 0.671875,-1.21875 1.625,-1.21875 0.453125,0 0.53125,0.375 0.53125,0.703125 0,0.609375 -0.484375,1.890625 -0.640625,2.3125 C 3.578125,-0.9375 3.5625,-0.8125 3.5625,-0.703125 c 0,0.46875 0.359375,0.8125 0.828125,0.8125 0.9375,0 1.296875,-1.453125 1.296875,-1.53125 0,-0.109375 -0.078125,-0.109375 -0.109375,-0.109375 -0.109375,0 -0.109375,0.03125 -0.15625,0.1875 -0.203125,0.671875 -0.53125,1.234375 -1.015625,1.234375 -0.171875,0 -0.234375,-0.09375 -0.234375,-0.328125 0,-0.25 0.078125,-0.484375 0.171875,-0.703125 0.1875,-0.53125 0.609375,-1.625 0.609375,-2.203125 0,-0.65625 -0.421875,-1.0625 -1.140625,-1.0625 -0.90625,0 -1.390625,0.640625 -1.5625,0.875 -0.046875,-0.5625 -0.453125,-0.875 -0.921875,-0.875 -0.453125,0 -0.640625,0.390625 -0.734375,0.5625 C 0.421875,-3.5 0.296875,-2.90625 0.296875,-2.875 c 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.015625 0.171875,-0.234375 0.171875,-0.703125 0.375,-1.1875 0.734375,-1.1875 0.1875,0 0.296875,0.125 0.296875,0.453125 0,0.21875 -0.03125,0.328125 -0.15625,0.84375 z m 0,0" + id="id-92fad41b-7616-42ba-92ca-aab660696a81-9" /> + </symbol> + <symbol + overflow="visible" + id="id-2a7c3fec-733a-4dd6-91b6-c39d5a40c7f2-08"> + <path + style="stroke:none" + d="" + id="id-861ee250-5da7-465e-9e31-9df2fb1caca2-1" /> + </symbol> + <symbol + overflow="visible" + id="id-c4424853-cb4a-455a-86b7-76f979819c20-3"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-7bbf4d7e-e0a1-496f-b1d4-619a2e578da8-11" /> + </symbol> + <symbol + overflow="visible" + id="id-57147852-035b-4ec9-98bd-1874c4e26ec3-03"> + <path + style="stroke:none" + d="" + id="id-6bd1fefe-bc6f-4f64-9e15-3452b2cae843-4" /> + </symbol> + <symbol + overflow="visible" + id="id-c777c81c-fd27-4557-a370-a3cf2891daa4-0"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-89ae508b-1dad-4bbf-985c-254ae964db83-3" /> + </symbol> + </g> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="3.058469" + inkscape:cx="270.02089" + inkscape:cy="225.59891" + inkscape:document-units="mm" + inkscape:current-layer="layer1" + inkscape:document-rotation="0" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="992" + inkscape:window-x="0" + inkscape:window-y="32" + inkscape:window-maximized="1" /> + <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"> + <g + id="g3799" + transform="translate(27.41052,-0.31919255)"> + <g + id="g3156" + transform="translate(-11.789786,-1.6856517)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833" + cx="70.011894" + cy="42.18951" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,66.6264,39.8993)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y\n}_{z_1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866"> + <defs + id="id-2636fe0b-9762-4ca4-813d-b2ce753fe790"> + <g + id="id-3a24776d-bc3a-4985-8b28-ce4db2a93534"> + <symbol + overflow="visible" + id="id-600184e5-ac31-4222-b7ac-c96016dc366e"> + <path + style="stroke:none" + d="" + id="id-b7300ca4-41d0-48a7-a3fc-3384bcd315e5" /> + </symbol> + <symbol + overflow="visible" + id="id-4a311171-3d88-48c1-a768-920db7a376f3"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-5d0de5d4-3de1-4182-916c-5c15cb8a379b" /> + </symbol> + <symbol + overflow="visible" + id="id-576666de-5b44-48e6-9102-7af5342bec6c"> + <path + style="stroke:none" + d="" + id="id-0e138fba-e636-4a6e-9029-bed27c4c236d" /> + </symbol> + <symbol + overflow="visible" + id="id-5c29be59-448a-4add-8ecc-e56873e1ddfc"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-6ac25928-d877-42ea-8378-021164984a12" /> + </symbol> + <symbol + overflow="visible" + id="id-2e32c15b-8346-4486-99eb-6ed6ac946f95"> + <path + style="stroke:none" + d="" + id="id-e410f52f-63d2-4f94-9516-ca72f51d8167" /> + </symbol> + <symbol + overflow="visible" + id="id-6fde21de-66ce-4992-8ea8-55bfd138b407"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-a1d7aab6-721b-4b77-952a-736ac7a8cd57" /> + </symbol> + </g> + </defs> + <g + id="id-8c6ff4a6-68eb-4206-8060-5d7007792515" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-8efd288b-f0f2-4296-a9f1-cac190774b32"> + <g + transform="translate(148.712,134.765)" + id="g1712"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-1548e258-efc7-459a-bc01-f9ee355424e4" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ab138df8-5b8c-4c74-b4ba-4caf02976f79"> + <g + transform="translate(154.759,136.259)" + id="g1716"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-c1ae41a5-8830-47b8-a863-ac8f23b1df74" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-4a8f4d85-f21b-4f6c-ae5b-294f07fa8748"> + <g + transform="translate(158.565,137.255)" + id="g1720"> + <path + style="stroke:none" + d="M 1.984375,-3.171875 C 1.984375,-3.3125 1.96875,-3.3125 1.796875,-3.3125 1.453125,-3 0.890625,-3 0.796875,-3 H 0.71875 v 0.21875 h 0.078125 c 0.109375,0 0.4375,-0.015625 0.734375,-0.140625 v 2.5 c 0,0.140625 0,0.203125 -0.53125,0.203125 H 0.75 V 0 c 0.265625,-0.015625 0.71875,-0.015625 1,-0.015625 0.296875,0 0.734375,0 1.015625,0.015625 v -0.21875 h -0.25 c -0.53125,0 -0.53125,-0.0625 -0.53125,-0.203125 z m 0,0" + id="id-7c51b778-070f-4b89-a68d-9247bbd1e0d7" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3184" + transform="translate(-11.934691,-3.882734)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-6" + cx="70.156799" + cy="56.775902" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,66.7235,54.4857)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{z_2}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-5"> + <defs + id="id-dd161dc7-8c43-4f06-9a21-26f3ea528e79"> + <g + id="id-867ce786-433a-4da2-985c-f4cd6863ba62"> + <symbol + overflow="visible" + id="id-122aceff-8d13-469a-b644-0d6fd18cd894"> + <path + style="stroke:none" + d="" + id="id-2cd1b095-e373-4c3f-a0aa-744195118e83" /> + </symbol> + <symbol + overflow="visible" + id="id-c8aaab59-3861-421a-b529-5baf8e5e105a"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-87b88ba1-7415-4d4b-b760-06d0f7266a0e" /> + </symbol> + <symbol + overflow="visible" + id="id-1aa2c0b5-6103-4aa2-9d79-186256e46b98"> + <path + style="stroke:none" + d="" + id="id-5b56f2fc-39dd-4f93-a95e-522f63446f1d" /> + </symbol> + <symbol + overflow="visible" + id="id-94706a17-f2b8-4015-86aa-c8b784d104c0"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-8b337c95-3244-40d9-acd0-15e8cf49b85d" /> + </symbol> + <symbol + overflow="visible" + id="id-4b1b0546-799b-4ba0-b279-6150411621c0"> + <path + style="stroke:none" + d="" + id="id-76817e90-5713-4d7a-8eea-1d9bc905ce1c" /> + </symbol> + <symbol + overflow="visible" + id="id-8c7eaeb2-7288-4b4e-9783-6b0d54556574"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-96737164-dbb3-4a15-a741-8519aff719ee" /> + </symbol> + </g> + </defs> + <g + id="id-b2f31055-228e-4d73-a8a8-dee36d48fc0f" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-e2036fc1-e798-4522-adef-b2797b0e27fd"> + <g + transform="translate(148.712,134.765)" + id="g2255"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-baa0ad4a-9471-4005-86ac-dd9317a7b9e9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-fbf7a242-0bdc-4892-a923-589de186d052"> + <g + transform="translate(154.759,136.259)" + id="g2259"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-fa03edd7-94b2-4808-ad00-70b12badf4e5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-54ec91f2-d1eb-4b65-9128-255ff5527fe4"> + <g + transform="translate(158.565,137.255)" + id="g2263"> + <path + style="stroke:none" + d="M 2.9375,-0.96875 H 2.71875 c 0,0.09375 -0.0625,0.40625 -0.140625,0.453125 -0.03125,0.03125 -0.453125,0.03125 -0.53125,0.03125 H 1.078125 C 1.40625,-0.71875 1.765625,-1 2.0625,-1.203125 c 0.453125,-0.3125 0.875,-0.59375 0.875,-1.125 0,-0.640625 -0.609375,-0.984375 -1.3125,-0.984375 -0.671875,0 -1.171875,0.375 -1.171875,0.875 0,0.25 0.21875,0.296875 0.296875,0.296875 0.125,0 0.28125,-0.09375 0.28125,-0.296875 0,-0.171875 -0.125,-0.28125 -0.28125,-0.28125 0.140625,-0.234375 0.4375,-0.375 0.765625,-0.375 0.484375,0 0.890625,0.28125 0.890625,0.765625 0,0.421875 -0.296875,0.75 -0.671875,1.0625 l -1.21875,1.03125 C 0.46875,-0.1875 0.453125,-0.1875 0.453125,-0.15625 V 0 h 2.3125 z m 0,0" + id="id-b20a4806-946f-4574-b7de-3c0e66b39dae" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3241" + transform="translate(-9.890387,-4.5650119)"> + <g + id="g3212"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-9" + cx="68.112495" + cy="82.236786" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,64.5709,79.9105)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{y}_{z_k}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-26"> + <defs + id="id-dd426ff9-7249-4fe5-ad49-8c73f7d9f037"> + <g + id="id-191a8d0d-801e-4c83-808c-0c3b14a8656f"> + <symbol + overflow="visible" + id="id-d2dbfc85-2301-46fd-9709-ae722299c440"> + <path + style="stroke:none" + d="" + id="id-bd2b6b64-d0bb-4bfd-9ee5-aa0162ccd436" /> + </symbol> + <symbol + overflow="visible" + id="id-8f6eda09-66ab-48f3-bdc5-3268f9982c5c"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-c26027ed-aa0b-445f-8a04-0b1d8586f076" /> + </symbol> + <symbol + overflow="visible" + id="id-e82a7900-b849-40c5-9d84-f91ba760191e"> + <path + style="stroke:none" + d="" + id="id-bdef97d3-91b2-431e-bcba-cd1dde53c3fd" /> + </symbol> + <symbol + overflow="visible" + id="id-96bf7acc-5861-4f0a-a6b4-5070340b1159"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-306b6f47-5f0b-477a-bc27-8fd1d14b7fd4" /> + </symbol> + <symbol + overflow="visible" + id="id-d6f36ceb-a70c-418b-b2f8-e2c8897f2e1f"> + <path + style="stroke:none" + d="" + id="id-d1c9ac07-f16e-48d4-9e4b-fcdc563bd700" /> + </symbol> + <symbol + overflow="visible" + id="id-6bdd5aca-01cb-4249-abb6-586c8fc56b95"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-bd1f25a0-c96b-4dcb-a3ff-50d4a65385e0" /> + </symbol> + </g> + </defs> + <g + id="id-9bd53b7e-64eb-47eb-aac8-3b28b0b544df" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-8a98d8ce-7feb-4c28-a5ce-32a6cc33db02"> + <g + transform="translate(148.712,134.765)" + id="g2798"> + <path + style="stroke:none" + d="m 5.046875,-3.75 c 0.0625,-0.140625 0.09375,-0.203125 0.734375,-0.203125 v -0.46875 C 5.546875,-4.40625 5.25,-4.390625 5,-4.390625 c -0.25,0 -0.703125,-0.03125 -0.90625,-0.03125 v 0.46875 c 0.015625,0 0.46875,0 0.46875,0.109375 0,0.015625 -0.046875,0.109375 -0.0625,0.125 L 3.359375,-1.265625 2.09375,-3.953125 H 2.625 v -0.46875 c -0.328125,0.015625 -1.21875,0.03125 -1.234375,0.03125 -0.28125,0 -0.71875,-0.03125 -1.125,-0.03125 v 0.46875 h 0.625 L 2.765625,0 2.53125,0.484375 C 2.3125,0.953125 2,1.640625 1.28125,1.640625 1.140625,1.640625 1.125,1.625 1.046875,1.59375 1.140625,1.5625 1.359375,1.421875 1.359375,1.0625 1.359375,0.734375 1.125,0.5 0.78125,0.5 0.515625,0.5 0.21875,0.6875 0.21875,1.078125 0.21875,1.578125 0.6875,2 1.28125,2 2.046875,2 2.625,1.375 2.90625,0.8125 Z m 0,0" + id="id-6dd91f69-45c4-455c-91b4-09d6301c4986" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-84e7ed14-ad3a-4fb5-b8a4-0244f6a9c440"> + <g + transform="translate(154.759,136.259)" + id="g2802"> + <path + style="stroke:none" + d="m 1.171875,-0.609375 c 0.1875,-0.1875 0.3125,-0.3125 0.890625,-0.796875 0.15625,-0.109375 0.671875,-0.53125 0.875,-0.71875 0.421875,-0.421875 0.6875,-0.78125 0.6875,-0.859375 0,-0.09375 -0.078125,-0.09375 -0.109375,-0.09375 -0.0625,0 -0.09375,0.015625 -0.125,0.078125 -0.21875,0.3125 -0.359375,0.421875 -0.53125,0.421875 -0.078125,0 -0.1875,0 -0.390625,-0.203125 -0.234375,-0.25 -0.390625,-0.296875 -0.546875,-0.296875 -0.5625,0 -0.9375,0.609375 -0.9375,0.8125 0,0.078125 0.0625,0.09375 0.109375,0.09375 0.09375,0 0.109375,-0.015625 0.125,-0.09375 0.109375,-0.25 0.5,-0.265625 0.609375,-0.265625 0.171875,0 0.34375,0.046875 0.4375,0.0625 0.390625,0.078125 0.4375,0.078125 0.609375,0.078125 -0.171875,0.203125 -0.296875,0.328125 -0.96875,0.84375 -0.546875,0.4375 -0.734375,0.609375 -0.859375,0.75 -0.421875,0.40625 -0.625,0.71875 -0.625,0.78125 0,0.078125 0.09375,0.078125 0.125,0.078125 0.0625,0 0.078125,0 0.109375,-0.0625 0.1875,-0.265625 0.40625,-0.421875 0.640625,-0.421875 0.09375,0 0.1875,0 0.375,0.171875 0.21875,0.21875 0.359375,0.3125 0.59375,0.3125 C 3,0.0625 3.46875,-0.78125 3.46875,-1.015625 3.46875,-1.09375 3.390625,-1.09375 3.359375,-1.09375 3.265625,-1.09375 3.25,-1.0625 3.21875,-0.984375 3.09375,-0.640625 2.6875,-0.46875 2.34375,-0.46875 2.1875,-0.46875 2,-0.515625 1.828125,-0.546875 1.515625,-0.625 1.453125,-0.625 1.328125,-0.625 c -0.015625,0 -0.109375,0 -0.15625,0.015625 z m 0,0" + id="id-4971546a-a3a0-4d8b-84c7-5fa4583361eb" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-c04b5388-16fc-459b-9339-37364a31ecab"> + <g + transform="translate(158.565,137.316)" + id="g2806"> + <path + style="stroke:none" + d="m 1.828125,-3.265625 c 0.03125,-0.078125 0.03125,-0.078125 0.03125,-0.109375 0,-0.078125 -0.078125,-0.078125 -0.15625,-0.078125 L 1.09375,-3.40625 c -0.09375,0 -0.109375,0 -0.125,0.03125 -0.015625,0.015625 -0.03125,0.078125 -0.03125,0.109375 0,0.078125 0.078125,0.078125 0.140625,0.078125 0.015625,0 0.09375,0 0.171875,0.015625 0.09375,0.015625 0.09375,0.03125 0.09375,0.0625 0,0.015625 0,0.03125 -0.015625,0.125 l -0.6875,2.75 C 0.625,-0.171875 0.625,-0.15625 0.625,-0.125 c 0,0.109375 0.078125,0.1875 0.1875,0.1875 0.1875,0 0.234375,-0.1875 0.25,-0.265625 l 0.234375,-0.90625 c 0.125,0 0.75,0.03125 0.75,0.390625 0,0.03125 0,0.046875 -0.015625,0.109375 -0.015625,0.078125 -0.015625,0.09375 -0.015625,0.125 0,0.359375 0.3125,0.546875 0.609375,0.546875 0.5,0 0.703125,-0.71875 0.703125,-0.78125 0,-0.0625 -0.078125,-0.0625 -0.109375,-0.0625 -0.078125,0 -0.09375,0.015625 -0.109375,0.109375 -0.046875,0.171875 -0.203125,0.5625 -0.46875,0.5625 -0.1875,0 -0.203125,-0.1875 -0.203125,-0.296875 0,0 0,-0.078125 0.015625,-0.15625 0.015625,-0.078125 0.03125,-0.140625 0.03125,-0.171875 0,-0.4375 -0.5625,-0.515625 -0.890625,-0.546875 0.140625,-0.078125 0.359375,-0.25 0.4375,-0.3125 0.28125,-0.21875 0.5625,-0.4375 0.84375,-0.4375 0.109375,0 0.140625,0.03125 0.171875,0.0625 0,0 -0.03125,0.015625 -0.046875,0.015625 -0.21875,0.078125 -0.21875,0.28125 -0.21875,0.296875 0,0.078125 0.0625,0.203125 0.21875,0.203125 0.09375,0 0.3125,-0.078125 0.3125,-0.359375 0,-0.234375 -0.1875,-0.390625 -0.4375,-0.390625 -0.328125,0 -0.625,0.234375 -0.984375,0.515625 -0.171875,0.140625 -0.34375,0.265625 -0.546875,0.359375 z m 0,0" + id="id-337d80fb-5433-41ca-b01f-ba48bbb16ee3" /> + </g> + </g> + </g> + </g> + </g> + </g> + <g + transform="matrix(0,0.569333,-0.569333,0,58.524851,62.464098)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\dots$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569333" + id="g3585"> + <defs + id="id-2d87e1eb-bc7d-4d81-9582-86bf8727c9c8"> + <g + id="id-71316add-b757-483c-8195-02b65d505b23"> + <symbol + overflow="visible" + id="id-c8bc3666-affb-46c2-bef9-2fbbe8cb5a5b"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-16e8a8b6-0ef9-495f-bb2a-dad69d9a779f" /> + </symbol> + <symbol + overflow="visible" + id="id-42113c59-1a6b-4fa3-a92c-5a205e35714f"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-7e639714-71bd-465b-95ea-f8586e48e3fe" /> + </symbol> + </g> + </defs> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e" + transform="translate(-149.571,-133.702)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f"> + <g + transform="translate(148.712,134.765)" + id="g3573"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be"> + <g + transform="translate(153.143,134.765)" + id="g3577"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8"> + <g + transform="translate(157.565,134.765)" + id="g3581"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3878" + transform="translate(-30.33987,0.01340608)"> + <g + id="g3262" + transform="translate(-4.3642598,-1.3114528)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1" + cx="92.458305" + cy="41.815311" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,89.9799,39.8165)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{1}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2"> + <defs + id="id-fe0395f9-cd9e-4370-972a-09b96d88acd1"> + <g + id="id-f71ea667-3b4d-4d21-ad1f-0ecb1dd3e484"> + <symbol + overflow="visible" + id="id-34dc3a3d-2276-4043-8291-b700fbc2dff1"> + <path + style="stroke:none" + d="" + id="id-9cccc023-3ff4-416e-878b-ddafd3dd0fcd" /> + </symbol> + <symbol + overflow="visible" + id="id-9bd60f18-4c4d-4ddd-b181-16f7a2d92fbc"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-d86d8910-8168-40a7-ac81-0c33df86ab0e" /> + </symbol> + <symbol + overflow="visible" + id="id-d9fa921e-ba7e-461c-9b85-204169b0b876"> + <path + style="stroke:none" + d="" + id="id-513ff48d-b30f-41d2-a80a-6d4ac5c4bdf2" /> + </symbol> + <symbol + overflow="visible" + id="id-ba38b8ec-61ee-49f7-aa7b-b60f1f54849e"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-99aee4ff-3e86-462c-8595-98407ac2efa0" /> + </symbol> + </g> + </defs> + <g + id="id-7457a538-d31c-4782-b54c-900abce06f81" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-9046b2be-23a5-484a-aa3e-6ee99c22343e"> + <g + transform="translate(148.712,134.765)" + id="g3356"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-639a072d-d722-49fa-9a16-92456d870490" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-064cff21-d081-4fc0-8c9f-3ad5839426f9"> + <g + transform="translate(154.759,136.259)" + id="g3360"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-80e94a18-ccd4-4ad2-9c5c-5e4866b6db59" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3283" + transform="translate(-3.9925634,-4.8119651)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-1" + cx="92.086609" + cy="57.705132" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,89.5475,55.7064)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{2}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-5"> + <defs + id="id-77f68d2a-c2f9-48c8-8993-8efb8b34d9f5"> + <g + id="id-abe8a3bc-85ee-4f02-a887-c867e14959b8"> + <symbol + overflow="visible" + id="id-fbacd89e-2090-4b40-a74a-3dfe2fb70b5e"> + <path + style="stroke:none" + d="" + id="id-ecbe8803-8e5e-4431-855d-f86b824a37ac" /> + </symbol> + <symbol + overflow="visible" + id="id-67555b5d-488a-498e-aa6d-f0685007fa6a"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-45b8292f-2141-4717-8b93-13cc4b1e7600" /> + </symbol> + <symbol + overflow="visible" + id="id-1ff3e1b2-c563-4d19-8308-f34ee2684edc"> + <path + style="stroke:none" + d="" + id="id-332a3b9e-8bd7-485c-8536-1775c6ad0998" /> + </symbol> + <symbol + overflow="visible" + id="id-a04d510d-e57c-4217-a9e3-a98a6de9bd7a"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-033d1653-6b73-4c76-834d-982626218923" /> + </symbol> + </g> + </defs> + <g + id="id-d2e8e97e-f23d-45de-b147-830116cd626e" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-254e875d-a383-4b50-8a37-10e7c9445709"> + <g + transform="translate(148.712,134.765)" + id="g3884"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-c116ffb0-dfc7-45af-adac-3b5cd07f2b26" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ea7e390c-c93f-4488-b1dd-c7c5f9bfa3f0"> + <g + transform="translate(154.759,136.259)" + id="g3888"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-8bb5c526-c137-4e14-bf30-a590d6b27d3f" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g3304" + transform="translate(-2.4128744,1.5679074)"> + <circle + style="fill:none;stroke:#000000;stroke-width:0.414999;stop-color:#000000" + id="path833-1-1-9" + cx="90.50692" + cy="76.103867" + r="4.4921422" /> + <g + transform="matrix(0.5541,0,0,0.584984,87.0889,74.1052)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\mathbf{x}_{N}$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:inkscapeversion="1.0.2" + ns3:jacobian_sqrt="0.569332621935543" + id="g866-2-5-0"> + <defs + id="id-60b6648a-17d8-4c9f-babe-d2cc8e7a2b92"> + <g + id="id-505fedce-5614-4920-9da1-a16e0a782c8b"> + <symbol + overflow="visible" + id="id-83debd16-ddeb-4494-8c91-20135ca817ab"> + <path + style="stroke:none" + d="" + id="id-10392253-c7a5-44c1-b983-0c981604bc1a" /> + </symbol> + <symbol + overflow="visible" + id="id-ce12f4cb-7915-45f5-9078-f61e1273cb01"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-9a0d67a2-032d-4a9d-80ab-3ff8916e2a30" /> + </symbol> + <symbol + overflow="visible" + id="id-c4497416-eaf0-40cc-9e67-394437f3270e"> + <path + style="stroke:none" + d="" + id="id-71c066d5-98f1-4546-9369-b1ca0f220039" /> + </symbol> + <symbol + overflow="visible" + id="id-99fc2c53-022a-4bb8-bc47-ca77504fa07c"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-138fb327-4d56-45af-bfe7-27e73d6bd174" /> + </symbol> + </g> + </defs> + <g + id="id-1eda3810-3b2c-4771-9830-c066bd784ae9" + transform="translate(-148.931,-130.343)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5cac368a-b442-4fef-b8e7-fe85e02ccb68"> + <g + transform="translate(148.712,134.765)" + id="g4412"> + <path + style="stroke:none" + d="M 3.453125,-2.453125 4.609375,-3.75 C 4.75,-3.890625 4.8125,-3.953125 5.625,-3.953125 v -0.46875 c -0.34375,0.015625 -0.859375,0.03125 -0.90625,0.03125 -0.25,0 -0.75,-0.03125 -1.03125,-0.03125 v 0.46875 c 0.140625,0 0.265625,0.015625 0.375,0.078125 -0.03125,0.0625 -0.03125,0.09375 -0.078125,0.125 L 3.15625,-2.8125 2.171875,-3.953125 h 0.40625 v -0.46875 c -0.265625,0 -0.890625,0.03125 -1.21875,0.03125 -0.3125,0 -0.765625,-0.03125 -1.09375,-0.03125 v 0.46875 h 0.71875 L 2.53125,-2.125 1.21875,-0.65625 c -0.15625,0.1875 -0.515625,0.1875 -1,0.1875 V 0 c 0.34375,-0.015625 0.875,-0.03125 0.921875,-0.03125 0.25,0 0.828125,0.015625 1.015625,0.03125 v -0.46875 c -0.171875,0 -0.359375,-0.046875 -0.359375,-0.109375 0,-0.015625 0,-0.015625 0.0625,-0.09375 l 0.96875,-1.09375 1.09375,1.296875 H 3.53125 V 0 c 0.265625,-0.015625 0.875,-0.03125 1.203125,-0.03125 0.3125,0 0.765625,0.015625 1.09375,0.03125 V -0.46875 H 5.125 Z m 0,0" + id="id-ef3a3390-3e56-44a2-a42f-26c88efb896e" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-6454910b-7317-4b34-887b-30b4dcf24510"> + <g + transform="translate(154.759,136.259)" + id="g4416"> + <path + style="stroke:none" + d="M 5.8125,-4 C 5.875,-4.265625 6,-4.5 6.546875,-4.515625 c 0.03125,0 0.140625,0 0.140625,-0.140625 0,-0.046875 -0.03125,-0.109375 -0.109375,-0.109375 -0.21875,0 -0.484375,0.03125 -0.71875,0.03125 -0.171875,0 -0.5625,-0.03125 -0.734375,-0.03125 -0.03125,0 -0.140625,0 -0.140625,0.15625 0,0.09375 0.09375,0.09375 0.15625,0.09375 0.328125,0.015625 0.4375,0.125 0.4375,0.296875 0,0.046875 0,0.09375 -0.03125,0.15625 l -0.75,3.046875 -1.765625,-3.625 c -0.0625,-0.125 -0.078125,-0.125 -0.25,-0.125 H 1.828125 c -0.125,0 -0.21875,0 -0.21875,0.15625 0,0.09375 0.078125,0.09375 0.234375,0.09375 0.140625,0 0.296875,0.015625 0.4375,0.046875 L 1.359375,-0.75 c -0.0625,0.265625 -0.1875,0.484375 -0.734375,0.5 -0.046875,0 -0.140625,0 -0.140625,0.140625 C 0.484375,-0.03125 0.53125,0 0.578125,0 0.8125,0 1.078125,-0.03125 1.3125,-0.03125 1.484375,-0.03125 1.875,0 2.046875,0 2.125,0 2.1875,-0.03125 2.1875,-0.140625 2.1875,-0.25 2.109375,-0.25 2.03125,-0.25 c -0.4375,-0.015625 -0.4375,-0.203125 -0.4375,-0.296875 0,-0.03125 0,-0.0625 0.015625,-0.171875 l 0.90625,-3.5625 2.03125,4.15625 C 4.59375,0 4.625,0 4.703125,0 4.8125,0 4.8125,-0.015625 4.84375,-0.140625 Z m 0,0" + id="id-bcce5074-f926-4564-be67-9314782824d1" /> + </g> + </g> + </g> + </g> + </g> + <g + transform="matrix(0,0.569333,-0.569333,0,88.396788,62.464097)" + ns3:version="1.8.1" + ns3:texconverter="pdflatex" + ns3:pdfconverter="inkscape" + ns3:text="$\\dots$" + ns3:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns3:scale="1.613855830703636" + ns3:alignment="middle center" + ns3:stroke-to-path="0" + ns3:jacobian_sqrt="0.569333" + id="g3585-1"> + <defs + id="id-2d87e1eb-bc7d-4d81-9582-86bf8727c9c8-0"> + <g + id="g3668"> + <symbol + overflow="visible" + id="symbol3662"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path3660" /> + </symbol> + <symbol + overflow="visible" + id="symbol3666"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="path3664" /> + </symbol> + </g> + </defs> + <g + id="id-23aff8e1-1381-4a2c-abe7-6876395be91e-4" + transform="translate(-149.571,-133.702)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b54ebfc-dda4-4ec4-bcb2-23140a03764f-7"> + <g + transform="translate(148.712,134.765)" + id="g3573-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-72082536-97ab-43a3-b518-c109a83a7e12-3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-cce936cb-daec-4765-a3e4-f9a896a5c2be-1"> + <g + transform="translate(153.143,134.765)" + id="g3577-7"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-10f522ad-8f94-43e2-a1c5-58b79872198f-5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-35f841a6-d98a-45f1-b1da-d546a3d5cbe8-9"> + <g + transform="translate(157.565,134.765)" + id="g3581-6"> + <path + style="stroke:none;stroke-width:0" + d="m 1.90625,-0.53125 c 0,-0.28125 -0.234375,-0.53125 -0.515625,-0.53125 -0.296875,0 -0.53125,0.25 -0.53125,0.53125 C 0.859375,-0.234375 1.09375,0 1.390625,0 1.671875,0 1.90625,-0.234375 1.90625,-0.53125 Z m 0,0" + id="id-0465aa74-fcdf-4786-a696-48e096109a98-2" /> + </g> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4270)" + d="m 62.113175,40.390646 18.588768,0.148211" + id="path4260" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4318)" + d="m 81.084009,52.969117 -18.356627,0.05513" + id="path4308" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4372)" + d="M 81.113378,77.401858 62.67106,77.753704" + id="path4362" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4432)" + d="M 62.065902,41.700487 80.97172,50.828768" + id="path4422" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4498)" + d="M 61.085219,56.07705 81.587701,74.497202" + id="path4488" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4570)" + d="M 82.377799,55.734693 62.118384,75.751012" + id="path4560" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4648)" + d="M 81.926913,42.831499 61.570586,50.069161" + id="path4638" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4732)" + d="M 61.043684,43.711029 83.776697,73.154867" + id="path4722" /> + <path + style="fill:none;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4822)" + d="m 60.350672,74.205948 22.43012,-29.72668" + id="path4812" /> + </g> +</svg> diff --git a/doc/optimal_layout_report/figures/naive.pdf b/doc/optimal_layout_report/figures/naive.pdf Binary files differnew file mode 100644 index 00000000..f32e4273 --- /dev/null +++ b/doc/optimal_layout_report/figures/naive.pdf diff --git a/doc/optimal_layout_report/figures/naive.svg b/doc/optimal_layout_report/figures/naive.svg new file mode 100644 index 00000000..0a40c45f --- /dev/null +++ b/doc/optimal_layout_report/figures/naive.svg @@ -0,0 +1,3899 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:ns4="http://www.iki.fi/pav/software/textext/" + 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:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="210mm" + height="297mm" + viewBox="0 0 210 297" + version="1.1" + id="svg8" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)" + sodipodi:docname="naive.svg"> + <defs + id="defs2"> + <marker + style="overflow:visible" + id="Arrow1Sstart" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Sstart" + inkscape:isstock="true"> + <path + transform="scale(0.2) translate(6,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="path16095" /> + </marker> + <marker + style="overflow:visible;" + id="Arrow1Send" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Send" + inkscape:isstock="true"> + <path + transform="scale(0.2) rotate(180) translate(6,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="path16098" /> + </marker> + <marker + style="overflow:visible" + id="Arrow2Mstart" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow2Mstart" + inkscape:isstock="true"> + <path + transform="scale(0.6) translate(0,0)" + d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z " + style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round;stroke:#000000;stroke-opacity:1;fill:#000000;fill-opacity:1" + id="path16107" /> + </marker> + <marker + style="overflow:visible" + id="Arrow1Mstart" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="Arrow1Mstart" + inkscape:isstock="true"> + <path + transform="scale(0.4) translate(10,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="path16089" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + id="path943" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondLend" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="EmptyDiamondLend" + inkscape:isstock="true"> + <path + transform="scale(0.8) translate(-7,0)" + style="fill-rule:evenodd;fill:#ffffff;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 L -7.0710894,0 L 0,7.0710589 L 7.0710462,0 L 0,-7.0710768 z " + id="path961" /> + </marker> + <marker + style="overflow:visible" + id="marker1859" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="DotL" + inkscape:isstock="true"> + <path + transform="matrix(0.8,0,0,0.8,5.92,0.8)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z" + id="path1857" /> + </marker> + <marker + style="overflow:visible" + id="DotL" + refX="0.0" + refY="0.0" + orient="auto" + inkscape:stockid="DotL" + inkscape:isstock="true"> + <path + transform="scale(0.8) translate(7.4, 1)" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" + d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z " + id="path898" /> + </marker> + <marker + style="overflow:visible" + id="marker1207-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="DotL" + inkscape:isstock="true"> + <path + transform="matrix(0.8,0,0,0.8,5.92,0.8)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z" + id="path1205-3" /> + </marker> + <marker + style="overflow:visible" + id="marker1207-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="DotL" + inkscape:isstock="true"> + <path + transform="matrix(0.8,0,0,0.8,5.92,0.8)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z" + id="path1205-2" /> + </marker> + <marker + style="overflow:visible" + id="marker1207-5-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="DotL" + inkscape:isstock="true"> + <path + transform="matrix(0.8,0,0,0.8,5.92,0.8)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z" + id="path1205-3-1" /> + </marker> + <marker + style="overflow:visible" + id="marker1207-0" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="DotL" + inkscape:isstock="true"> + <path + transform="matrix(0.8,0,0,0.8,5.92,0.8)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z" + id="path1205-9" /> + </marker> + <marker + style="overflow:visible" + id="marker1207-5-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="DotL" + inkscape:isstock="true"> + <path + transform="matrix(0.8,0,0,0.8,5.92,0.8)" + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z" + id="path1205-3-6" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-1" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-8" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6" /> + </marker> + <g + id="id-bff70df4-6322-4cef-b2f2-eb529fa18944-6"> + <symbol + overflow="visible" + id="id-bf511177-5ad3-4f29-8068-1cfd33c05d66-2"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-b65f5d62-bdbe-425c-b3f2-2e340f258b59-9" /> + </symbol> + <symbol + overflow="visible" + id="id-16eb84ac-14b0-4bd3-a0f6-9f965ee31cd0-1"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cee4ec54-27ef-45a2-b751-fd07d9e838e0-2" /> + </symbol> + <symbol + overflow="visible" + id="id-9a0f12f5-22d3-4c59-ab65-b00f783cf86e-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-3b000875-96d2-4155-9b0c-e63bba75f62a-0" /> + </symbol> + <symbol + overflow="visible" + id="id-dfe71ac3-1330-45aa-a1b7-6592aa5cbd04-9"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-32a2e394-a19b-40ce-a1b4-0551d665a7d1-3" /> + </symbol> + </g> + <marker + style="overflow:visible" + id="EmptyDiamondL-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-9" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3-2" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6-0" /> + </marker> + <g + id="id-bff70df4-6322-4cef-b2f2-eb529fa18944-2"> + <symbol + overflow="visible" + id="id-bf511177-5ad3-4f29-8068-1cfd33c05d66-28"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-b65f5d62-bdbe-425c-b3f2-2e340f258b59-97" /> + </symbol> + <symbol + overflow="visible" + id="id-16eb84ac-14b0-4bd3-a0f6-9f965ee31cd0-3"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cee4ec54-27ef-45a2-b751-fd07d9e838e0-6" /> + </symbol> + <symbol + overflow="visible" + id="id-9a0f12f5-22d3-4c59-ab65-b00f783cf86e-1"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-3b000875-96d2-4155-9b0c-e63bba75f62a-2" /> + </symbol> + <symbol + overflow="visible" + id="id-dfe71ac3-1330-45aa-a1b7-6592aa5cbd04-93"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-32a2e394-a19b-40ce-a1b4-0551d665a7d1-1" /> + </symbol> + </g> + <g + id="g1774-6"> + <symbol + overflow="visible" + id="symbol1760-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1758-2" /> + </symbol> + <symbol + overflow="visible" + id="symbol1764-0"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path1762-6" /> + </symbol> + <symbol + overflow="visible" + id="symbol1768-1"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1766-5" /> + </symbol> + <symbol + overflow="visible" + id="symbol1772-5"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path1770-4" /> + </symbol> + </g> + <marker + style="overflow:visible" + id="EmptyDiamondL-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-5" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3-25" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6-4" /> + </marker> + <g + id="id-bff70df4-6322-4cef-b2f2-eb529fa18944-8"> + <symbol + overflow="visible" + id="id-bf511177-5ad3-4f29-8068-1cfd33c05d66-6"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-b65f5d62-bdbe-425c-b3f2-2e340f258b59-8" /> + </symbol> + <symbol + overflow="visible" + id="id-16eb84ac-14b0-4bd3-a0f6-9f965ee31cd0-8"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cee4ec54-27ef-45a2-b751-fd07d9e838e0-4" /> + </symbol> + <symbol + overflow="visible" + id="id-9a0f12f5-22d3-4c59-ab65-b00f783cf86e-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-3b000875-96d2-4155-9b0c-e63bba75f62a-1" /> + </symbol> + <symbol + overflow="visible" + id="id-dfe71ac3-1330-45aa-a1b7-6592aa5cbd04-4"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-32a2e394-a19b-40ce-a1b4-0551d665a7d1-9" /> + </symbol> + </g> + <g + id="g1774-8"> + <symbol + overflow="visible" + id="symbol1760-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1758-1" /> + </symbol> + <symbol + overflow="visible" + id="symbol1764-7"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path1762-2" /> + </symbol> + <symbol + overflow="visible" + id="symbol1768-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1766-2" /> + </symbol> + <symbol + overflow="visible" + id="symbol1772-2"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path1770-6" /> + </symbol> + </g> + <marker + style="overflow:visible" + id="EmptyDiamondL-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-0" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3-9" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6-1" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-7-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-9-7" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3-2-1" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6-0-1" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-4-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-5-9" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3-25-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6-4-7" /> + </marker> + <g + id="id-bff70df4-6322-4cef-b2f2-eb529fa18944-3"> + <symbol + overflow="visible" + id="id-bf511177-5ad3-4f29-8068-1cfd33c05d66-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-b65f5d62-bdbe-425c-b3f2-2e340f258b59-4" /> + </symbol> + <symbol + overflow="visible" + id="id-16eb84ac-14b0-4bd3-a0f6-9f965ee31cd0-81"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cee4ec54-27ef-45a2-b751-fd07d9e838e0-29" /> + </symbol> + <symbol + overflow="visible" + id="id-9a0f12f5-22d3-4c59-ab65-b00f783cf86e-39"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-3b000875-96d2-4155-9b0c-e63bba75f62a-08" /> + </symbol> + <symbol + overflow="visible" + id="id-dfe71ac3-1330-45aa-a1b7-6592aa5cbd04-8"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-32a2e394-a19b-40ce-a1b4-0551d665a7d1-5" /> + </symbol> + </g> + <g + id="g1774-4"> + <symbol + overflow="visible" + id="symbol1760-8"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1758-10" /> + </symbol> + <symbol + overflow="visible" + id="symbol1764-3"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path1762-0" /> + </symbol> + <symbol + overflow="visible" + id="symbol1768-4"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1766-4" /> + </symbol> + <symbol + overflow="visible" + id="symbol1772-4"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path1770-47" /> + </symbol> + </g> + <g + id="id-7b56b902-8866-4577-b5da-ecfb51bdf6f9-5"> + <symbol + overflow="visible" + id="id-3e5877d5-f4e1-472d-ad63-1055980d8386-7"> + <path + style="stroke:none" + d="" + id="id-f143eef6-d9a8-48f7-aca8-e6538b6fab70-4" /> + </symbol> + <symbol + overflow="visible" + id="id-0bc1646c-7d22-4518-85b7-7b4eb12d7991-1"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-e28260b8-c5fd-4ceb-ae5e-454f1753865c-8" /> + </symbol> + <symbol + overflow="visible" + id="id-29f9d707-252a-4b91-b32f-da0fa5a665a9-5"> + <path + style="stroke:none" + d="" + id="id-5591ae31-445d-45f3-ae87-90c1426801c2-9" /> + </symbol> + <symbol + overflow="visible" + id="id-a02c79ac-4833-46e7-925f-e4a40d6224f1-7"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-d0e16da0-84ab-4c10-885d-dd101d01d6bc-5" /> + </symbol> + </g> + <g + id="id-2b5d3ab8-df6d-4c56-84de-0c679fadd19e-3"> + <symbol + overflow="visible" + id="id-665acd82-83c0-47bf-9e6f-5812bd595525-8"> + <path + style="stroke:none" + d="" + id="id-802c0224-ca95-4fc3-b86b-e1dd6e515f4c-6" /> + </symbol> + <symbol + overflow="visible" + id="id-45128bd5-8125-471f-b95e-e1c8b9a9b715-0"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-c0d07a42-b161-466e-98fb-56a8a0c00c90-4" /> + </symbol> + <symbol + overflow="visible" + id="id-63ea8027-5e29-4fa5-b9db-e81d1c7a33cc-8"> + <path + style="stroke:none" + d="" + id="id-7140c39f-b29d-4f37-8556-9c617be6d2dd-8" /> + </symbol> + <symbol + overflow="visible" + id="id-4dd45505-10f1-44e6-9b72-7809753922eb-8"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-69043952-8323-4b78-b627-deb20a2b2221-9" /> + </symbol> + </g> + <g + id="id-69101753-94b7-4873-a3de-ba7b8209d990-4"> + <symbol + overflow="visible" + id="id-a4fedb3d-069b-4d70-83b1-ae1f2daa2385-0"> + <path + style="stroke:none" + d="" + id="id-3046391b-4187-4be6-a912-d0505a66eb38-5" /> + </symbol> + <symbol + overflow="visible" + id="id-be0e0a31-e1c3-4836-a7d1-2fc7dbdafac3-9"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-86d33dad-f2f7-418c-b83f-02f4c9bc7aeb-4" /> + </symbol> + <symbol + overflow="visible" + id="id-deb89c92-53c2-46ce-abcc-fe4828c3d78c-6"> + <path + style="stroke:none" + d="" + id="id-f8c129ac-9366-4d46-a498-a6af5a7b0df1-9" /> + </symbol> + <symbol + overflow="visible" + id="id-fcd4a719-1594-4896-89dd-9dd04b3dab86-2"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-1ec7f68d-30dc-4659-bb62-b9ac49b4a1b4-2" /> + </symbol> + </g> + <g + id="id-c9cd1e12-25e4-417c-a906-010fda19535d-3"> + <symbol + overflow="visible" + id="id-4d466315-5777-4e4e-9fc0-3db80afdf07d-6"> + <path + style="stroke:none" + d="" + id="id-152d50bf-2f53-40a8-b30b-f913378a3609-8" /> + </symbol> + <symbol + overflow="visible" + id="id-6cc5f286-cfc6-4c8a-ae12-29ffa839af48-0"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cf567697-b6cd-4f03-a190-84d8e40101b6-2" /> + </symbol> + <symbol + overflow="visible" + id="id-db2d4f7f-7daf-49c5-a630-3bda61f0be82-1"> + <path + style="stroke:none" + d="" + id="id-b4fd64dc-2d9f-4046-9b52-06c81f8758a4-0" /> + </symbol> + <symbol + overflow="visible" + id="id-b4ff667c-0374-498a-8386-69eef1264b90-5"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-a2e192af-e89c-416a-aec3-b76af30c1df0-1" /> + </symbol> + </g> + <marker + style="overflow:visible" + id="EmptyDiamondL-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-2" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3-5" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6-8" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-7-6" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-9-2" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3-2-8" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6-0-4" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-4-7" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-5-2" /> + </marker> + <marker + style="overflow:visible" + id="EmptyDiamondL-3-25-4" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="EmptyDiamondL" + inkscape:isstock="true"> + <path + transform="scale(0.8)" + style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1" + d="M 0,-7.0710768 -7.0710894,0 0,7.0710589 7.0710462,0 Z" + id="path943-6-4-0" /> + </marker> + <g + id="id-bff70df4-6322-4cef-b2f2-eb529fa18944-1"> + <symbol + overflow="visible" + id="id-bf511177-5ad3-4f29-8068-1cfd33c05d66-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-b65f5d62-bdbe-425c-b3f2-2e340f258b59-1" /> + </symbol> + <symbol + overflow="visible" + id="id-16eb84ac-14b0-4bd3-a0f6-9f965ee31cd0-10"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cee4ec54-27ef-45a2-b751-fd07d9e838e0-3" /> + </symbol> + <symbol + overflow="visible" + id="id-9a0f12f5-22d3-4c59-ab65-b00f783cf86e-4"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-3b000875-96d2-4155-9b0c-e63bba75f62a-03" /> + </symbol> + <symbol + overflow="visible" + id="id-dfe71ac3-1330-45aa-a1b7-6592aa5cbd04-91"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-32a2e394-a19b-40ce-a1b4-0551d665a7d1-96" /> + </symbol> + </g> + <g + id="g1774-67"> + <symbol + overflow="visible" + id="symbol1760-5"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1758-6" /> + </symbol> + <symbol + overflow="visible" + id="symbol1764-9"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path1762-8" /> + </symbol> + <symbol + overflow="visible" + id="symbol1768-72"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1766-8" /> + </symbol> + <symbol + overflow="visible" + id="symbol1772-29"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path1770-9" /> + </symbol> + </g> + <g + id="id-7b56b902-8866-4577-b5da-ecfb51bdf6f9-1"> + <symbol + overflow="visible" + id="id-3e5877d5-f4e1-472d-ad63-1055980d8386-4"> + <path + style="stroke:none" + d="" + id="id-f143eef6-d9a8-48f7-aca8-e6538b6fab70-9" /> + </symbol> + <symbol + overflow="visible" + id="id-0bc1646c-7d22-4518-85b7-7b4eb12d7991-10"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-e28260b8-c5fd-4ceb-ae5e-454f1753865c-7" /> + </symbol> + <symbol + overflow="visible" + id="id-29f9d707-252a-4b91-b32f-da0fa5a665a9-58"> + <path + style="stroke:none" + d="" + id="id-5591ae31-445d-45f3-ae87-90c1426801c2-7" /> + </symbol> + <symbol + overflow="visible" + id="id-a02c79ac-4833-46e7-925f-e4a40d6224f1-0"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-d0e16da0-84ab-4c10-885d-dd101d01d6bc-4" /> + </symbol> + </g> + <g + id="id-2b5d3ab8-df6d-4c56-84de-0c679fadd19e-0"> + <symbol + overflow="visible" + id="id-665acd82-83c0-47bf-9e6f-5812bd595525-5"> + <path + style="stroke:none" + d="" + id="id-802c0224-ca95-4fc3-b86b-e1dd6e515f4c-5" /> + </symbol> + <symbol + overflow="visible" + id="id-45128bd5-8125-471f-b95e-e1c8b9a9b715-2"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-c0d07a42-b161-466e-98fb-56a8a0c00c90-9" /> + </symbol> + <symbol + overflow="visible" + id="id-63ea8027-5e29-4fa5-b9db-e81d1c7a33cc-0"> + <path + style="stroke:none" + d="" + id="id-7140c39f-b29d-4f37-8556-9c617be6d2dd-2" /> + </symbol> + <symbol + overflow="visible" + id="id-4dd45505-10f1-44e6-9b72-7809753922eb-83"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-69043952-8323-4b78-b627-deb20a2b2221-8" /> + </symbol> + </g> + <g + id="id-69101753-94b7-4873-a3de-ba7b8209d990-9"> + <symbol + overflow="visible" + id="id-a4fedb3d-069b-4d70-83b1-ae1f2daa2385-9"> + <path + style="stroke:none" + d="" + id="id-3046391b-4187-4be6-a912-d0505a66eb38-3" /> + </symbol> + <symbol + overflow="visible" + id="id-be0e0a31-e1c3-4836-a7d1-2fc7dbdafac3-6"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-86d33dad-f2f7-418c-b83f-02f4c9bc7aeb-0" /> + </symbol> + <symbol + overflow="visible" + id="id-deb89c92-53c2-46ce-abcc-fe4828c3d78c-5"> + <path + style="stroke:none" + d="" + id="id-f8c129ac-9366-4d46-a498-a6af5a7b0df1-0" /> + </symbol> + <symbol + overflow="visible" + id="id-fcd4a719-1594-4896-89dd-9dd04b3dab86-29"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-1ec7f68d-30dc-4659-bb62-b9ac49b4a1b4-4" /> + </symbol> + </g> + <g + id="id-c9cd1e12-25e4-417c-a906-010fda19535d-2"> + <symbol + overflow="visible" + id="id-4d466315-5777-4e4e-9fc0-3db80afdf07d-2"> + <path + style="stroke:none" + d="" + id="id-152d50bf-2f53-40a8-b30b-f913378a3609-6" /> + </symbol> + <symbol + overflow="visible" + id="id-6cc5f286-cfc6-4c8a-ae12-29ffa839af48-4"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cf567697-b6cd-4f03-a190-84d8e40101b6-1" /> + </symbol> + <symbol + overflow="visible" + id="id-db2d4f7f-7daf-49c5-a630-3bda61f0be82-2"> + <path + style="stroke:none" + d="" + id="id-b4fd64dc-2d9f-4046-9b52-06c81f8758a4-8" /> + </symbol> + <symbol + overflow="visible" + id="id-b4ff667c-0374-498a-8386-69eef1264b90-8"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-a2e192af-e89c-416a-aec3-b76af30c1df0-9" /> + </symbol> + </g> + <g + id="id-6665708f-288d-4525-92eb-a06c4892867b-3"> + <symbol + overflow="visible" + id="id-dd44434a-953f-4b45-92a4-9abe7ef9d3ae-8"> + <path + style="stroke:none" + d="" + id="id-9ac9378b-2d2d-440f-a1d5-af260cb7e544-0" /> + </symbol> + <symbol + overflow="visible" + id="id-dbde01f5-f4e2-40b7-88a3-b8851429abee-4"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-d843451a-a637-4d3a-943f-db8d14113881-7" /> + </symbol> + <symbol + overflow="visible" + id="id-1043abfb-ae0c-4c87-a0c9-f8e738a6eda9-6"> + <path + style="stroke:none" + d="" + id="id-85cedea2-f5e6-4191-adf4-ded1c4c32acc-8" /> + </symbol> + <symbol + overflow="visible" + id="id-7e05db1f-d678-46b2-9ab7-e9f2a82049bc-9"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-67bf08a2-065c-450a-8490-b9d084062846-0" /> + </symbol> + </g> + <g + id="id-7b56b902-8866-4577-b5da-ecfb51bdf6f9-6"> + <symbol + overflow="visible" + id="id-3e5877d5-f4e1-472d-ad63-1055980d8386-5"> + <path + style="stroke:none" + d="" + id="id-f143eef6-d9a8-48f7-aca8-e6538b6fab70-2" /> + </symbol> + <symbol + overflow="visible" + id="id-0bc1646c-7d22-4518-85b7-7b4eb12d7991-6"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-e28260b8-c5fd-4ceb-ae5e-454f1753865c-5" /> + </symbol> + <symbol + overflow="visible" + id="id-29f9d707-252a-4b91-b32f-da0fa5a665a9-8"> + <path + style="stroke:none" + d="" + id="id-5591ae31-445d-45f3-ae87-90c1426801c2-79" /> + </symbol> + <symbol + overflow="visible" + id="id-a02c79ac-4833-46e7-925f-e4a40d6224f1-6"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-d0e16da0-84ab-4c10-885d-dd101d01d6bc-0" /> + </symbol> + </g> + <g + id="id-0e4d47f0-68c0-4acd-9fe2-14ede5ac4464-2"> + <symbol + overflow="visible" + id="id-4c254f50-cdc5-4053-83de-01ff30672e43-4"> + <path + style="stroke:none" + d="" + id="id-7fbf67cc-4273-4944-be5b-4ab85569977e-7" /> + </symbol> + <symbol + overflow="visible" + id="id-1efbc5ff-fb42-4154-a235-97d4578b6849-9"> + <path + style="stroke:none" + d="m 4.25,-6.046875 c 0.078125,-0.28125 0.109375,-0.34375 0.234375,-0.375 0.09375,-0.015625 0.421875,-0.015625 0.625,-0.015625 1.015625,0 1.453125,0.03125 1.453125,0.8125 0,0.15625 -0.03125,0.546875 -0.078125,0.796875 0,0.046875 -0.03125,0.15625 -0.03125,0.1875 0,0.0625 0.03125,0.140625 0.125,0.140625 0.109375,0 0.125,-0.078125 0.15625,-0.234375 L 7,-6.46875 C 7.015625,-6.515625 7.015625,-6.609375 7.015625,-6.640625 7.015625,-6.75 6.921875,-6.75 6.75,-6.75 H 1.21875 c -0.234375,0 -0.25,0.015625 -0.328125,0.203125 l -0.59375,1.75 c 0,0.015625 -0.0625,0.15625 -0.0625,0.1875 0,0.046875 0.0625,0.109375 0.125,0.109375 0.09375,0 0.109375,-0.0625 0.171875,-0.21875 C 1.0625,-6.265625 1.328125,-6.4375 2.796875,-6.4375 H 3.1875 c 0.28125,0 0.28125,0.03125 0.28125,0.125 0,0.046875 -0.03125,0.171875 -0.046875,0.203125 L 2.09375,-0.78125 C 2,-0.421875 1.96875,-0.3125 0.90625,-0.3125 c -0.359375,0 -0.421875,0 -0.421875,0.1875 C 0.484375,0 0.59375,0 0.65625,0 c 0.265625,0 0.546875,-0.015625 0.8125,-0.015625 0.28125,0 0.578125,-0.015625 0.859375,-0.015625 0.28125,0 0.546875,0.015625 0.828125,0.015625 C 3.4375,-0.015625 3.734375,0 4.015625,0 c 0.09375,0 0.21875,0 0.21875,-0.203125 0,-0.109375 -0.078125,-0.109375 -0.34375,-0.109375 -0.234375,0 -0.375,0 -0.625,-0.015625 -0.296875,-0.03125 -0.375,-0.0625 -0.375,-0.21875 0,-0.015625 0,-0.0625 0.046875,-0.203125 z m 0,0" + id="id-62288179-3c36-4f09-83a2-0ed7f09ba897-3" /> + </symbol> + <symbol + overflow="visible" + id="id-510b55d0-476a-49c1-a6bf-4c152294ca51-9"> + <path + style="stroke:none" + d="" + id="id-14281c3c-de0f-4bf7-979b-05462753b978-2" /> + </symbol> + <symbol + overflow="visible" + id="id-5a487d30-b5c6-4679-bdc4-81122ed9a222-8"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-f6397913-560e-447a-9a39-8fb9345d39da-3" /> + </symbol> + </g> + <g + id="id-bff70df4-6322-4cef-b2f2-eb529fa18944-25"> + <symbol + overflow="visible" + id="id-bf511177-5ad3-4f29-8068-1cfd33c05d66-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-b65f5d62-bdbe-425c-b3f2-2e340f258b59-49" /> + </symbol> + <symbol + overflow="visible" + id="id-16eb84ac-14b0-4bd3-a0f6-9f965ee31cd0-9"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cee4ec54-27ef-45a2-b751-fd07d9e838e0-45" /> + </symbol> + <symbol + overflow="visible" + id="id-9a0f12f5-22d3-4c59-ab65-b00f783cf86e-9"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-3b000875-96d2-4155-9b0c-e63bba75f62a-3" /> + </symbol> + <symbol + overflow="visible" + id="id-dfe71ac3-1330-45aa-a1b7-6592aa5cbd04-5"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-32a2e394-a19b-40ce-a1b4-0551d665a7d1-7" /> + </symbol> + </g> + <g + id="id-7b56b902-8866-4577-b5da-ecfb51bdf6f9-4"> + <symbol + overflow="visible" + id="id-3e5877d5-f4e1-472d-ad63-1055980d8386-9"> + <path + style="stroke:none" + d="" + id="id-f143eef6-d9a8-48f7-aca8-e6538b6fab70-0" /> + </symbol> + <symbol + overflow="visible" + id="id-0bc1646c-7d22-4518-85b7-7b4eb12d7991-2"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-e28260b8-c5fd-4ceb-ae5e-454f1753865c-0" /> + </symbol> + <symbol + overflow="visible" + id="id-29f9d707-252a-4b91-b32f-da0fa5a665a9-1"> + <path + style="stroke:none" + d="" + id="id-5591ae31-445d-45f3-ae87-90c1426801c2-96" /> + </symbol> + <symbol + overflow="visible" + id="id-a02c79ac-4833-46e7-925f-e4a40d6224f1-2"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-d0e16da0-84ab-4c10-885d-dd101d01d6bc-1" /> + </symbol> + </g> + <g + id="id-80d0c048-18de-47d6-bfc7-08ad18ee361d-6"> + <symbol + overflow="visible" + id="id-0b41afc7-0269-4345-80f4-73e127106311-0"> + <path + style="stroke:none" + d="" + id="id-d5da8a58-3faf-4451-99b0-0e50003f15d3-7" /> + </symbol> + <symbol + overflow="visible" + id="id-2552d758-fbbf-48fb-affb-9e7622950e3c-0"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-f0bc5016-44ee-4794-9fe2-874250c11cf2-1" /> + </symbol> + <symbol + overflow="visible" + id="id-959192e1-f39b-46c7-b889-6c49823038ed-0"> + <path + style="stroke:none" + d="" + id="id-abe6214d-e31f-4809-a6dc-f03361f3ede2-1" /> + </symbol> + <symbol + overflow="visible" + id="id-e1bcded8-43f1-4baa-88a5-aa6664cf553d-3"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-15fad481-e040-42b9-b454-1cb36a130bda-7" /> + </symbol> + </g> + <g + id="id-58e655c1-8382-470a-9d30-c856c8d47107-0"> + <symbol + overflow="visible" + id="id-eacff867-bae7-4f05-8147-5a0a0850a787-9"> + <path + style="stroke:none" + d="" + id="id-e1da6a9e-b798-4bf4-9526-5fe15a382a9a-9" /> + </symbol> + <symbol + overflow="visible" + id="id-93de29de-8e47-4925-bf1a-77e11a33af88-4"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-9b6737f7-7c76-4c92-82bf-40adcbd0a534-5" /> + </symbol> + <symbol + overflow="visible" + id="id-166f4abf-05fb-4225-bff5-749abbd2921f-1"> + <path + style="stroke:none" + d="" + id="id-7b3db869-b56d-4869-b6d0-5d0d8c4f2832-0" /> + </symbol> + <symbol + overflow="visible" + id="id-920e9399-0d69-4778-a1ad-35041055e881-3"> + <path + style="stroke:none" + d="m 3.6875,-1.140625 v -0.25 H 2.90625 V -4.5 c 0,-0.140625 0,-0.203125 -0.140625,-0.203125 -0.09375,0 -0.125,0 -0.1875,0.109375 l -2.3125,3.203125 v 0.25 h 2.0625 v 0.5625 c 0,0.25 0,0.328125 -0.578125,0.328125 H 1.5625 V 0 C 1.921875,-0.015625 2.359375,-0.03125 2.609375,-0.03125 2.875,-0.03125 3.3125,-0.015625 3.671875,0 v -0.25 h -0.1875 C 2.90625,-0.25 2.90625,-0.328125 2.90625,-0.578125 v -0.5625 z M 2.375,-3.9375 v 2.546875 H 0.53125 Z m 0,0" + id="id-974d6e0e-058a-47a7-b230-b3f0eccf444e-7" /> + </symbol> + </g> + <g + id="id-403f0fcb-9231-45b1-ba08-fe6df0c2bd39-9"> + <symbol + overflow="visible" + id="id-40bb89fa-8c9b-4055-91a5-b73eb4851746-7"> + <path + style="stroke:none" + d="" + id="id-1da14606-4367-4846-b434-83c9a10207ad-5" /> + </symbol> + <symbol + overflow="visible" + id="id-64ce4c64-992f-4473-82d4-f6ea7455d26e-9"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-10a6d073-3fb3-45a2-9938-8e22ba58f149-7" /> + </symbol> + <symbol + overflow="visible" + id="id-1226aa72-1baa-43b0-be73-9087e3732b3b-8"> + <path + style="stroke:none" + d="" + id="id-0ddb7887-1442-45f7-85b1-af0a13b33663-5" /> + </symbol> + <symbol + overflow="visible" + id="id-3ba0bf37-aa3f-4821-9e62-5ea1d38e4615-3"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-7614f977-d54d-4c9f-bde2-e75fb14a262a-3" /> + </symbol> + </g> + <g + id="id-3cca11b4-b384-4dca-bab9-0c5b627b3fda-1"> + <symbol + overflow="visible" + id="id-3a750352-64b3-4848-9913-0cbd337b18bc-9"> + <path + style="stroke:none" + d="" + id="id-747173a5-7de2-43a2-9f83-1520f86f8155-0" /> + </symbol> + <symbol + overflow="visible" + id="id-ee8e1e3f-1333-4d7a-9a80-f2c7d6f2d1e2-9"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-02968750-3f82-477e-9a47-eb724c8d6ee6-8" /> + </symbol> + <symbol + overflow="visible" + id="id-04bd2ca3-5f10-42f5-9f40-4022a20d3618-8"> + <path + style="stroke:none" + d="" + id="id-98661886-6776-41a7-8535-26655917b4bb-5" /> + </symbol> + <symbol + overflow="visible" + id="id-8385a096-ba68-47b9-8b6f-9ad8c3771eab-8"> + <path + style="stroke:none" + d="m 1.046875,-2.28125 c 0,-0.5625 0.046875,-1.078125 0.3125,-1.515625 0.234375,-0.375 0.609375,-0.625 1.0625,-0.625 0.203125,0 0.484375,0.046875 0.625,0.234375 C 2.875,-4.171875 2.71875,-4.046875 2.71875,-3.84375 c 0,0.171875 0.125,0.328125 0.328125,0.328125 0.21875,0 0.34375,-0.140625 0.34375,-0.34375 0,-0.40625 -0.296875,-0.765625 -0.984375,-0.765625 -1,0 -2.03125,0.921875 -2.03125,2.421875 0,1.796875 0.84375,2.34375 1.625,2.34375 0.84375,0 1.578125,-0.65625 1.578125,-1.5625 0,-0.890625 -0.703125,-1.546875 -1.515625,-1.546875 -0.5625,0 -0.859375,0.375 -1.015625,0.6875 z M 2,-0.078125 c -0.359375,0 -0.625,-0.203125 -0.78125,-0.515625 C 1.125,-0.796875 1.0625,-1.15625 1.0625,-1.5625 c 0,-0.6875 0.40625,-1.203125 0.96875,-1.203125 0.3125,0 0.53125,0.125 0.703125,0.375 0.171875,0.265625 0.171875,0.5625 0.171875,0.96875 0,0.390625 0,0.6875 -0.1875,0.96875 -0.15625,0.234375 -0.390625,0.375 -0.71875,0.375 z m 0,0" + id="id-dd347ed4-e532-45ce-b476-4c311032035e-4" /> + </symbol> + </g> + <g + id="id-d544a572-2ec5-4862-9dec-d406cf600b8b-9"> + <symbol + overflow="visible" + id="id-88596d14-ec3c-419c-bc9d-6063019eedf3-3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-e61318e7-f47a-47dd-9fac-ead51f3b0435-2" /> + </symbol> + <symbol + overflow="visible" + id="id-f44ab54a-f016-472f-b3b5-97e652bbfd86-4"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-54332ba6-b4cc-49aa-bea0-18799db7d422-3" /> + </symbol> + <symbol + overflow="visible" + id="id-91d4680b-37b1-426a-9dcf-eaa1baf39aa6-7"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-4914b0b6-0260-4241-95ad-39004a7d616a-1" /> + </symbol> + <symbol + overflow="visible" + id="id-ffdbe191-2ee9-4d56-a9c6-8bffb7cf6f44-2"> + <path + style="stroke:none;stroke-width:0" + d="m 3.734375,-4.203125 c 0.0625,-0.09375 0.0625,-0.109375 0.0625,-0.28125 H 1.96875 C 1.6875,-4.484375 1.609375,-4.5 1.359375,-4.515625 1,-4.546875 0.984375,-4.59375 0.96875,-4.703125 H 0.734375 l -0.25,1.484375 H 0.71875 c 0.015625,-0.109375 0.09375,-0.5625 0.203125,-0.640625 0.046875,-0.03125 0.625,-0.03125 0.71875,-0.03125 H 3.15625 c -0.21875,0.28125 -0.578125,0.71875 -0.71875,0.921875 -0.90625,1.1875 -1,2.296875 -1,2.703125 0,0.078125 0,0.40625 0.328125,0.40625 0.34375,0 0.34375,-0.3125 0.34375,-0.40625 v -0.28125 c 0,-1.34375 0.28125,-1.96875 0.578125,-2.34375 z m 0,0" + id="id-09b10cdf-2f0e-4eea-8c88-95250998a53c-2" /> + </symbol> + </g> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="2.7884842" + inkscape:cx="274.05049" + inkscape:cy="335.18314" + inkscape:document-units="mm" + inkscape:current-layer="g1667-7-3-6" + inkscape:document-rotation="0" + showgrid="false" + inkscape:window-width="1920" + inkscape:window-height="992" + inkscape:window-x="0" + inkscape:window-y="32" + inkscape:window-maximized="1" /> + <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"> + <g + id="g1667-7-4" + transform="translate(49.9217, -0.111288)"> + <g + id="g3888-62" + transform="translate(-0.207162, 14.6917)"> + <g + id="g1667-2-1" + transform="translate(-28.47048,-0.98227303)"> + <g + transform="matrix(0.33334,0,0,0.33334,44.673856,76.997332)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$N$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-7-9-3"> + <defs + id="id-4290d6c4-65ca-47bc-982b-dd1a8fe13f21"> + <g + id="id-2c514563-f61d-45b1-b16a-412f9e3f02b8"> + <symbol + overflow="visible" + id="id-9d908648-8efd-4d55-94e5-ecd20bf0a074"> + <path + style="stroke:none" + d="" + id="id-da69a5dd-c8eb-4da6-91d8-09c539e59309" /> + </symbol> + <symbol + overflow="visible" + id="id-580e16f1-3b7c-492e-81b0-f59eb1c97dc9"> + <path + style="stroke:none" + d="M 7.53125,-5.765625 C 7.640625,-6.15625 7.8125,-6.46875 8.609375,-6.5 c 0.046875,0 0.171875,-0.015625 0.171875,-0.203125 0,0 0,-0.109375 -0.125,-0.109375 -0.328125,0 -0.6875,0.03125 -1.015625,0.03125 -0.328125,0 -0.6875,-0.03125 -1.015625,-0.03125 -0.0625,0 -0.171875,0 -0.171875,0.203125 C 6.453125,-6.5 6.546875,-6.5 6.625,-6.5 c 0.578125,0.015625 0.6875,0.21875 0.6875,0.4375 0,0.03125 -0.03125,0.1875 -0.03125,0.203125 l -1.125,4.4375 L 3.953125,-6.625 C 3.875,-6.796875 3.875,-6.8125 3.640625,-6.8125 h -1.34375 c -0.1875,0 -0.28125,0 -0.28125,0.203125 0,0.109375 0.09375,0.109375 0.28125,0.109375 0.046875,0 0.671875,0 0.671875,0.09375 L 1.640625,-1.0625 c -0.109375,0.40625 -0.28125,0.71875 -1.078125,0.75 -0.0625,0 -0.171875,0.015625 -0.171875,0.203125 0,0.0625 0.046875,0.109375 0.125,0.109375 0.328125,0 0.671875,-0.03125 1,-0.03125 C 1.859375,-0.03125 2.21875,0 2.546875,0 2.59375,0 2.71875,0 2.71875,-0.203125 2.71875,-0.296875 2.625,-0.3125 2.515625,-0.3125 1.9375,-0.328125 1.859375,-0.546875 1.859375,-0.75 c 0,-0.0625 0.015625,-0.125 0.046875,-0.234375 l 1.3125,-5.25 C 3.265625,-6.1875 3.265625,-6.15625 3.3125,-6.0625 l 2.484375,5.875 C 5.859375,-0.015625 5.890625,0 5.984375,0 6.09375,0 6.09375,-0.03125 6.140625,-0.203125 Z m 0,0" + id="id-4b408017-1859-4d5f-8d21-f61b0e610caa" /> + </symbol> + </g> + </defs> + <g + id="id-3997685d-9ea3-49d1-9b6c-1e3df8746a63" + transform="translate(-149.103,-127.953)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-5b6ea8ec-783d-4885-8db9-3e6206d128dd"> + <g + transform="translate(148.712,134.765)" + id="g17770"> + <path + style="stroke:none" + d="M 7.53125,-5.765625 C 7.640625,-6.15625 7.8125,-6.46875 8.609375,-6.5 c 0.046875,0 0.171875,-0.015625 0.171875,-0.203125 0,0 0,-0.109375 -0.125,-0.109375 -0.328125,0 -0.6875,0.03125 -1.015625,0.03125 -0.328125,0 -0.6875,-0.03125 -1.015625,-0.03125 -0.0625,0 -0.171875,0 -0.171875,0.203125 C 6.453125,-6.5 6.546875,-6.5 6.625,-6.5 c 0.578125,0.015625 0.6875,0.21875 0.6875,0.4375 0,0.03125 -0.03125,0.1875 -0.03125,0.203125 l -1.125,4.4375 L 3.953125,-6.625 C 3.875,-6.796875 3.875,-6.8125 3.640625,-6.8125 h -1.34375 c -0.1875,0 -0.28125,0 -0.28125,0.203125 0,0.109375 0.09375,0.109375 0.28125,0.109375 0.046875,0 0.671875,0 0.671875,0.09375 L 1.640625,-1.0625 c -0.109375,0.40625 -0.28125,0.71875 -1.078125,0.75 -0.0625,0 -0.171875,0.015625 -0.171875,0.203125 0,0.0625 0.046875,0.109375 0.125,0.109375 0.328125,0 0.671875,-0.03125 1,-0.03125 C 1.859375,-0.03125 2.21875,0 2.546875,0 2.59375,0 2.71875,0 2.71875,-0.203125 2.71875,-0.296875 2.625,-0.3125 2.515625,-0.3125 1.9375,-0.328125 1.859375,-0.546875 1.859375,-0.75 c 0,-0.0625 0.015625,-0.125 0.046875,-0.234375 l 1.3125,-5.25 C 3.265625,-6.1875 3.265625,-6.15625 3.3125,-6.0625 l 2.484375,5.875 C 5.859375,-0.015625 5.890625,0 5.984375,0 6.09375,0 6.09375,-0.03125 6.140625,-0.203125 Z m 0,0" + id="id-de270731-cb0e-45ea-9dc6-f080a2842866" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g18569"> + <g + id="g3888" + transform="translate(9.3749998e-7,-14.6917)"> + <g + id="g1667" + transform="translate(-49.921698,0.11128778)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197" /> + <g + transform="matrix(0.33334017,0,0,0.33334017,41.326272,68.878231)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_1$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="1.0" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.352778" + id="g1620"> + <defs + id="id-1a34d974-d0d9-4ad5-944d-0c45f52863cb"> + <g + id="id-bff70df4-6322-4cef-b2f2-eb529fa18944"> + <symbol + overflow="visible" + id="id-bf511177-5ad3-4f29-8068-1cfd33c05d66"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-b65f5d62-bdbe-425c-b3f2-2e340f258b59" /> + </symbol> + <symbol + overflow="visible" + id="id-16eb84ac-14b0-4bd3-a0f6-9f965ee31cd0"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cee4ec54-27ef-45a2-b751-fd07d9e838e0" /> + </symbol> + <symbol + overflow="visible" + id="id-9a0f12f5-22d3-4c59-ab65-b00f783cf86e"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-3b000875-96d2-4155-9b0c-e63bba75f62a" /> + </symbol> + <symbol + overflow="visible" + id="id-dfe71ac3-1330-45aa-a1b7-6592aa5cbd04"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-32a2e394-a19b-40ce-a1b4-0551d665a7d1" /> + </symbol> + </g> + </defs> + <g + id="id-f0b3a1d5-8944-4bc7-95dc-bf25189f01bb" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-b5311cac-bf5c-4bdd-becd-ecdc7c3216fa"> + <g + transform="translate(148.712,134.765)" + id="g1612"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-dd956fe5-fe9f-4f17-a859-c8b8906f72fb" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-b6ee06aa-cf47-4a4d-a61a-df047b77ac93"> + <g + transform="translate(153.541,136.259)" + id="g1616"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-125afcb3-4406-49b5-bdd4-0c13fee87b9d" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.33334017,0,0,0.33334017,111.76877,73.279525)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_1$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="1.0" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.352778" + id="g1620-4"> + <defs + id="id-1a34d974-d0d9-4ad5-944d-0c45f52863cb-9"> + <g + id="g20750"> + <symbol + overflow="visible" + id="symbol20736"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path20734" /> + </symbol> + <symbol + overflow="visible" + id="symbol20740"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path20738" /> + </symbol> + <symbol + overflow="visible" + id="symbol20744"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path20742" /> + </symbol> + <symbol + overflow="visible" + id="symbol20748"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path20746" /> + </symbol> + </g> + </defs> + <g + id="id-f0b3a1d5-8944-4bc7-95dc-bf25189f01bb-0" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-b5311cac-bf5c-4bdd-becd-ecdc7c3216fa-8"> + <g + transform="translate(148.712,134.765)" + id="g1612-1"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-dd956fe5-fe9f-4f17-a859-c8b8906f72fb-9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-b6ee06aa-cf47-4a4d-a61a-df047b77ac93-9"> + <g + transform="translate(153.541,136.259)" + id="g1616-7"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-125afcb3-4406-49b5-bdd4-0c13fee87b9d-82" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-7" + transform="translate(-39.975231,0.10828665)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-5" /> + <g + transform="matrix(0.33334017,0,0,0.33334017,41.326272,68.878231)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_1$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="1.0" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.352778" + id="g1620-3"> + <defs + id="id-1a34d974-d0d9-4ad5-944d-0c45f52863cb-5"> + <g + id="g1774"> + <symbol + overflow="visible" + id="symbol1760"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1758" /> + </symbol> + <symbol + overflow="visible" + id="symbol1764"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path1762" /> + </symbol> + <symbol + overflow="visible" + id="symbol1768"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path1766" /> + </symbol> + <symbol + overflow="visible" + id="symbol1772"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="path1770" /> + </symbol> + </g> + </defs> + <g + id="id-f0b3a1d5-8944-4bc7-95dc-bf25189f01bb-6" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-b5311cac-bf5c-4bdd-becd-ecdc7c3216fa-0"> + <g + transform="translate(148.712,134.765)" + id="g1612-6"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-dd956fe5-fe9f-4f17-a859-c8b8906f72fb-2" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-b6ee06aa-cf47-4a4d-a61a-df047b77ac93-6"> + <g + transform="translate(153.541,136.259)" + id="g1616-1"> + <path + style="stroke:none;stroke-width:0" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-125afcb3-4406-49b5-bdd4-0c13fee87b9d-8" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-2" + transform="translate(-29.98968,0.07606031)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-7)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-3" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2898,68.8781)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_2\n$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-7"> + <defs + id="id-7cf824c2-7ff5-49d6-8bed-941e7a5aefec"> + <g + id="id-7b56b902-8866-4577-b5da-ecfb51bdf6f9"> + <symbol + overflow="visible" + id="id-3e5877d5-f4e1-472d-ad63-1055980d8386"> + <path + style="stroke:none" + d="" + id="id-f143eef6-d9a8-48f7-aca8-e6538b6fab70" /> + </symbol> + <symbol + overflow="visible" + id="id-0bc1646c-7d22-4518-85b7-7b4eb12d7991"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-e28260b8-c5fd-4ceb-ae5e-454f1753865c" /> + </symbol> + <symbol + overflow="visible" + id="id-29f9d707-252a-4b91-b32f-da0fa5a665a9"> + <path + style="stroke:none" + d="" + id="id-5591ae31-445d-45f3-ae87-90c1426801c2" /> + </symbol> + <symbol + overflow="visible" + id="id-a02c79ac-4833-46e7-925f-e4a40d6224f1"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-d0e16da0-84ab-4c10-885d-dd101d01d6bc" /> + </symbol> + </g> + </defs> + <g + id="id-90ea81d7-bf52-46d0-9b5e-dbcb09168ef4" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-9383a849-76eb-46cc-924e-f9b3d0ebd129"> + <g + transform="translate(148.712,134.765)" + id="g2859"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-74dc01ba-8081-4c65-b7c5-1c03d07fab43" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-278c94cd-4ffd-4318-b8bb-c423dcf2ce61"> + <g + transform="translate(153.541,136.259)" + id="g2863"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-68b1e3e5-95b7-423c-85b4-21aeb97ec453" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.33334,0,0,0.33334,20.9648,60.152967)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$T_1$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-7-73"> + <defs + id="id-71b7de40-aaac-4962-891c-50784b77b859"> + <g + id="id-0e4d47f0-68c0-4acd-9fe2-14ede5ac4464"> + <symbol + overflow="visible" + id="id-4c254f50-cdc5-4053-83de-01ff30672e43"> + <path + style="stroke:none" + d="" + id="id-7fbf67cc-4273-4944-be5b-4ab85569977e" /> + </symbol> + <symbol + overflow="visible" + id="id-1efbc5ff-fb42-4154-a235-97d4578b6849"> + <path + style="stroke:none" + d="m 4.25,-6.046875 c 0.078125,-0.28125 0.109375,-0.34375 0.234375,-0.375 0.09375,-0.015625 0.421875,-0.015625 0.625,-0.015625 1.015625,0 1.453125,0.03125 1.453125,0.8125 0,0.15625 -0.03125,0.546875 -0.078125,0.796875 0,0.046875 -0.03125,0.15625 -0.03125,0.1875 0,0.0625 0.03125,0.140625 0.125,0.140625 0.109375,0 0.125,-0.078125 0.15625,-0.234375 L 7,-6.46875 C 7.015625,-6.515625 7.015625,-6.609375 7.015625,-6.640625 7.015625,-6.75 6.921875,-6.75 6.75,-6.75 H 1.21875 c -0.234375,0 -0.25,0.015625 -0.328125,0.203125 l -0.59375,1.75 c 0,0.015625 -0.0625,0.15625 -0.0625,0.1875 0,0.046875 0.0625,0.109375 0.125,0.109375 0.09375,0 0.109375,-0.0625 0.171875,-0.21875 C 1.0625,-6.265625 1.328125,-6.4375 2.796875,-6.4375 H 3.1875 c 0.28125,0 0.28125,0.03125 0.28125,0.125 0,0.046875 -0.03125,0.171875 -0.046875,0.203125 L 2.09375,-0.78125 C 2,-0.421875 1.96875,-0.3125 0.90625,-0.3125 c -0.359375,0 -0.421875,0 -0.421875,0.1875 C 0.484375,0 0.59375,0 0.65625,0 c 0.265625,0 0.546875,-0.015625 0.8125,-0.015625 0.28125,0 0.578125,-0.015625 0.859375,-0.015625 0.28125,0 0.546875,0.015625 0.828125,0.015625 C 3.4375,-0.015625 3.734375,0 4.015625,0 c 0.09375,0 0.21875,0 0.21875,-0.203125 0,-0.109375 -0.078125,-0.109375 -0.34375,-0.109375 -0.234375,0 -0.375,0 -0.625,-0.015625 -0.296875,-0.03125 -0.375,-0.0625 -0.375,-0.21875 0,-0.015625 0,-0.0625 0.046875,-0.203125 z m 0,0" + id="id-62288179-3c36-4f09-83a2-0ed7f09ba897" /> + </symbol> + <symbol + overflow="visible" + id="id-510b55d0-476a-49c1-a6bf-4c152294ca51"> + <path + style="stroke:none" + d="" + id="id-14281c3c-de0f-4bf7-979b-05462753b978" /> + </symbol> + <symbol + overflow="visible" + id="id-5a487d30-b5c6-4679-bdc4-81122ed9a222"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-f6397913-560e-447a-9a39-8fb9345d39da" /> + </symbol> + </g> + </defs> + <g + id="id-c9a8c9ba-efc9-422f-b652-a044adf16cc6" + transform="translate(-148.946,-128.015)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-fb1b0af0-65ba-4c03-92a9-ba60679702a2"> + <g + transform="translate(148.712,134.765)" + id="g19527"> + <path + style="stroke:none" + d="m 4.25,-6.046875 c 0.078125,-0.28125 0.109375,-0.34375 0.234375,-0.375 0.09375,-0.015625 0.421875,-0.015625 0.625,-0.015625 1.015625,0 1.453125,0.03125 1.453125,0.8125 0,0.15625 -0.03125,0.546875 -0.078125,0.796875 0,0.046875 -0.03125,0.15625 -0.03125,0.1875 0,0.0625 0.03125,0.140625 0.125,0.140625 0.109375,0 0.125,-0.078125 0.15625,-0.234375 L 7,-6.46875 C 7.015625,-6.515625 7.015625,-6.609375 7.015625,-6.640625 7.015625,-6.75 6.921875,-6.75 6.75,-6.75 H 1.21875 c -0.234375,0 -0.25,0.015625 -0.328125,0.203125 l -0.59375,1.75 c 0,0.015625 -0.0625,0.15625 -0.0625,0.1875 0,0.046875 0.0625,0.109375 0.125,0.109375 0.09375,0 0.109375,-0.0625 0.171875,-0.21875 C 1.0625,-6.265625 1.328125,-6.4375 2.796875,-6.4375 H 3.1875 c 0.28125,0 0.28125,0.03125 0.28125,0.125 0,0.046875 -0.03125,0.171875 -0.046875,0.203125 L 2.09375,-0.78125 C 2,-0.421875 1.96875,-0.3125 0.90625,-0.3125 c -0.359375,0 -0.421875,0 -0.421875,0.1875 C 0.484375,0 0.59375,0 0.65625,0 c 0.265625,0 0.546875,-0.015625 0.8125,-0.015625 0.28125,0 0.578125,-0.015625 0.859375,-0.015625 0.28125,0 0.546875,0.015625 0.828125,0.015625 C 3.4375,-0.015625 3.734375,0 4.015625,0 c 0.09375,0 0.21875,0 0.21875,-0.203125 0,-0.109375 -0.078125,-0.109375 -0.34375,-0.109375 -0.234375,0 -0.375,0 -0.625,-0.015625 -0.296875,-0.03125 -0.375,-0.0625 -0.375,-0.21875 0,-0.015625 0,-0.0625 0.046875,-0.203125 z m 0,0" + id="id-cc4328e7-20d2-4ce1-a170-9eaa021986d7" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-4e0d269c-9c36-4288-96ef-e8b1170f55b5"> + <g + transform="translate(154.534,136.259)" + id="g19531"> + <path + style="stroke:none" + d="m 2.328125,-4.4375 c 0,-0.1875 0,-0.1875 -0.203125,-0.1875 -0.453125,0.4375 -1.078125,0.4375 -1.359375,0.4375 v 0.25 c 0.15625,0 0.625,0 1,-0.1875 v 3.546875 c 0,0.234375 0,0.328125 -0.6875,0.328125 H 0.8125 V 0 c 0.125,0 0.984375,-0.03125 1.234375,-0.03125 0.21875,0 1.09375,0.03125 1.25,0.03125 V -0.25 H 3.03125 c -0.703125,0 -0.703125,-0.09375 -0.703125,-0.328125 z m 0,0" + id="id-636c73de-7421-4988-afc9-e1c5c68aaa7f" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.33334,0,0,0.33334,31.298167,60.063567)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$T_2$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-7-73-8"> + <defs + id="id-9f6e8d63-a3f5-4090-beee-7ba173d204cf"> + <g + id="id-11bba8f3-a1cb-48d5-99f1-9384e3bacc34"> + <symbol + overflow="visible" + id="id-c17b7df3-dace-4fec-8d6c-d76031893ce7"> + <path + style="stroke:none" + d="" + id="id-6335dd9b-dde3-4c98-a6cf-6d7e285e86ec" /> + </symbol> + <symbol + overflow="visible" + id="id-a1607264-892d-44a3-b9d7-6f47cbdcbc76"> + <path + style="stroke:none" + d="m 4.25,-6.046875 c 0.078125,-0.28125 0.109375,-0.34375 0.234375,-0.375 0.09375,-0.015625 0.421875,-0.015625 0.625,-0.015625 1.015625,0 1.453125,0.03125 1.453125,0.8125 0,0.15625 -0.03125,0.546875 -0.078125,0.796875 0,0.046875 -0.03125,0.15625 -0.03125,0.1875 0,0.0625 0.03125,0.140625 0.125,0.140625 0.109375,0 0.125,-0.078125 0.15625,-0.234375 L 7,-6.46875 C 7.015625,-6.515625 7.015625,-6.609375 7.015625,-6.640625 7.015625,-6.75 6.921875,-6.75 6.75,-6.75 H 1.21875 c -0.234375,0 -0.25,0.015625 -0.328125,0.203125 l -0.59375,1.75 c 0,0.015625 -0.0625,0.15625 -0.0625,0.1875 0,0.046875 0.0625,0.109375 0.125,0.109375 0.09375,0 0.109375,-0.0625 0.171875,-0.21875 C 1.0625,-6.265625 1.328125,-6.4375 2.796875,-6.4375 H 3.1875 c 0.28125,0 0.28125,0.03125 0.28125,0.125 0,0.046875 -0.03125,0.171875 -0.046875,0.203125 L 2.09375,-0.78125 C 2,-0.421875 1.96875,-0.3125 0.90625,-0.3125 c -0.359375,0 -0.421875,0 -0.421875,0.1875 C 0.484375,0 0.59375,0 0.65625,0 c 0.265625,0 0.546875,-0.015625 0.8125,-0.015625 0.28125,0 0.578125,-0.015625 0.859375,-0.015625 0.28125,0 0.546875,0.015625 0.828125,0.015625 C 3.4375,-0.015625 3.734375,0 4.015625,0 c 0.09375,0 0.21875,0 0.21875,-0.203125 0,-0.109375 -0.078125,-0.109375 -0.34375,-0.109375 -0.234375,0 -0.375,0 -0.625,-0.015625 -0.296875,-0.03125 -0.375,-0.0625 -0.375,-0.21875 0,-0.015625 0,-0.0625 0.046875,-0.203125 z m 0,0" + id="id-83767759-c306-405d-8669-a58cf639f7e4" /> + </symbol> + <symbol + overflow="visible" + id="id-693197ac-3223-42f6-96f8-c133b35a9444"> + <path + style="stroke:none" + d="" + id="id-ebf384fa-5505-4a77-8fe6-42bdabf5b308" /> + </symbol> + <symbol + overflow="visible" + id="id-3e24a20e-5682-4611-baa0-024d1f645c23"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-28d9ed01-70e8-435c-a6a8-3f4783443870" /> + </symbol> + </g> + </defs> + <g + id="id-3129793a-6106-4bae-90a0-a82abf77e865" + transform="translate(-148.946,-128.015)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-2771df67-0777-4a05-b772-6722336f691a"> + <g + transform="translate(148.712,134.765)" + id="g20323"> + <path + style="stroke:none" + d="m 4.25,-6.046875 c 0.078125,-0.28125 0.109375,-0.34375 0.234375,-0.375 0.09375,-0.015625 0.421875,-0.015625 0.625,-0.015625 1.015625,0 1.453125,0.03125 1.453125,0.8125 0,0.15625 -0.03125,0.546875 -0.078125,0.796875 0,0.046875 -0.03125,0.15625 -0.03125,0.1875 0,0.0625 0.03125,0.140625 0.125,0.140625 0.109375,0 0.125,-0.078125 0.15625,-0.234375 L 7,-6.46875 C 7.015625,-6.515625 7.015625,-6.609375 7.015625,-6.640625 7.015625,-6.75 6.921875,-6.75 6.75,-6.75 H 1.21875 c -0.234375,0 -0.25,0.015625 -0.328125,0.203125 l -0.59375,1.75 c 0,0.015625 -0.0625,0.15625 -0.0625,0.1875 0,0.046875 0.0625,0.109375 0.125,0.109375 0.09375,0 0.109375,-0.0625 0.171875,-0.21875 C 1.0625,-6.265625 1.328125,-6.4375 2.796875,-6.4375 H 3.1875 c 0.28125,0 0.28125,0.03125 0.28125,0.125 0,0.046875 -0.03125,0.171875 -0.046875,0.203125 L 2.09375,-0.78125 C 2,-0.421875 1.96875,-0.3125 0.90625,-0.3125 c -0.359375,0 -0.421875,0 -0.421875,0.1875 C 0.484375,0 0.59375,0 0.65625,0 c 0.265625,0 0.546875,-0.015625 0.8125,-0.015625 0.28125,0 0.578125,-0.015625 0.859375,-0.015625 0.28125,0 0.546875,0.015625 0.828125,0.015625 C 3.4375,-0.015625 3.734375,0 4.015625,0 c 0.09375,0 0.21875,0 0.21875,-0.203125 0,-0.109375 -0.078125,-0.109375 -0.34375,-0.109375 -0.234375,0 -0.375,0 -0.625,-0.015625 -0.296875,-0.03125 -0.375,-0.0625 -0.375,-0.21875 0,-0.015625 0,-0.0625 0.046875,-0.203125 z m 0,0" + id="id-9fe92c87-73df-4662-ab54-561dbf84c30f" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-57ec2b1a-2883-4c89-ae83-fa81880fc194"> + <g + transform="translate(154.534,136.259)" + id="g20327"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-1a60a001-f928-4bf1-8ce7-ffe119327661" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.33334,0,0,0.33334,95.010005,76.396198)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_2\n$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-7-5"> + <defs + id="id-7cf824c2-7ff5-49d6-8bed-941e7a5aefec-3"> + <g + id="g20862"> + <symbol + overflow="visible" + id="symbol20848"> + <path + style="stroke:none" + d="" + id="path20846" /> + </symbol> + <symbol + overflow="visible" + id="symbol20852"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path20850" /> + </symbol> + <symbol + overflow="visible" + id="symbol20856"> + <path + style="stroke:none" + d="" + id="path20854" /> + </symbol> + <symbol + overflow="visible" + id="symbol20860"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="path20858" /> + </symbol> + </g> + </defs> + <g + id="id-90ea81d7-bf52-46d0-9b5e-dbcb09168ef4-2" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-9383a849-76eb-46cc-924e-f9b3d0ebd129-0"> + <g + transform="translate(148.712,134.765)" + id="g2859-7"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-74dc01ba-8081-4c65-b7c5-1c03d07fab43-3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-278c94cd-4ffd-4318-b8bb-c423dcf2ce61-1"> + <g + transform="translate(153.541,136.259)" + id="g2863-1"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-68b1e3e5-95b7-423c-85b4-21aeb97ec453-9" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-7-3" + transform="translate(-20.043212,0.07305921)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:0.465, 0.93;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3-2)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-5-6" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2898,68.8781)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_2$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-1"> + <defs + id="id-532b908d-cf13-4963-929d-ad02323db742"> + <g + id="id-2b5d3ab8-df6d-4c56-84de-0c679fadd19e"> + <symbol + overflow="visible" + id="id-665acd82-83c0-47bf-9e6f-5812bd595525"> + <path + style="stroke:none" + d="" + id="id-802c0224-ca95-4fc3-b86b-e1dd6e515f4c" /> + </symbol> + <symbol + overflow="visible" + id="id-45128bd5-8125-471f-b95e-e1c8b9a9b715"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-c0d07a42-b161-466e-98fb-56a8a0c00c90" /> + </symbol> + <symbol + overflow="visible" + id="id-63ea8027-5e29-4fa5-b9db-e81d1c7a33cc"> + <path + style="stroke:none" + d="" + id="id-7140c39f-b29d-4f37-8556-9c617be6d2dd" /> + </symbol> + <symbol + overflow="visible" + id="id-4dd45505-10f1-44e6-9b72-7809753922eb"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-69043952-8323-4b78-b627-deb20a2b2221" /> + </symbol> + </g> + </defs> + <g + id="id-67fc4bf5-c423-46d3-a7ba-4b4f2cddcfac" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-e4990684-4d9a-430e-8f28-5e6add94b57f"> + <g + transform="translate(148.712,134.765)" + id="g3105"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-3b3621e9-21bd-4284-a581-31d54e94a9cf" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-47fccbbc-69c3-46f4-b094-2a68ec4ce8e1"> + <g + transform="translate(153.541,136.259)" + id="g3109"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-735d300e-aa16-41a1-a196-c7db1775dd96" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-74" + transform="translate(-9.9464663,0.00300113)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-4)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-4" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2898,68.8781)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_2$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-30"> + <defs + id="id-1736464e-2c79-473b-8734-6896b2853f2d"> + <g + id="id-69101753-94b7-4873-a3de-ba7b8209d990"> + <symbol + overflow="visible" + id="id-a4fedb3d-069b-4d70-83b1-ae1f2daa2385"> + <path + style="stroke:none" + d="" + id="id-3046391b-4187-4be6-a912-d0505a66eb38" /> + </symbol> + <symbol + overflow="visible" + id="id-be0e0a31-e1c3-4836-a7d1-2fc7dbdafac3"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-86d33dad-f2f7-418c-b83f-02f4c9bc7aeb" /> + </symbol> + <symbol + overflow="visible" + id="id-deb89c92-53c2-46ce-abcc-fe4828c3d78c"> + <path + style="stroke:none" + d="" + id="id-f8c129ac-9366-4d46-a498-a6af5a7b0df1" /> + </symbol> + <symbol + overflow="visible" + id="id-fcd4a719-1594-4896-89dd-9dd04b3dab86"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-1ec7f68d-30dc-4659-bb62-b9ac49b4a1b4" /> + </symbol> + </g> + </defs> + <g + id="id-7f7230d4-a5ef-46e8-9b2f-be3bd1b3d9fc" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-e0ae7b06-5324-4229-8a5c-9dc70cbc248b"> + <g + transform="translate(148.712,134.765)" + id="g3351"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cb949f06-1abe-4f67-bea8-ff599f2c1ece" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-8b9197ca-9e60-4fd3-a63f-7a27ee505097"> + <g + transform="translate(153.541,136.259)" + id="g3355"> + <path + style="stroke:none" + d="M 3.515625,-1.265625 H 3.28125 c -0.015625,0.15625 -0.09375,0.5625 -0.1875,0.625 C 3.046875,-0.59375 2.515625,-0.59375 2.40625,-0.59375 H 1.125 c 0.734375,-0.640625 0.984375,-0.84375 1.390625,-1.171875 0.515625,-0.40625 1,-0.84375 1,-1.5 0,-0.84375 -0.734375,-1.359375 -1.625,-1.359375 -0.859375,0 -1.453125,0.609375 -1.453125,1.25 0,0.34375 0.296875,0.390625 0.375,0.390625 0.15625,0 0.359375,-0.125 0.359375,-0.375 0,-0.125 -0.046875,-0.375 -0.40625,-0.375 C 0.984375,-4.21875 1.453125,-4.375 1.78125,-4.375 c 0.703125,0 1.0625,0.546875 1.0625,1.109375 0,0.609375 -0.4375,1.078125 -0.65625,1.328125 L 0.515625,-0.265625 C 0.4375,-0.203125 0.4375,-0.1875 0.4375,0 h 2.875 z m 0,0" + id="id-34a5f412-fb96-442a-984f-de8b6ff3b8b4" /> + </g> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3-25)" + d="m 42.563016,70.061578 2.683925,0.06539" + id="path1197-5-9" + sodipodi:nodetypes="cc" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2794,68.8547)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_3$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-5"> + <defs + id="id-7fcd93c0-5f80-40df-9485-b5e606d0fe70"> + <g + id="id-c9cd1e12-25e4-417c-a906-010fda19535d"> + <symbol + overflow="visible" + id="id-4d466315-5777-4e4e-9fc0-3db80afdf07d"> + <path + style="stroke:none" + d="" + id="id-152d50bf-2f53-40a8-b30b-f913378a3609" /> + </symbol> + <symbol + overflow="visible" + id="id-6cc5f286-cfc6-4c8a-ae12-29ffa839af48"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cf567697-b6cd-4f03-a190-84d8e40101b6" /> + </symbol> + <symbol + overflow="visible" + id="id-db2d4f7f-7daf-49c5-a630-3bda61f0be82"> + <path + style="stroke:none" + d="" + id="id-b4fd64dc-2d9f-4046-9b52-06c81f8758a4" /> + </symbol> + <symbol + overflow="visible" + id="id-b4ff667c-0374-498a-8386-69eef1264b90"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-a2e192af-e89c-416a-aec3-b76af30c1df0" /> + </symbol> + </g> + </defs> + <g + id="id-35b942dd-916b-4369-9996-cc6c3eafdeca" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-622b2bec-3cf7-48e5-beea-6985a7a85f5d"> + <g + transform="translate(148.712,134.765)" + id="g3603"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-435b84de-62a2-481c-93dd-1879d379dcb6" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-f944b06f-832b-4d4a-b687-7c0049467eeb"> + <g + transform="translate(153.541,136.259)" + id="g3607"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-864c306a-4102-4d7d-85e1-50690315df1b" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-73" + transform="translate(-49.921699,-7.234542)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-9)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-6" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2794,68.8547)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_3$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449001921888555" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-5"> + <defs + id="id-9d8b7985-5b90-4c1b-96e5-0546ae02e6a4"> + <g + id="id-7be6aaa9-eaf9-45ad-8b1a-ab98a87c247e"> + <symbol + overflow="visible" + id="id-e407c94f-ed91-4c29-9163-1c0d14906d36"> + <path + style="stroke:none" + d="" + id="id-46c6035b-bebf-4289-835c-90a83b1ba57f" /> + </symbol> + <symbol + overflow="visible" + id="id-f98b1ee2-5dc1-4d1f-9195-2ac907831ebc"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-5730a185-71e9-4dd4-a978-d5cbaf5264a6" /> + </symbol> + <symbol + overflow="visible" + id="id-a32f519f-cc93-4f6b-ada9-1ec36101e236"> + <path + style="stroke:none" + d="" + id="id-1a389400-2350-4c0a-864b-e85f041cf16a" /> + </symbol> + <symbol + overflow="visible" + id="id-819b1ca2-49e0-4614-9531-f1cf92bb0beb"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-7f4ea42f-2a98-41c6-ac97-34aa9653b8ec" /> + </symbol> + </g> + </defs> + <g + id="id-77d55186-2979-4727-bbb6-1a4fc8e685e8" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-bc24bbf9-4da4-476d-b1a4-68288aa1a14d"> + <g + transform="translate(148.712,134.765)" + id="g7846"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-fc6348d7-5ab7-4b01-baad-ac311b86182d" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-4dadb7fe-6b13-4ec0-b71b-1c9443c6186d"> + <g + transform="translate(153.541,136.259)" + id="g7850"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-8c958543-e8db-4d10-a8fd-dcd7658c8f93" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-7-1" + transform="translate(-39.97523,-7.2375433)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3-9)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-5-5" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2794,68.8547)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_3$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-9"> + <defs + id="id-78a9bd45-dec2-4342-bdbb-1a9493417890"> + <g + id="id-80d0c048-18de-47d6-bfc7-08ad18ee361d"> + <symbol + overflow="visible" + id="id-0b41afc7-0269-4345-80f4-73e127106311"> + <path + style="stroke:none" + d="" + id="id-d5da8a58-3faf-4451-99b0-0e50003f15d3" /> + </symbol> + <symbol + overflow="visible" + id="id-2552d758-fbbf-48fb-affb-9e7622950e3c"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-f0bc5016-44ee-4794-9fe2-874250c11cf2" /> + </symbol> + <symbol + overflow="visible" + id="id-959192e1-f39b-46c7-b889-6c49823038ed"> + <path + style="stroke:none" + d="" + id="id-abe6214d-e31f-4809-a6dc-f03361f3ede2" /> + </symbol> + <symbol + overflow="visible" + id="id-e1bcded8-43f1-4baa-88a5-aa6664cf553d"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-15fad481-e040-42b9-b454-1cb36a130bda" /> + </symbol> + </g> + </defs> + <g + id="id-7c53eb2d-a814-46e4-a275-e9f92e274eed" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-4cb3bf77-7485-4281-b69e-18badced3b87"> + <g + transform="translate(148.712,134.765)" + id="g7267"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-ccc7e34c-6381-4a34-8b6b-51b0829708d7" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-bee359c4-3861-465c-84fc-713ff554332d"> + <g + transform="translate(153.541,136.259)" + id="g7271"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-6ae9baef-e28b-48fe-b99a-d87f279a74e4" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.33334,0,0,0.33334,104.90821,78.53009)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_3$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-9-8"> + <defs + id="id-78a9bd45-dec2-4342-bdbb-1a9493417890-9"> + <g + id="g21418"> + <symbol + overflow="visible" + id="symbol21404"> + <path + style="stroke:none" + d="" + id="path21402" /> + </symbol> + <symbol + overflow="visible" + id="symbol21408"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path21406" /> + </symbol> + <symbol + overflow="visible" + id="symbol21412"> + <path + style="stroke:none" + d="" + id="path21410" /> + </symbol> + <symbol + overflow="visible" + id="symbol21416"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="path21414" /> + </symbol> + </g> + </defs> + <g + id="id-7c53eb2d-a814-46e4-a275-e9f92e274eed-7" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-4cb3bf77-7485-4281-b69e-18badced3b87-2"> + <g + transform="translate(148.712,134.765)" + id="g7267-6"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-ccc7e34c-6381-4a34-8b6b-51b0829708d7-4" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-bee359c4-3861-465c-84fc-713ff554332d-5"> + <g + transform="translate(153.541,136.259)" + id="g7271-2"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="id-6ae9baef-e28b-48fe-b99a-d87f279a74e4-0" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-2-2" + transform="translate(-29.989679,-7.2697697)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-7-7)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-3-1" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2611,68.878)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_4$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-7-7"> + <defs + id="id-75deb2b8-0879-46ea-9f68-51b3ee9fd4c6"> + <g + id="id-58e655c1-8382-470a-9d30-c856c8d47107"> + <symbol + overflow="visible" + id="id-eacff867-bae7-4f05-8147-5a0a0850a787"> + <path + style="stroke:none" + d="" + id="id-e1da6a9e-b798-4bf4-9526-5fe15a382a9a" /> + </symbol> + <symbol + overflow="visible" + id="id-93de29de-8e47-4925-bf1a-77e11a33af88"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-9b6737f7-7c76-4c92-82bf-40adcbd0a534" /> + </symbol> + <symbol + overflow="visible" + id="id-166f4abf-05fb-4225-bff5-749abbd2921f"> + <path + style="stroke:none" + d="" + id="id-7b3db869-b56d-4869-b6d0-5d0d8c4f2832" /> + </symbol> + <symbol + overflow="visible" + id="id-920e9399-0d69-4778-a1ad-35041055e881"> + <path + style="stroke:none" + d="m 3.6875,-1.140625 v -0.25 H 2.90625 V -4.5 c 0,-0.140625 0,-0.203125 -0.140625,-0.203125 -0.09375,0 -0.125,0 -0.1875,0.109375 l -2.3125,3.203125 v 0.25 h 2.0625 v 0.5625 c 0,0.25 0,0.328125 -0.578125,0.328125 H 1.5625 V 0 C 1.921875,-0.015625 2.359375,-0.03125 2.609375,-0.03125 2.875,-0.03125 3.3125,-0.015625 3.671875,0 v -0.25 h -0.1875 C 2.90625,-0.25 2.90625,-0.328125 2.90625,-0.578125 v -0.5625 z M 2.375,-3.9375 v 2.546875 H 0.53125 Z m 0,0" + id="id-974d6e0e-058a-47a7-b230-b3f0eccf444e" /> + </symbol> + </g> + </defs> + <g + id="id-eefba4d2-19d9-4ad4-904b-de5d863bd288" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-1455704c-756b-49cb-a3f3-b78c612d5939"> + <g + transform="translate(148.712,134.765)" + id="g8485"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-0336e39c-d7cb-4ce0-923c-1e46a2f3b885" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-faf32796-52f8-45d4-a127-72b9f731d82a"> + <g + transform="translate(153.541,136.259)" + id="g8489"> + <path + style="stroke:none" + d="m 3.6875,-1.140625 v -0.25 H 2.90625 V -4.5 c 0,-0.140625 0,-0.203125 -0.140625,-0.203125 -0.09375,0 -0.125,0 -0.1875,0.109375 l -2.3125,3.203125 v 0.25 h 2.0625 v 0.5625 c 0,0.25 0,0.328125 -0.578125,0.328125 H 1.5625 V 0 C 1.921875,-0.015625 2.359375,-0.03125 2.609375,-0.03125 2.875,-0.03125 3.3125,-0.015625 3.671875,0 v -0.25 h -0.1875 C 2.90625,-0.25 2.90625,-0.328125 2.90625,-0.578125 v -0.5625 z M 2.375,-3.9375 v 2.546875 H 0.53125 Z m 0,0" + id="id-dbf0e94e-d8b3-4970-b7ee-b381439debdf" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.33334,0,0,0.33334,99.960885,76.969139)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_4$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-7-7-2" + inkscape:transform-center-x="5.9861928" + inkscape:transform-center-y="4.6624891"> + <defs + id="id-75deb2b8-0879-46ea-9f68-51b3ee9fd4c6-9"> + <g + id="g21717"> + <symbol + overflow="visible" + id="symbol21703"> + <path + style="stroke:none" + d="" + id="path21701" /> + </symbol> + <symbol + overflow="visible" + id="symbol21707"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path21705" /> + </symbol> + <symbol + overflow="visible" + id="symbol21711"> + <path + style="stroke:none" + d="" + id="path21709" /> + </symbol> + <symbol + overflow="visible" + id="symbol21715"> + <path + style="stroke:none" + d="m 3.6875,-1.140625 v -0.25 H 2.90625 V -4.5 c 0,-0.140625 0,-0.203125 -0.140625,-0.203125 -0.09375,0 -0.125,0 -0.1875,0.109375 l -2.3125,3.203125 v 0.25 h 2.0625 v 0.5625 c 0,0.25 0,0.328125 -0.578125,0.328125 H 1.5625 V 0 C 1.921875,-0.015625 2.359375,-0.03125 2.609375,-0.03125 2.875,-0.03125 3.3125,-0.015625 3.671875,0 v -0.25 h -0.1875 C 2.90625,-0.25 2.90625,-0.328125 2.90625,-0.578125 v -0.5625 z M 2.375,-3.9375 v 2.546875 H 0.53125 Z m 0,0" + id="path21713" /> + </symbol> + </g> + </defs> + <g + id="id-eefba4d2-19d9-4ad4-904b-de5d863bd288-8" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-1455704c-756b-49cb-a3f3-b78c612d5939-8"> + <g + transform="translate(148.712,134.765)" + id="g8485-6"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-0336e39c-d7cb-4ce0-923c-1e46a2f3b885-0" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-faf32796-52f8-45d4-a127-72b9f731d82a-4"> + <g + transform="translate(153.541,136.259)" + id="g8489-6"> + <path + style="stroke:none" + d="m 3.6875,-1.140625 v -0.25 H 2.90625 V -4.5 c 0,-0.140625 0,-0.203125 -0.140625,-0.203125 -0.09375,0 -0.125,0 -0.1875,0.109375 l -2.3125,3.203125 v 0.25 h 2.0625 v 0.5625 c 0,0.25 0,0.328125 -0.578125,0.328125 H 1.5625 V 0 C 1.921875,-0.015625 2.359375,-0.03125 2.609375,-0.03125 2.875,-0.03125 3.3125,-0.015625 3.671875,0 v -0.25 h -0.1875 C 2.90625,-0.25 2.90625,-0.328125 2.90625,-0.578125 v -0.5625 z M 2.375,-3.9375 v 2.546875 H 0.53125 Z m 0,0" + id="id-dbf0e94e-d8b3-4970-b7ee-b381439debdf-7" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-7-3-6" + transform="translate(-20.043211,-7.2727708)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:0.465, 0.93;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3-2-1)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-5-6-4" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2898,68.8546)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_5$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-1-3"> + <defs + id="id-9d025603-8cd5-4d4c-99d9-f93fa0c5873f"> + <g + id="id-403f0fcb-9231-45b1-ba08-fe6df0c2bd39"> + <symbol + overflow="visible" + id="id-40bb89fa-8c9b-4055-91a5-b73eb4851746"> + <path + style="stroke:none" + d="" + id="id-1da14606-4367-4846-b434-83c9a10207ad" /> + </symbol> + <symbol + overflow="visible" + id="id-64ce4c64-992f-4473-82d4-f6ea7455d26e"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-10a6d073-3fb3-45a2-9938-8e22ba58f149" /> + </symbol> + <symbol + overflow="visible" + id="id-1226aa72-1baa-43b0-be73-9087e3732b3b"> + <path + style="stroke:none" + d="" + id="id-0ddb7887-1442-45f7-85b1-af0a13b33663" /> + </symbol> + <symbol + overflow="visible" + id="id-3ba0bf37-aa3f-4821-9e62-5ea1d38e4615"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-7614f977-d54d-4c9f-bde2-e75fb14a262a" /> + </symbol> + </g> + </defs> + <g + id="id-7d4e11d7-70ed-46cd-992b-ebee2c367dd4" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-22fd4e56-2026-4141-916c-349cac08aca1"> + <g + transform="translate(148.712,134.765)" + id="g9104"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-11700703-9a61-4b0f-bd16-4419c2090da5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-f2503d15-dbc2-4819-b544-70581a437849"> + <g + transform="translate(153.541,136.259)" + id="g9108"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-2b8f869f-ce8a-4c5e-9f31-28205d70ab54" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.33334,0,0,0.33334,72.057617,62.146167)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_5$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-1-3-6"> + <defs + id="id-9d025603-8cd5-4d4c-99d9-f93fa0c5873f-0"> + <g + id="g21829"> + <symbol + overflow="visible" + id="symbol21815"> + <path + style="stroke:none" + d="" + id="path21813" /> + </symbol> + <symbol + overflow="visible" + id="symbol21819"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path21817" /> + </symbol> + <symbol + overflow="visible" + id="symbol21823"> + <path + style="stroke:none" + d="" + id="path21821" /> + </symbol> + <symbol + overflow="visible" + id="symbol21827"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="path21825" /> + </symbol> + </g> + </defs> + <g + id="id-7d4e11d7-70ed-46cd-992b-ebee2c367dd4-8" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-22fd4e56-2026-4141-916c-349cac08aca1-3"> + <g + transform="translate(148.712,134.765)" + id="g9104-7"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-11700703-9a61-4b0f-bd16-4419c2090da5-9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-f2503d15-dbc2-4819-b544-70581a437849-3"> + <g + transform="translate(153.541,136.259)" + id="g9108-7"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-2b8f869f-ce8a-4c5e-9f31-28205d70ab54-8" /> + </g> + </g> + </g> + </g> + <ellipse + style="fill:none;stroke:#000000;stroke-width:0.414999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000" + id="path22828" + cx="73.031082" + cy="62.741909" + rx="4.0084567" + ry="3.2678444" /> + </g> + <g + id="g1667-74-0" + transform="translate(-9.9464654,-7.3428289)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-4-5)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-4-9" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.2898,68.8546)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_5$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-30-2"> + <defs + id="id-0b1e7c64-dfda-4fd2-88ac-fdde82fd43e8"> + <g + id="id-03c42355-8700-42d2-9f89-1c4d1d5909fe"> + <symbol + overflow="visible" + id="id-5881da08-26b3-44cb-b411-6e461db6b4a9"> + <path + style="stroke:none" + d="" + id="id-8c6b44be-6c7e-4f42-a7a7-9f763b4a1fdb" /> + </symbol> + <symbol + overflow="visible" + id="id-0d50b91b-fe56-4fd3-bdb5-fb8b3b05f802"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-ffbbdd17-0dc9-41e5-8cb8-dedd97a968c1" /> + </symbol> + <symbol + overflow="visible" + id="id-73160538-e89b-4e37-ae07-b56c4bac91b6"> + <path + style="stroke:none" + d="" + id="id-75428323-6471-42ce-8b01-91e92e3f3fb9" /> + </symbol> + <symbol + overflow="visible" + id="id-9922c34b-0e60-49a1-a537-61768a35e804"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-16127d8e-bfaf-4817-8186-383f02d9fc53" /> + </symbol> + </g> + </defs> + <g + id="id-384cf002-968e-4731-a6d3-fd35e23d18a1" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-6f811a71-b49d-492d-b18f-7f1c83232de2"> + <g + transform="translate(148.712,134.765)" + id="g9723"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-cf286e75-0a20-4756-bcbd-83592d1212e0" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-9ef40ca0-33e3-4938-876d-d70cc2168c3d"> + <g + transform="translate(153.541,136.259)" + id="g9727"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-0da26084-30b9-4a95-8695-40f5c97e9b39" /> + </g> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3-25-7)" + d="m 42.563017,62.715748 2.683925,0.06539" + id="path1197-5-9-2" + sodipodi:nodetypes="cc" /> + <g + transform="matrix(0.33334,0,0,0.33334,41.289801,61.50877)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_5$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-5-8"> + <defs + id="id-c4516f0a-89b0-4d85-b7fc-44e55570e086"> + <g + id="id-44a1f15f-0704-4baf-9742-f7f3ec4c8238"> + <symbol + overflow="visible" + id="id-98d84fb5-648c-4d9d-9c56-a3873325556e"> + <path + style="stroke:none" + d="" + id="id-02d4564b-f7da-4ff8-a125-fa2af2724023" /> + </symbol> + <symbol + overflow="visible" + id="id-ca9611f4-2d0c-4a77-9006-9f3ed3b096cf"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-eaea4e96-0a46-4c0e-a91d-1d4c1db2cf40" /> + </symbol> + <symbol + overflow="visible" + id="id-ebb1040e-67a2-4a7c-9713-e45274d501c5"> + <path + style="stroke:none" + d="" + id="id-82783ea1-ed3b-472b-bc27-d0520e8cfe2c" /> + </symbol> + <symbol + overflow="visible" + id="id-178a7282-2291-4377-887b-0fbffbef3499"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-a0afde87-b88e-4c3e-bc4b-921a0a92c178" /> + </symbol> + </g> + </defs> + <g + id="id-bdb50afd-a136-42c6-a519-eb20af620570" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-a903e865-96f8-4021-b277-0bc02655ec19"> + <g + transform="translate(148.712,134.765)" + id="g10336"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-0d7fd559-e36e-40bb-9150-48249bdf634a" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-29db0d2f-ffbc-412e-89ce-51d4ad133cc8"> + <g + transform="translate(153.541,136.259)" + id="g10340"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-086632cc-da62-49b9-a0f0-c419e99285a7" /> + </g> + </g> + </g> + </g> + <g + id="g1667-9" + transform="translate(-49.921698,0.11128778)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-6)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-9" /> + <g + transform="matrix(0.33334 0 0 0.33334 41.2898 68.8547)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_5$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-0"> + <defs + id="id-47552d6d-373b-4fd2-849c-2c882a44f8c4"> + <g + id="id-a08a7281-3971-4e6d-8715-e5c7376c2fb3"> + <symbol + overflow="visible" + id="id-c247f091-0689-4a23-8ece-0b615e3aed9f"> + <path + style="stroke:none" + d="" + id="id-a7924319-a904-45a4-8da0-b1141ba6c6b4" /> + </symbol> + <symbol + overflow="visible" + id="id-f02b3ecb-8ba0-422b-a6f1-23af10c1e147"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-2359dfb4-f34c-403e-b3a4-3f5303f394a9" /> + </symbol> + <symbol + overflow="visible" + id="id-38c6e1f8-09f5-46cf-8edd-28164518a09d"> + <path + style="stroke:none" + d="" + id="id-b047135a-6e77-4277-bf18-32214f7cf85a" /> + </symbol> + <symbol + overflow="visible" + id="id-22e6eb32-f695-4c86-91b3-08958c64b2ca"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-62d79c71-a729-49a3-b145-ab2338077fca" /> + </symbol> + </g> + </defs> + <g + id="id-129f226a-d89e-4af3-9f02-c96e954812b5" + transform="translate(-149.009, -130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-ce6ef499-9ee2-4b9d-9c9b-8095641932dc"> + <g + transform="translate(148.712, 134.765)" + id="g10991"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-0d693efe-bd9f-4eba-9ac4-534198948cf9" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-60bf8283-05e6-4629-acba-a37065123927"> + <g + transform="translate(153.541, 136.259)" + id="g10995"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-81d10110-a2c6-4435-8f8d-e4efcfcbb43b" /> + </g> + </g> + </g> + </g> + </g> + <g + id="g1667-7-0" + transform="translate(-39.975231,0.10828665)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3-5)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-5-4" /> + <g + transform="matrix(0.33334 0 0 0.33334 41.2898 68.8547)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_5$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-6"> + <defs + id="id-49d458e8-1060-4d98-a2d8-24452e2a0903"> + <g + id="id-aa8ac109-fc43-41ac-a551-a431a615923e"> + <symbol + overflow="visible" + id="id-b46a06c9-408a-43e4-8dc8-def4510d2c63"> + <path + style="stroke:none" + d="" + id="id-13ade768-9db1-40fe-89b4-9ebbae0d35b8" /> + </symbol> + <symbol + overflow="visible" + id="id-635d3aa8-96ed-49c9-8447-5acebbf1d6d3"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-4d35c0ce-0b4c-4145-bc44-c2f8819e4c6d" /> + </symbol> + <symbol + overflow="visible" + id="id-bbf4d911-17e2-4114-a7fb-cbea02a80051"> + <path + style="stroke:none" + d="" + id="id-d4e210b5-cfb6-4912-979f-29bed02758cc" /> + </symbol> + <symbol + overflow="visible" + id="id-613ebf74-76ea-4488-83fe-b54ac3c1c714"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-be313dca-7b0c-4a48-bacf-cf8daa06e5cf" /> + </symbol> + </g> + </defs> + <g + id="id-7c72e8d2-23eb-4bde-9a26-7ead8fbf98c0" + transform="translate(-149.009, -130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-2f11dc2d-b332-48a5-b2dc-a4b8641ef12e"> + <g + transform="translate(148.712, 134.765)" + id="g11610"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-b1cf70a3-2f50-429d-8e0a-c9788be2c3e5" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-221b7dae-601d-4a53-a8a2-340bd5d437c0"> + <g + transform="translate(153.541, 136.259)" + id="g11614"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-a7d364f9-c5c7-4870-a6da-281c35f3c8cf" /> + </g> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-7-6)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-3-5" + transform="translate(-29.98968,0.07606031)" /> + <g + transform="matrix(0.33334,0,0,0.33334,11.30012,68.93066)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_5$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-7-9"> + <defs + id="id-5095a9f7-c751-4c97-a82c-191119077faa"> + <g + id="id-6665708f-288d-4525-92eb-a06c4892867b"> + <symbol + overflow="visible" + id="id-dd44434a-953f-4b45-92a4-9abe7ef9d3ae"> + <path + style="stroke:none" + d="" + id="id-9ac9378b-2d2d-440f-a1d5-af260cb7e544" /> + </symbol> + <symbol + overflow="visible" + id="id-dbde01f5-f4e2-40b7-88a3-b8851429abee"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-d843451a-a637-4d3a-943f-db8d14113881" /> + </symbol> + <symbol + overflow="visible" + id="id-1043abfb-ae0c-4c87-a0c9-f8e738a6eda9"> + <path + style="stroke:none" + d="" + id="id-85cedea2-f5e6-4191-adf4-ded1c4c32acc" /> + </symbol> + <symbol + overflow="visible" + id="id-7e05db1f-d678-46b2-9ab7-e9f2a82049bc"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-67bf08a2-065c-450a-8490-b9d084062846" /> + </symbol> + </g> + </defs> + <g + id="id-b87053f3-f5a3-41cb-aca1-4a0aefc17047" + transform="translate(-149.009, -130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-6476caae-441b-4a86-9075-79da7325f724"> + <g + transform="translate(148.712, 134.765)" + id="g12229"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-d22da642-bd9c-41de-9727-a585d12c07ea" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-ac7b7263-e3b1-4d28-a2ed-347b769a752a"> + <g + transform="translate(153.541, 136.259)" + id="g12233"> + <path + style="stroke:none" + d="m 1.078125,-3.890625 c 0.359375,0.09375 0.5625,0.09375 0.671875,0.09375 0.921875,0 1.46875,-0.625 1.46875,-0.734375 0,-0.078125 -0.046875,-0.09375 -0.078125,-0.09375 -0.015625,0 -0.03125,0 -0.0625,0.015625 -0.171875,0.0625 -0.53125,0.203125 -1.046875,0.203125 -0.203125,0 -0.5625,-0.015625 -1.015625,-0.1875 C 0.9375,-4.625 0.921875,-4.625 0.921875,-4.625 c -0.09375,0 -0.09375,0.078125 -0.09375,0.1875 v 2.046875 c 0,0.125 0,0.203125 0.109375,0.203125 0.0625,0 0.078125,0 0.140625,-0.09375 0.296875,-0.375 0.734375,-0.4375 0.96875,-0.4375 0.421875,0 0.609375,0.328125 0.640625,0.390625 0.125,0.234375 0.171875,0.5 0.171875,0.90625 0,0.203125 0,0.609375 -0.21875,0.921875 -0.171875,0.25 -0.46875,0.421875 -0.8125,0.421875 -0.453125,0 -0.921875,-0.25 -1.09375,-0.71875 0.265625,0.015625 0.40625,-0.15625 0.40625,-0.34375 0,-0.296875 -0.265625,-0.34375 -0.359375,-0.34375 0,0 -0.34375,0 -0.34375,0.375 0,0.625 0.578125,1.25 1.40625,1.25 0.890625,0 1.671875,-0.65625 1.671875,-1.546875 0,-0.78125 -0.59375,-1.5 -1.453125,-1.5 -0.3125,0 -0.671875,0.0625 -0.984375,0.328125 z m 0,0" + id="id-123ba228-28d4-404e-ac9c-219d626adc02" /> + </g> + </g> + </g> + </g> + <g + id="g1667-7-3-0" + transform="translate(-20.043212,0.07305921)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:0.465, 0.93;stroke-dashoffset:0;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3-2-8)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-5-6-42" /> + <g + transform="matrix(0.33334 0 0 0.33334 41.2793 68.8546)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_6$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-1-2"> + <defs + id="id-340e0317-f822-4bec-bb3a-9e837f4583d5"> + <g + id="id-3cca11b4-b384-4dca-bab9-0c5b627b3fda"> + <symbol + overflow="visible" + id="id-3a750352-64b3-4848-9913-0cbd337b18bc"> + <path + style="stroke:none" + d="" + id="id-747173a5-7de2-43a2-9f83-1520f86f8155" /> + </symbol> + <symbol + overflow="visible" + id="id-ee8e1e3f-1333-4d7a-9a80-f2c7d6f2d1e2"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-02968750-3f82-477e-9a47-eb724c8d6ee6" /> + </symbol> + <symbol + overflow="visible" + id="id-04bd2ca3-5f10-42f5-9f40-4022a20d3618"> + <path + style="stroke:none" + d="" + id="id-98661886-6776-41a7-8535-26655917b4bb" /> + </symbol> + <symbol + overflow="visible" + id="id-8385a096-ba68-47b9-8b6f-9ad8c3771eab"> + <path + style="stroke:none" + d="m 1.046875,-2.28125 c 0,-0.5625 0.046875,-1.078125 0.3125,-1.515625 0.234375,-0.375 0.609375,-0.625 1.0625,-0.625 0.203125,0 0.484375,0.046875 0.625,0.234375 C 2.875,-4.171875 2.71875,-4.046875 2.71875,-3.84375 c 0,0.171875 0.125,0.328125 0.328125,0.328125 0.21875,0 0.34375,-0.140625 0.34375,-0.34375 0,-0.40625 -0.296875,-0.765625 -0.984375,-0.765625 -1,0 -2.03125,0.921875 -2.03125,2.421875 0,1.796875 0.84375,2.34375 1.625,2.34375 0.84375,0 1.578125,-0.65625 1.578125,-1.5625 0,-0.890625 -0.703125,-1.546875 -1.515625,-1.546875 -0.5625,0 -0.859375,0.375 -1.015625,0.6875 z M 2,-0.078125 c -0.359375,0 -0.625,-0.203125 -0.78125,-0.515625 C 1.125,-0.796875 1.0625,-1.15625 1.0625,-1.5625 c 0,-0.6875 0.40625,-1.203125 0.96875,-1.203125 0.3125,0 0.53125,0.125 0.703125,0.375 0.171875,0.265625 0.171875,0.5625 0.171875,0.96875 0,0.390625 0,0.6875 -0.1875,0.96875 -0.15625,0.234375 -0.390625,0.375 -0.71875,0.375 z m 0,0" + id="id-dd347ed4-e532-45ce-b476-4c311032035e" /> + </symbol> + </g> + </defs> + <g + id="id-ac82f790-61ec-4b14-a841-d6e5e1c6944e" + transform="translate(-149.009, -130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-28e507f1-d3ba-4237-8e44-fe869a26aa86"> + <g + transform="translate(148.712, 134.765)" + id="g12848"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-62bb846f-ed07-4ac0-aeb1-93db590b3ce6" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-10799211-d717-4f12-a5a3-c94c2a9667ce"> + <g + transform="translate(153.541, 136.259)" + id="g12852"> + <path + style="stroke:none" + d="m 1.046875,-2.28125 c 0,-0.5625 0.046875,-1.078125 0.3125,-1.515625 0.234375,-0.375 0.609375,-0.625 1.0625,-0.625 0.203125,0 0.484375,0.046875 0.625,0.234375 C 2.875,-4.171875 2.71875,-4.046875 2.71875,-3.84375 c 0,0.171875 0.125,0.328125 0.328125,0.328125 0.21875,0 0.34375,-0.140625 0.34375,-0.34375 0,-0.40625 -0.296875,-0.765625 -0.984375,-0.765625 -1,0 -2.03125,0.921875 -2.03125,2.421875 0,1.796875 0.84375,2.34375 1.625,2.34375 0.84375,0 1.578125,-0.65625 1.578125,-1.5625 0,-0.890625 -0.703125,-1.546875 -1.515625,-1.546875 -0.5625,0 -0.859375,0.375 -1.015625,0.6875 z M 2,-0.078125 c -0.359375,0 -0.625,-0.203125 -0.78125,-0.515625 C 1.125,-0.796875 1.0625,-1.15625 1.0625,-1.5625 c 0,-0.6875 0.40625,-1.203125 0.96875,-1.203125 0.3125,0 0.53125,0.125 0.703125,0.375 0.171875,0.265625 0.171875,0.5625 0.171875,0.96875 0,0.390625 0,0.6875 -0.1875,0.96875 -0.15625,0.234375 -0.390625,0.375 -0.71875,0.375 z m 0,0" + id="id-a3c8f2ce-b6e4-4560-a18f-c267b9e7c980" /> + </g> + </g> + </g> + </g> + <g + transform="matrix(0.33334,0,0,0.33334,71.729137,63.243171)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_6$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-1-2-7"> + <defs + id="id-340e0317-f822-4bec-bb3a-9e837f4583d5-4"> + <g + id="g21941"> + <symbol + overflow="visible" + id="symbol21927"> + <path + style="stroke:none" + d="" + id="path21925" /> + </symbol> + <symbol + overflow="visible" + id="symbol21931"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path21929" /> + </symbol> + <symbol + overflow="visible" + id="symbol21935"> + <path + style="stroke:none" + d="" + id="path21933" /> + </symbol> + <symbol + overflow="visible" + id="symbol21939"> + <path + style="stroke:none" + d="m 1.046875,-2.28125 c 0,-0.5625 0.046875,-1.078125 0.3125,-1.515625 0.234375,-0.375 0.609375,-0.625 1.0625,-0.625 0.203125,0 0.484375,0.046875 0.625,0.234375 C 2.875,-4.171875 2.71875,-4.046875 2.71875,-3.84375 c 0,0.171875 0.125,0.328125 0.328125,0.328125 0.21875,0 0.34375,-0.140625 0.34375,-0.34375 0,-0.40625 -0.296875,-0.765625 -0.984375,-0.765625 -1,0 -2.03125,0.921875 -2.03125,2.421875 0,1.796875 0.84375,2.34375 1.625,2.34375 0.84375,0 1.578125,-0.65625 1.578125,-1.5625 0,-0.890625 -0.703125,-1.546875 -1.515625,-1.546875 -0.5625,0 -0.859375,0.375 -1.015625,0.6875 z M 2,-0.078125 c -0.359375,0 -0.625,-0.203125 -0.78125,-0.515625 C 1.125,-0.796875 1.0625,-1.15625 1.0625,-1.5625 c 0,-0.6875 0.40625,-1.203125 0.96875,-1.203125 0.3125,0 0.53125,0.125 0.703125,0.375 0.171875,0.265625 0.171875,0.5625 0.171875,0.96875 0,0.390625 0,0.6875 -0.1875,0.96875 -0.15625,0.234375 -0.390625,0.375 -0.71875,0.375 z m 0,0" + id="path21937" /> + </symbol> + </g> + </defs> + <g + id="id-ac82f790-61ec-4b14-a841-d6e5e1c6944e-3" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-28e507f1-d3ba-4237-8e44-fe869a26aa86-7"> + <g + transform="translate(148.712,134.765)" + id="g12848-1"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-62bb846f-ed07-4ac0-aeb1-93db590b3ce6-3" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-10799211-d717-4f12-a5a3-c94c2a9667ce-8"> + <g + transform="translate(153.541,136.259)" + id="g12852-0"> + <path + style="stroke:none" + d="m 1.046875,-2.28125 c 0,-0.5625 0.046875,-1.078125 0.3125,-1.515625 0.234375,-0.375 0.609375,-0.625 1.0625,-0.625 0.203125,0 0.484375,0.046875 0.625,0.234375 C 2.875,-4.171875 2.71875,-4.046875 2.71875,-3.84375 c 0,0.171875 0.125,0.328125 0.328125,0.328125 0.21875,0 0.34375,-0.140625 0.34375,-0.34375 0,-0.40625 -0.296875,-0.765625 -0.984375,-0.765625 -1,0 -2.03125,0.921875 -2.03125,2.421875 0,1.796875 0.84375,2.34375 1.625,2.34375 0.84375,0 1.578125,-0.65625 1.578125,-1.5625 0,-0.890625 -0.703125,-1.546875 -1.515625,-1.546875 -0.5625,0 -0.859375,0.375 -1.015625,0.6875 z M 2,-0.078125 c -0.359375,0 -0.625,-0.203125 -0.78125,-0.515625 C 1.125,-0.796875 1.0625,-1.15625 1.0625,-1.5625 c 0,-0.6875 0.40625,-1.203125 0.96875,-1.203125 0.3125,0 0.53125,0.125 0.703125,0.375 0.171875,0.265625 0.171875,0.5625 0.171875,0.96875 0,0.390625 0,0.6875 -0.1875,0.96875 -0.15625,0.234375 -0.390625,0.375 -0.71875,0.375 z m 0,0" + id="id-a3c8f2ce-b6e4-4560-a18f-c267b9e7c980-9" /> + </g> + </g> + </g> + </g> + <ellipse + style="fill:none;stroke:#000000;stroke-width:0.414999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000" + id="path22814" + cx="73.60186" + cy="65.893219" + rx="3.447439" + ry="4.54286" /> + <ellipse + style="fill:none;stroke:#000000;stroke-width:0.414999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000" + id="path22816" + cx="84.445793" + cy="61.354347" + rx="5.6511369" + ry="4.5612631" /> + <ellipse + style="fill:none;stroke:#000000;stroke-width:0.414999;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000" + id="path22820" + cx="89.33313" + cy="71.678505" + rx="5.8672915" + ry="4.5743823" /> + </g> + <g + id="g1667-74-2" + transform="translate(-9.9464663,0.00300113)"> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-4-7)" + d="m 42.563016,70.061578 h 7.397615" + id="path1197-4-5" /> + <g + transform="matrix(0.33334 0 0 0.33334 41.2793 68.8546)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_6$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-30-4"> + <defs + id="id-da76a307-5e4d-4d6b-8db1-ad12b5da73b9"> + <g + id="id-5adbefde-f887-4a9a-a6ac-127ee93fc3e7"> + <symbol + overflow="visible" + id="id-95a07a23-3ffb-4f54-b79f-b7fa83a6b10a"> + <path + style="stroke:none" + d="" + id="id-de39ef98-370a-40ba-ad71-b9d1f6256df7" /> + </symbol> + <symbol + overflow="visible" + id="id-c6c45bc3-d610-44f3-823f-c4c44dbdb4db"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-e27a419a-b47b-4b72-85ce-960358625e72" /> + </symbol> + <symbol + overflow="visible" + id="id-201b086b-2109-4a98-bc72-ec23140b86bd"> + <path + style="stroke:none" + d="" + id="id-2f5c4190-47d0-43f2-adb8-ce59c50da0d0" /> + </symbol> + <symbol + overflow="visible" + id="id-b66c2986-f822-4c80-8a87-598b109dd01d"> + <path + style="stroke:none" + d="m 1.046875,-2.28125 c 0,-0.5625 0.046875,-1.078125 0.3125,-1.515625 0.234375,-0.375 0.609375,-0.625 1.0625,-0.625 0.203125,0 0.484375,0.046875 0.625,0.234375 C 2.875,-4.171875 2.71875,-4.046875 2.71875,-3.84375 c 0,0.171875 0.125,0.328125 0.328125,0.328125 0.21875,0 0.34375,-0.140625 0.34375,-0.34375 0,-0.40625 -0.296875,-0.765625 -0.984375,-0.765625 -1,0 -2.03125,0.921875 -2.03125,2.421875 0,1.796875 0.84375,2.34375 1.625,2.34375 0.84375,0 1.578125,-0.65625 1.578125,-1.5625 0,-0.890625 -0.703125,-1.546875 -1.515625,-1.546875 -0.5625,0 -0.859375,0.375 -1.015625,0.6875 z M 2,-0.078125 c -0.359375,0 -0.625,-0.203125 -0.78125,-0.515625 C 1.125,-0.796875 1.0625,-1.15625 1.0625,-1.5625 c 0,-0.6875 0.40625,-1.203125 0.96875,-1.203125 0.3125,0 0.53125,0.125 0.703125,0.375 0.171875,0.265625 0.171875,0.5625 0.171875,0.96875 0,0.390625 0,0.6875 -0.1875,0.96875 -0.15625,0.234375 -0.390625,0.375 -0.71875,0.375 z m 0,0" + id="id-17f83115-dd47-473f-8834-5559281ce5e8" /> + </symbol> + </g> + </defs> + <g + id="id-d5430e4f-c0f5-445d-9768-c56d806d17ad" + transform="translate(-149.009, -130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-fba25b9a-9a09-4a73-9d71-9264658c843f"> + <g + transform="translate(148.712, 134.765)" + id="g13467"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-ca546e3a-927c-43c5-a119-5e4fe7569dbe" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-907e1f69-9470-4cf5-ab34-e25a25e280f8"> + <g + transform="translate(153.541, 136.259)" + id="g13471"> + <path + style="stroke:none" + d="m 1.046875,-2.28125 c 0,-0.5625 0.046875,-1.078125 0.3125,-1.515625 0.234375,-0.375 0.609375,-0.625 1.0625,-0.625 0.203125,0 0.484375,0.046875 0.625,0.234375 C 2.875,-4.171875 2.71875,-4.046875 2.71875,-3.84375 c 0,0.171875 0.125,0.328125 0.328125,0.328125 0.21875,0 0.34375,-0.140625 0.34375,-0.34375 0,-0.40625 -0.296875,-0.765625 -0.984375,-0.765625 -1,0 -2.03125,0.921875 -2.03125,2.421875 0,1.796875 0.84375,2.34375 1.625,2.34375 0.84375,0 1.578125,-0.65625 1.578125,-1.5625 0,-0.890625 -0.703125,-1.546875 -1.515625,-1.546875 -0.5625,0 -0.859375,0.375 -1.015625,0.6875 z M 2,-0.078125 c -0.359375,0 -0.625,-0.203125 -0.78125,-0.515625 C 1.125,-0.796875 1.0625,-1.15625 1.0625,-1.5625 c 0,-0.6875 0.40625,-1.203125 0.96875,-1.203125 0.3125,0 0.53125,0.125 0.703125,0.375 0.171875,0.265625 0.171875,0.5625 0.171875,0.96875 0,0.390625 0,0.6875 -0.1875,0.96875 -0.15625,0.234375 -0.390625,0.375 -0.71875,0.375 z m 0,0" + id="id-a5e049fa-7e86-4923-837c-559f0c508a17" /> + </g> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:0.465;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:6;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#EmptyDiamondL-3-25-4)" + d="m 42.563016,70.061578 2.683925,0.06539" + id="path1197-5-9-6" + sodipodi:nodetypes="cc" /> + </g> + <g + transform="matrix(0.33334,0,0,0.33334,41.31541,67.796366)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_3$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="0.33334" + id="g1620-3-5-9"> + <defs + id="id-7fcd93c0-5f80-40df-9485-b5e606d0fe70-4"> + <g + id="g5281"> + <symbol + overflow="visible" + id="symbol5267"> + <path + style="stroke:none" + d="" + id="path5265" /> + </symbol> + <symbol + overflow="visible" + id="symbol5271"> + <path + style="stroke:none" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path5269" /> + </symbol> + <symbol + overflow="visible" + id="symbol5275"> + <path + style="stroke:none" + d="" + id="path5273" /> + </symbol> + <symbol + overflow="visible" + id="symbol5279"> + <path + style="stroke:none" + d="m 1.90625,-2.328125 c 0.546875,0 0.9375,0.375 0.9375,1.125 0,0.859375 -0.515625,1.125 -0.90625,1.125 -0.28125,0 -0.90625,-0.078125 -1.1875,-0.5 0.328125,0 0.40625,-0.234375 0.40625,-0.390625 0,-0.21875 -0.171875,-0.375 -0.390625,-0.375 -0.1875,0 -0.390625,0.125 -0.390625,0.40625 0,0.65625 0.71875,1.078125 1.5625,1.078125 0.96875,0 1.640625,-0.65625 1.640625,-1.34375 0,-0.546875 -0.4375,-1.09375 -1.203125,-1.25 0.71875,-0.265625 0.984375,-0.78125 0.984375,-1.21875 0,-0.546875 -0.625,-0.953125 -1.40625,-0.953125 -0.765625,0 -1.359375,0.375 -1.359375,0.9375 0,0.234375 0.15625,0.359375 0.359375,0.359375 0.21875,0 0.359375,-0.15625 0.359375,-0.34375 0,-0.203125 -0.140625,-0.359375 -0.359375,-0.375 0.25,-0.296875 0.71875,-0.375 0.984375,-0.375 0.3125,0 0.75,0.15625 0.75,0.75 0,0.296875 -0.09375,0.625 -0.28125,0.828125 -0.21875,0.265625 -0.421875,0.28125 -0.765625,0.3125 -0.171875,0.015625 -0.1875,0.015625 -0.21875,0.015625 -0.015625,0 -0.078125,0.015625 -0.078125,0.09375 0,0.09375 0.0625,0.09375 0.1875,0.09375 z m 0,0" + id="path5277" /> + </symbol> + </g> + </defs> + <g + transform="translate(0.02359412,3.2552991)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_7$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="1.0" + id="g14105"> + <defs + id="id-b137b009-3a4b-4b82-81f7-b077c637af0d"> + <g + id="id-d544a572-2ec5-4862-9dec-d406cf600b8b"> + <symbol + overflow="visible" + id="id-88596d14-ec3c-419c-bc9d-6063019eedf3"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-e61318e7-f47a-47dd-9fac-ead51f3b0435" /> + </symbol> + <symbol + overflow="visible" + id="id-f44ab54a-f016-472f-b3b5-97e652bbfd86"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-54332ba6-b4cc-49aa-bea0-18799db7d422" /> + </symbol> + <symbol + overflow="visible" + id="id-91d4680b-37b1-426a-9dcf-eaa1baf39aa6"> + <path + style="stroke:none;stroke-width:0" + d="" + id="id-4914b0b6-0260-4241-95ad-39004a7d616a" /> + </symbol> + <symbol + overflow="visible" + id="id-ffdbe191-2ee9-4d56-a9c6-8bffb7cf6f44"> + <path + style="stroke:none;stroke-width:0" + d="m 3.734375,-4.203125 c 0.0625,-0.09375 0.0625,-0.109375 0.0625,-0.28125 H 1.96875 C 1.6875,-4.484375 1.609375,-4.5 1.359375,-4.515625 1,-4.546875 0.984375,-4.59375 0.96875,-4.703125 H 0.734375 l -0.25,1.484375 H 0.71875 c 0.015625,-0.109375 0.09375,-0.5625 0.203125,-0.640625 0.046875,-0.03125 0.625,-0.03125 0.71875,-0.03125 H 3.15625 c -0.21875,0.28125 -0.578125,0.71875 -0.71875,0.921875 -0.90625,1.1875 -1,2.296875 -1,2.703125 0,0.078125 0,0.40625 0.328125,0.40625 0.34375,0 0.34375,-0.3125 0.34375,-0.40625 v -0.28125 c 0,-1.34375 0.28125,-1.96875 0.578125,-2.34375 z m 0,0" + id="id-09b10cdf-2f0e-4eea-8c88-95250998a53c" /> + </symbol> + </g> + </defs> + <g + id="id-e0a35a6d-0aa7-4060-b436-0f9e2231c77f" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-9a2fb48b-7a31-4fcd-8280-bdd88e132d18"> + <g + transform="translate(148.712,134.765)" + id="g14097"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-903fe605-b570-4cdb-8a09-537f79eed077" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-55280c11-2a4c-458f-9692-e82a5b10c8cd"> + <g + transform="translate(153.541,136.259)" + id="g14101"> + <path + style="stroke:none;stroke-width:0" + d="m 3.734375,-4.203125 c 0.0625,-0.09375 0.0625,-0.109375 0.0625,-0.28125 H 1.96875 C 1.6875,-4.484375 1.609375,-4.5 1.359375,-4.515625 1,-4.546875 0.984375,-4.59375 0.96875,-4.703125 H 0.734375 l -0.25,1.484375 H 0.71875 c 0.015625,-0.109375 0.09375,-0.5625 0.203125,-0.640625 0.046875,-0.03125 0.625,-0.03125 0.71875,-0.03125 H 3.15625 c -0.21875,0.28125 -0.578125,0.71875 -0.71875,0.921875 -0.90625,1.1875 -1,2.296875 -1,2.703125 0,0.078125 0,0.40625 0.328125,0.40625 0.34375,0 0.34375,-0.3125 0.34375,-0.40625 v -0.28125 c 0,-1.34375 0.28125,-1.96875 0.578125,-2.34375 z m 0,0" + id="id-bc9a5ce2-68fe-4a1c-8ee3-c262c13b6941" /> + </g> + </g> + </g> + </g> + <path + style="fill:none;stroke:#000000;stroke-width:1.24498;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Arrow1Sstart);marker-end:url(#Arrow1Send)" + d="M -151.60269,20.705421 H 9.3233733" + id="path16081" /> + <ellipse + style="fill:none;stroke:#000000;stroke-width:0.952825;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.515883;stop-color:#000000" + id="path18931" + cx="-146.85681" + cy="-15.606631" + rx="12.7988" + ry="40.455292" /> + <ellipse + style="fill:none;stroke:#000000;stroke-width:0.952825;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.515883;stop-color:#000000" + id="path18931-3" + cx="-116.35129" + cy="-14.799479" + rx="12.7988" + ry="40.455292" /> + <g + transform="translate(33.047713,-3.9606659)" + ns4:version="1.8.1" + ns4:texconverter="pdflatex" + ns4:pdfconverter="inkscape" + ns4:text="$v_7$" + ns4:preamble="/home/netko/.config/inkscape/extensions/textext/default_packages.tex" + ns4:scale="0.9449006740783156" + ns4:alignment="middle center" + ns4:stroke-to-path="0" + ns4:inkscapeversion="1.0.2" + ns4:jacobian_sqrt="1.0" + id="g14105-7"> + <defs + id="id-b137b009-3a4b-4b82-81f7-b077c637af0d-9"> + <g + id="g22059"> + <symbol + overflow="visible" + id="symbol22045"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path22043" /> + </symbol> + <symbol + overflow="visible" + id="symbol22049"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="path22047" /> + </symbol> + <symbol + overflow="visible" + id="symbol22053"> + <path + style="stroke:none;stroke-width:0" + d="" + id="path22051" /> + </symbol> + <symbol + overflow="visible" + id="symbol22057"> + <path + style="stroke:none;stroke-width:0" + d="m 3.734375,-4.203125 c 0.0625,-0.09375 0.0625,-0.109375 0.0625,-0.28125 H 1.96875 C 1.6875,-4.484375 1.609375,-4.5 1.359375,-4.515625 1,-4.546875 0.984375,-4.59375 0.96875,-4.703125 H 0.734375 l -0.25,1.484375 H 0.71875 c 0.015625,-0.109375 0.09375,-0.5625 0.203125,-0.640625 0.046875,-0.03125 0.625,-0.03125 0.71875,-0.03125 H 3.15625 c -0.21875,0.28125 -0.578125,0.71875 -0.71875,0.921875 -0.90625,1.1875 -1,2.296875 -1,2.703125 0,0.078125 0,0.40625 0.328125,0.40625 0.34375,0 0.34375,-0.3125 0.34375,-0.40625 v -0.28125 c 0,-1.34375 0.28125,-1.96875 0.578125,-2.34375 z m 0,0" + id="path22055" /> + </symbol> + </g> + </defs> + <g + id="id-e0a35a6d-0aa7-4060-b436-0f9e2231c77f-0" + transform="translate(-149.009,-130.359)"> + <g + style="fill:#000000;fill-opacity:1" + id="id-9a2fb48b-7a31-4fcd-8280-bdd88e132d18-2"> + <g + transform="translate(148.712,134.765)" + id="g14097-1"> + <path + style="stroke:none;stroke-width:0" + d="m 4.671875,-3.703125 c 0,-0.546875 -0.265625,-0.703125 -0.4375,-0.703125 -0.25,0 -0.5,0.265625 -0.5,0.484375 0,0.125 0.046875,0.1875 0.15625,0.296875 0.21875,0.203125 0.34375,0.453125 0.34375,0.8125 0,0.421875 -0.609375,2.703125 -1.765625,2.703125 -0.515625,0 -0.75,-0.34375 -0.75,-0.875 0,-0.546875 0.28125,-1.28125 0.578125,-2.109375 0.078125,-0.171875 0.125,-0.3125 0.125,-0.5 0,-0.4375 -0.3125,-0.8125 -0.8125,-0.8125 -0.9375,0 -1.3125,1.453125 -1.3125,1.53125 0,0.109375 0.09375,0.109375 0.109375,0.109375 0.109375,0 0.109375,-0.03125 0.15625,-0.1875 0.296875,-1 0.71875,-1.234375 1.015625,-1.234375 0.078125,0 0.25,0 0.25,0.3125 0,0.25 -0.109375,0.53125 -0.171875,0.703125 -0.4375,1.15625 -0.5625,1.609375 -0.5625,2.046875 0,1.078125 0.875,1.234375 1.328125,1.234375 1.671875,0 2.25,-3.296875 2.25,-3.8125 z m 0,0" + id="id-903fe605-b570-4cdb-8a09-537f79eed077-7" /> + </g> + </g> + <g + style="fill:#000000;fill-opacity:1" + id="id-55280c11-2a4c-458f-9692-e82a5b10c8cd-5"> + <g + transform="translate(153.541,136.259)" + id="g14101-1"> + <path + style="stroke:none;stroke-width:0" + d="m 3.734375,-4.203125 c 0.0625,-0.09375 0.0625,-0.109375 0.0625,-0.28125 H 1.96875 C 1.6875,-4.484375 1.609375,-4.5 1.359375,-4.515625 1,-4.546875 0.984375,-4.59375 0.96875,-4.703125 H 0.734375 l -0.25,1.484375 H 0.71875 c 0.015625,-0.109375 0.09375,-0.5625 0.203125,-0.640625 0.046875,-0.03125 0.625,-0.03125 0.71875,-0.03125 H 3.15625 c -0.21875,0.28125 -0.578125,0.71875 -0.71875,0.921875 -0.90625,1.1875 -1,2.296875 -1,2.703125 0,0.078125 0,0.40625 0.328125,0.40625 0.34375,0 0.34375,-0.3125 0.34375,-0.40625 v -0.28125 c 0,-1.34375 0.28125,-1.96875 0.578125,-2.34375 z m 0,0" + id="id-bc9a5ce2-68fe-4a1c-8ee3-c262c13b6941-7" /> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/doc/optimal_layout_report/geodistrib.pdf b/doc/optimal_layout_report/geodistrib.pdf Binary files differnew file mode 100644 index 00000000..68269a09 --- /dev/null +++ b/doc/optimal_layout_report/geodistrib.pdf diff --git a/doc/optimal_layout_report/geodistrib.tex b/doc/optimal_layout_report/geodistrib.tex new file mode 100644 index 00000000..bb6f0391 --- /dev/null +++ b/doc/optimal_layout_report/geodistrib.tex @@ -0,0 +1,317 @@ +\documentclass[]{article} + +\usepackage{amsmath,amssymb} +\usepackage{amsthm} + +\usepackage{stmaryrd} + +\usepackage{graphicx,xcolor} +\usepackage{hyperref} + +\usepackage{algorithm,algpseudocode,float} + +\renewcommand\thesubsubsection{\Alph{subsubsection})} + +\newtheorem{proposition}{Proposition} + +%opening +\title{An algorithm for geo-distributed and redundant storage in Garage} +\author{Mendes Oulamara \\ \emph{mendes@deuxfleurs.fr}} +\date{} + +\begin{document} + +\maketitle + +\begin{abstract} + Garage +\end{abstract} + +\section{Introduction} + +Garage\footnote{\url{https://garagehq.deuxfleurs.fr/}} is an open-source distributed object storage service tailored for self-hosting. It was designed by the Deuxfleurs association\footnote{\url{https://deuxfleurs.fr/}} to enable small structures (associations, collectives, small companies) to share storage resources to reliably self-host their data, possibly with old and non-reliable machines. + +To achieve these reliability and availability goals, the data is broken into \emph{partitions} and every partition is replicated over 3 different machines (that we call \emph{nodes}). When the data is queried, a consensus algorithm allows to fetch it from one of the nodes. A \emph{replication factor} of 3 ensures the best guarantees in the consensus algorithm \cite{ADD RREF}, but this parameter can be different. + +Moreover, if the nodes are spread over different \emph{zones} (different houses, offices, cities\dots), we can ask the data to be replicated over nodes belonging to different zones, to improve the storage robustness against zone failure (such as power outage). To do so, we set a \emph{redundancy parameter}, that is no more than the replication factor, and we ask that any partition is replicated over this number of zones at least. + +In this work, we propose a repartition algorithm that, given the nodes specifications and the replication and redundancy parameters, computes an optimal assignation of partitions to nodes. We say that the assignation is optimal in the sense that it maximizes the size of the partitions, and hence the effective storage capacity of the system. + +Moreover, when a former assignation exists, which is not optimal anymore due to nodes or zones updates, our algorithm computes a new optimal assignation that minimizes the amount of data to be transferred during the assignation update (the \emph{transfer load}). + +We call the set of nodes cooperating to store the data a \emph{cluster}, and a description of the nodes, zones and the assignation of partitions to nodes a \emph{cluster layout} + +\subsection{Notations} + +Let $k$ be some fixed parameter value, typically 8, that we call the ``partition bits''. +Every object to be stored in the system is split into data blocks of fixed size. We compute a hash $h(\mathbf{b})$ of every such block $\mathbf{b}$, and we define the $k$ last bits of this hash to be the partition number $p(\mathbf{b})$ of the block. This label can take $P=2^k$ different values, and hence there are $P$ different partitions. We denote $\mathbf{P}$ the set of partition labels (i.e. $\mathbf{P}=\llbracket1,P\rrbracket$). + +We are given a set $\mathbf{N}$ of $N$ nodes and a set $\mathbf{Z}$ of $Z$ zones. Every node $n$ has a non-negative storage capacity $c_n\ge 0$ and belongs to a zone $z_n\in \mathbf{Z}$. We are also given a replication parameter $\rho_\mathbf{N}$ and a redundancy parameter $\rho_\mathbf{Z}$ such that $1\le \rho_\mathbf{Z} \le \rho_\mathbf{N}$ (typical values would be $\rho_N=3$ and $\rho_Z=2$). + +Our goal is to compute an assignment $\alpha = (\alpha_p^1, \ldots, \alpha_p^{\rho_\mathbf{N}})_{p\in \mathbf{P}}$ such that every partition $p$ is associated to $\rho_\mathbf{N}$ distinct nodes $\alpha_p^1, \ldots, \alpha_p^{\rho_\mathbf{N}} \in \mathbf{N}$ and these nodes belong to at least $\rho_\mathbf{Z}$ distinct zones. Among the possible assignations, we choose one that \emph{maximizes} the effective storage capacity of the cluster. If the layout contained a previous assignment $\alpha'$, we \emph{minimize} the amount of data to transfer during the layout update by making $\alpha$ as close as possible to $\alpha'$. These maximization and minimization are described more formally in the following section. + +\subsection{Optimization parameters} + +To link the effective storage capacity of the cluster to partition assignment, we make the following assumption: +\begin{equation} + \tag{H1} + \text{\emph{All partitions have the same size $s$.}} +\end{equation} +This assumption is justified by the dispersion of the hashing function, when the number of partitions is small relative to the number of stored blocks. + +Every node $n$ wille store some number $p_n$ of partitions (it is the number of partitions $p$ such that $n$ appears in the $\alpha_p$). Hence the partitions stored by $n$ (and hence all partitions by our assumption) have there size bounded by $c_n/p_n$. This remark leads us to define the optimal size that we will want to maximize: + +\begin{equation} + \label{eq:optimal} + \tag{OPT} +s^* = \min_{n \in N} \frac{c_n}{p_n}. +\end{equation} + +When the capacities of the nodes are updated (this includes adding or removing a node), we want to update the assignment as well. However, transferring the data between nodes has a cost and we would like to limit the number of changes in the assignment. We make the following assumption: +\begin{equation} + \tag{H2} + \text{\emph{Nodes updates happen rarely relatively to block operations.}} +\end{equation} +This assumption justifies that when we compute the new assignment $\alpha$, it is worth to optimize the partition size \eqref{eq:optimal} first, and then, among the possible optimal solution, to try to minimize the number of partition transfers. More formally, we minimize the distance between two assignments defined by +\begin{equation} + d(\alpha, \alpha') := \#\{ (n,p) \in \mathbf{N}\times\mathbf{P} ~|~ n\in \alpha_p \triangle \alpha'_p \} +\end{equation} +where the symmetric difference $\alpha_p \triangle \alpha'_p$ denotes the nodes appearing in one of the assignations but not in both. + +\section{Computation of an optimal assignment} + +The algorithm that we propose takes as inputs the cluster layout parameters $\mathbf{N}$, $\mathbf{Z}$, $\mathbf{P}$, $(c_n)_{n\in \mathbf{N}}$, $\rho_\mathbf{N}$, $\rho_\mathbf{Z}$, that we defined in the introduction, together with the former assignation $\alpha'$ (if any). The computation of the new optimal assignation $\alpha^*$ is done in three successive steps that will be detailed in the following sections. The first step computes the largest partition size $s^*$ that an assignation can achieve. The second step computes an optimal candidate assignment $\alpha$ that achieves $s^*$ and a heuristic is used in the computation to make it hopefully close to $\alpha'$. The third steps modifies $\alpha$ iteratively to reduces $d(\alpha, \alpha')$ and yields an assignation $\alpha^*$ achieving $s^*$, and minimizing $d(\cdot, \alpha')$ among such assignations. + +We will explain in the next section how to represent an assignment $\alpha$ by a flow $f$ on a weighted graph $G$ to enable the use of flow and graph algorithms. The main function of the algorithm can be written as follows. + +\subsubsection*{Algorithm} + +\begin{algorithmic}[1] + \Function{Compute Layout}{$\mathbf{N}$, $\mathbf{Z}$, $\mathbf{P}$, $(c_n)_{n\in \mathbf{N}}$, $\rho_\mathbf{N}$, $\rho_\mathbf{Z}$, $\alpha'$} + \State $s^* \leftarrow$ \Call{Compute Partition Size}{$\mathbf{N}$, $\mathbf{Z}$, $\mathbf{P}$, $(c_n)_{n\in \mathbf{N}}$, $\rho_\mathbf{N}$, $\rho_\mathbf{Z}$} + \State $G \leftarrow G(s^*)$ + \State $f \leftarrow$ \Call{Compute Candidate Assignment}{$G$, $\alpha'$} + \State $f^* \leftarrow$ \Call{Minimize transfer load}{$G$, $f$, $\alpha'$} + \State Build $\alpha^*$ from $f^*$ + \State \Return $\alpha^*$ + \EndFunction +\end{algorithmic} + +\subsubsection*{Complexity} +As we will see in the next sections, the worst case complexity of this algorithm is $O(P^2 N^2)$. The minimization of transfer load is the most expensive step, and it can run with a timeout since it is only an optimization step. Without this step (or with a smart timeout), the worst cas complexity can be $O((PN)^{3/2}\log C)$ where $C$ is the total storage capacity of the cluster. + +\subsection{Determination of the partition size $s^*$} + +We will represent an assignment $\alpha$ as a flow in a specific graph $G$. We will not compute the optimal partition size $s^*$ a priori, but we will determine it by dichotomy, as the largest size $s$ such that the maximal flow achievable on $G=G(s)$ has value $\rho_\mathbf{N}P$. We will assume that the capacities are given in a small enough unit (say, Megabytes), and we will determine $s^*$ at the precision of the given unit. + +Given some candidate size value $s$, we describe the oriented weighted graph $G=(V,E)$ with vertex set $V$ arc set $E$ (see Figure \ref{fig:flowgraph}). + +The set of vertices $V$ contains the source $\mathbf{s}$, the sink $\mathbf{t}$, vertices +$\mathbf{p^+, p^-}$ for every partition $p$, vertices $\mathbf{x}_{p,z}$ for every partition $p$ and zone $z$, and vertices $\mathbf{n}$ for every node $n$. + +The set of arcs $E$ contains: +\begin{itemize} + \item ($\mathbf{s}$,$\mathbf{p}^+$, $\rho_\mathbf{Z}$) for every partition $p$; + \item ($\mathbf{s}$,$\mathbf{p}^-$, $\rho_\mathbf{N}-\rho_\mathbf{Z}$) for every partition $p$; + \item ($\mathbf{p}^+$,$\mathbf{x}_{p,z}$, 1) for every partition $p$ and zone $z$; + \item ($\mathbf{p}^-$,$\mathbf{x}_{p,z}$, $\rho_\mathbf{N}-\rho_\mathbf{Z}$) for every partition $p$ and zone $z$; + \item ($\mathbf{x}_{p,z}$,$\mathbf{n}$, 1) for every partition $p$, zone $z$ and node $n\in z$; + \item ($\mathbf{n}$, $\mathbf{t}$, $\lfloor c_n/s \rfloor$) for every node $n$. +\end{itemize} + +\begin{figure} + \centering + \includegraphics[width=\linewidth]{figures/flow_graph_param} + \caption{An example of graph $G(s)$. Arcs are oriented from left to right, and unlabeled arcs have capacity 1. In this example, nodes $n_1,n_2,n_3$ belong to zone $z_1$, and nodes $n_4,n_5$ belong to zone $z_2$.} + \label{fig:flowgraph} +\end{figure} + +In the following complexity calculations, we will use the number of vertices and edges of $G$. Remark from now that $\# V = O(PZ)$ and $\# E = O(PN)$. + +\begin{proposition} + An assignment $\alpha$ is realizable with partition size $s$ and the redundancy constraints $(\rho_\mathbf{N},\rho_\mathbf{Z})$ if and only if there exists a maximal flow function $f$ in $G$ with total flow $\rho_\mathbf{N}P$, such that the arcs ($\mathbf{x}_{p,z}$,$\mathbf{n}$, 1) used are exactly those for which $p$ is associated to $n$ in $\alpha$. +\end{proposition} +\begin{proof} + Given such flow $f$, we can reconstruct a candidate $\alpha$. In $f$, the flow passing through $\mathbf{p^+}$ and $\mathbf{p^-}$ is $\rho_\mathbf{N}$, and since the outgoing capacity of every $\mathbf{x}_{p,z}$ is 1, every partition is associated to $\rho_\mathbf{N}$ distinct nodes. The fraction $\rho_\mathbf{Z}$ of the flow passing through every $\mathbf{p^+}$ must be spread over as many distinct zones as every arc outgoing from $\mathbf{p^+}$ has capacity 1. So the reconstructed $\alpha$ verifies the redundancy constraints. For every node $n$, the flow between $\mathbf{n}$ and $\mathbf{t}$ corresponds to the number of partitions associated to $n$. By construction of $f$, this does not exceed $\lfloor c_n/s \rfloor$. We assumed that the partition size is $s$, hence this association does not exceed the storage capacity of the nodes. + + In the other direction, given an assignment $\alpha$, one can similarly check that the facts that $\alpha$ respects the redundancy constraints, and the storage capacities of the nodes, are necessary condition to construct a maximal flow function $f$. +\end{proof} + +\textbf{Implementation remark:} In the flow algorithm, while exploring the graph, we explore the neighbours of every vertex in a random order to heuristically spread the associations between nodes and partitions. + +\subsubsection*{Algorithm} +With this result mind, we can describe the first step of our algorithm. All divisions are supposed to be integer divisions. +\begin{algorithmic}[1] + \Function{Compute Partition Size}{$\mathbf{N}$, $\mathbf{Z}$, $\mathbf{P}$, $(c_n)_{n\in \mathbf{N}}$, $\rho_\mathbf{N}$, $\rho_\mathbf{Z}$} + + \State Build the graph $G=G(s=1)$ + \State $ f \leftarrow$ \Call{Maximal flow}{$G$} + \If{$f.\mathrm{total flow} < \rho_\mathbf{N}P$} + + \State \Return Error: capacities too small or constraints too strong. + \EndIf + + \State $s^- \leftarrow 1$ + \State $s^+ \leftarrow 1+\frac{1}{\rho_\mathbf{N}}\sum_{n \in \mathbf{N}} c_n$ + + \While{$s^-+1 < s^+$} + \State Build the graph $G=G(s=(s^-+s^+)/2)$ + \State $ f \leftarrow$ \Call{Maximal flow}{$G$} + \If{$f.\mathrm{total flow} < \rho_\mathbf{N}P$} + \State $s^+ \leftarrow (s^- + s^+)/2$ + \Else + \State $s^- \leftarrow (s^- + s^+)/2$ + \EndIf + \EndWhile + + \State \Return $s^-$ + \EndFunction +\end{algorithmic} + +\subsubsection*{Complexity} + +To compute the maximal flow, we use Dinic's algorithm. Its complexity on general graphs is $O(\#V^2 \#E)$, but on graphs with edge capacity bounded by a constant, it turns out to be $O(\#E^{3/2})$. The graph $G$ does not fall in this case since the capacities of the arcs incoming to $\mathbf{t}$ are far from bounded. However, the proof of this complexity function works readily for graphs where we only ask the edges \emph{not} incoming to the sink $\mathbf{t}$ to have their capacities bounded by a constant. One can find the proof of this claim in \cite[Section 2]{even1975network}. +The dichotomy adds a logarithmic factor $\log (C)$ where $C=\sum_{n \in \mathbf{N}} c_n$ is the total capacity of the cluster. The total complexity of this first function is hence +$O(\#E^{3/2}\log C ) = O\big((PN)^{3/2} \log C\big)$. + +\subsubsection*{Metrics} +We can display the discrepancy between the computed $s^*$ and the best size we could have hoped for the given total capacity, that is $C/\rho_\mathbf{N}$. + +\subsection{Computation of a candidate assignment} + +Now that we have the optimal partition size $s^*$, to compute a candidate assignment it would be enough to compute a maximal flow function $f$ on $G(s^*)$. This is what we do if there is no former assignation $\alpha'$. + +If there is some $\alpha'$, we add a step that will heuristically help to obtain a candidate $\alpha$ closer to $\alpha'$. We fist compute a flow function $\tilde{f}$ that uses only the partition-to-node associations appearing in $\alpha'$. Most likely, $\tilde{f}$ will not be a maximal flow of $G(s^*)$. In Dinic's algorithm, we can start from a non maximal flow function and then discover improving paths. This is what we do by starting from $\tilde{f}$. The hope\footnote{This is only a hope, because one can find examples where the construction of $f$ from $\tilde{f}$ produces an assignment $\alpha$ that is not as close as possible to $\alpha'$.} is that the final flow function $f$ will tend to keep the associations appearing in $\tilde{f}$. + +More formally, we construct the graph $G_{|\alpha'}$ from $G$ by removing all the arcs $(\mathbf{x}_{p,z},\mathbf{n}, 1)$ where $p$ is not associated to $n$ in $\alpha'$. We compute a maximal flow function $\tilde{f}$ in $G_{|\alpha'}$. The flow $\tilde{f}$ is also a valid (most likely non maximal) flow function on $G$. We compute a maximal flow function $f$ on $G$ by starting Dinic's algorithm on $\tilde{f}$. + +\subsubsection*{Algorithm} +\begin{algorithmic}[1] + \Function{Compute Candidate Assignment}{$G$, $\alpha'$} + \State Build the graph $G_{|\alpha'}$ + \State $ \tilde{f} \leftarrow$ \Call{Maximal flow}{$G_{|\alpha'}$} + \State $ f \leftarrow$ \Call{Maximal flow from flow}{$G$, $\tilde{f}$} + \State \Return $f$ + \EndFunction +\end{algorithmic} + +~ + +\textbf{Remark:} The function ``Maximal flow'' can be just seen as the function ``Maximal flow from flow'' called with the zero flow function as starting flow. + +\subsubsection*{Complexity} +With the considerations of the last section, we have the complexity of the Dinic's algorithm $O(\#E^{3/2}) = O((PN)^{3/2})$. + +\subsubsection*{Metrics} + +We can display the flow value of $\tilde{f}$, which is an upper bound of the distance between $\alpha$ and $\alpha'$. It might be more a Debug level display than Info. + +\subsection{Minimization of the transfer load} + +Now that we have a candidate flow function $f$, we want to modify it to make its corresponding assignation $\alpha$ as close as possible to $\alpha'$. Denote by $f'$ the maximal flow corresponding to $\alpha'$, and let $d(f, \alpha')=d(f, f'):=d(\alpha,\alpha')$\footnote{It is the number of arcs of type $(\mathbf{x}_{p,z},\mathbf{n})$ saturated in one flow and not in the other.}. +We want to build a sequence $f=f_0, f_1, f_2 \dots$ of maximal flows such that $d(f_i, \alpha')$ decreases as $i$ increases. The distance being a non-negative integer, this sequence of flow functions must be finite. We now explain how to find some improving $f_{i+1}$ from $f_i$. + +For any maximal flow $f$ in $G$, we define the oriented weighted graph $G_f=(V, E_f)$ as follows. The vertices of $G_f$ are the same as the vertices of $G$. $E_f$ contains the arc $(v_1,v_2, w)$ between vertices $v_1,v_2\in V$ with weight $w$ if and only if the arc $(v_1,v_2)$ is not saturated in $f$ (i.e. $c(v_1,v_2)-f(v_1,v_2) \ge 1$, we also consider reversed arcs). The weight $w$ is: +\begin{itemize} + \item $-1$ if $(v_1,v_2)$ is of type $(\mathbf{x}_{p,z},\mathbf{n})$ or $(\mathbf{x}_{p,z},\mathbf{n})$ and is saturated in only one of the two flows $f,f'$; + \item $+1$ if $(v_1,v_2)$ is of type $(\mathbf{x}_{p,z},\mathbf{n})$ or $(\mathbf{x}_{p,z},\mathbf{n})$ and is saturated in either both or none of the two flows $f,f'$; + \item $0$ otherwise. +\end{itemize} + +If $\gamma$ is a simple cycle of arcs in $G_f$, we define its weight $w(\gamma)$ as the sum of the weights of its arcs. We can add $+1$ to the value of $f$ on the arcs of $\gamma$, and by construction of $G_f$ and the fact that $\gamma$ is a cycle, the function that we get is still a valid flow function on $G$, it is maximal as it has the same flow value as $f$. We denote this new function $f+\gamma$. + +\begin{proposition} + Given a maximal flow $f$ and a simple cycle $\gamma$ in $G_f$, we have $d(f+\gamma, f') - d(f,f') = w(\gamma)$. +\end{proposition} +\begin{proof} + Let $X$ be the set of arcs of type $(\mathbf{x}_{p,z},\mathbf{n})$. Then we can express $d(f,f')$ as + \begin{align*} + d(f,f') & = \#\{e\in X ~|~ f(e)\neq f'(e)\} + = \sum_{e\in X} 1_{f(e)\neq f'(e)} \\ + & = \frac{1}{2}\big( \#X + \sum_{e\in X} 1_{f(e)\neq f'(e)} - 1_{f(e)= f'(e)} \big). + \end{align*} + We can express the cycle weight as + \begin{align*} + w(\gamma) & = \sum_{e\in X, e\in \gamma} - 1_{f(e)\neq f'(e)} + 1_{f(e)= f'(e)}. + \end{align*} + Remark that since we passed on unit of flow in $\gamma$ to construct $f+\gamma$, we have for any $e\in X$, $f(e)=f'(e)$ if and only if $(f+\gamma)(e) \neq f'(e)$. + Hence + \begin{align*} + w(\gamma) & = \frac{1}{2}(w(\gamma) + w(\gamma)) \\ + &= \frac{1}{2} \Big( + \sum_{e\in X, e\in \gamma} - 1_{f(e)\neq f'(e)} + 1_{f(e)= f'(e)} \\ + & \qquad + + \sum_{e\in X, e\in \gamma} 1_{(f+\gamma)(e)\neq f'(e)} + 1_{(f+\gamma)(e)= f'(e)} + \Big). + \end{align*} + Plugging this in the previous equation, we find that + $$d(f,f')+w(\gamma) = d(f+\gamma, f').$$ +\end{proof} + +This result suggests that given some flow $f_i$, we just need to find a negative cycle $\gamma$ in $G_{f_i}$ to construct $f_{i+1}$ as $f_i+\gamma$. The following proposition ensures that this greedy strategy reaches an optimal flow. + +\begin{proposition} + For any maximal flow $f$, $G_f$ contains a negative cycle if and only if there exists a maximal flow $f^*$ in $G$ such that $d(f^*, f') < d(f, f')$. +\end{proposition} +\begin{proof} + Suppose that there is such flow $f^*$. Define the oriented multigraph $M_{f,f^*}=(V,E_M)$ with the same vertex set $V$ as in $G$, and for every $v_1,v_2 \in V$, $E_M$ contains $(f^*(v_1,v_2) - f(v_1,v_2))_+$ copies of the arc $(v_1,v_2)$. For every vertex $v$, its total degree (meaning its outer degree minus its inner degree) is equal to + \begin{align*} + \deg v & = \sum_{u\in V} (f^*(v,u) - f(v,u))_+ - \sum_{u\in V} (f^*(u,v) - f(u,v))_+ \\ + & = \sum_{u\in V} f^*(v,u) - f(v,u) = \sum_{u\in V} f^*(v,u) - \sum_{u\in V} f(v,u). + \end{align*} + The last two sums are zero for any inner vertex since $f,f^*$ are flows, and they are equal on the source and sink since the two flows are both maximal and have hence the same value. Thus, $\deg v = 0$ for every vertex $v$. + + This implies that the multigraph $M_{f,f^*}$ is the union of disjoint simple cycles. $f$ can be transformed into $f^*$ by pushing a mass 1 along all these cycles in any order. Since $d(f^*, f')<d(f,f')$, there must exists one of these simple cycles $\gamma$ with $d(f+\gamma, f') < d(f, f')$. Finally, since we can push a mass in $f$ along $\gamma$, it must appear in $G_f$. Hence $\gamma$ is a cycle of $G_f$ with negative weight. +\end{proof} + +In the next section we describe the corresponding algorithm. Instead of discovering only one cycle, we are allowed to discover a set $\Gamma$ of disjoint negative cycles. + +\subsubsection*{Algorithm} +\begin{algorithmic}[1] + \Function{Minimize transfer load}{$G$, $f$, $\alpha'$} + \State Build the graph $G_f$ + \State $\Gamma \leftarrow$ \Call{Detect Negative Cycles}{$G_f$} + \While{$\Gamma \neq \emptyset$} + \ForAll{$\gamma \in \Gamma$} + \State $f \leftarrow f+\gamma$ + \EndFor + \State Update $G_f$ + \State $\Gamma \leftarrow$ \Call{Detect Negative Cycles}{$G_f$} + \EndWhile + \State \Return $f$ + \EndFunction +\end{algorithmic} + +\subsubsection*{Complexity} +The distance $d(f,f')$ is bounded by the maximal number of differences in the associated assignment. If these assignment are totally disjoint, this distance is $2\rho_N P$. At every iteration of the While loop, the distance decreases, so there is at most $O(\rho_N P) = O(P)$ iterations. + +The detection of negative cycle is done with the Bellman-Ford algorithm, whose complexity should normally be $O(\#E\#V)$. In our case, it amounts to $O(P^2ZN)$. Multiplied by the complexity of the outer loop, it amounts to $O(P^3ZN)$ which is a lot when the number of partitions and nodes starts to be large. To avoid that, we adapt the Bellman-Ford algorithm. + +The Bellman-Ford algorithm runs $\#V$ iterations of an outer loop, and an inner loop over $E$. The idea is to compute the shortest paths from a source vertex $v$ to all other vertices. After $k$ iterations of the outer loop, the algorithm has computed all shortest path of length at most $k$. All simple paths have length at most $\#V-1$, so if there is an update in the last iteration of the loop, it means that there is a negative cycle in the graph. The observation that will enable us to improve the complexity is the following: + +\begin{proposition} + In the graph $G_f$ (and $G$), all simple paths have a length at most $4N$. +\end{proposition} +\begin{proof} + Since $f$ is a maximal flow, there is no outgoing edge from $\mathbf{s}$ in $G_f$. One can thus check than any simple path of length 4 must contain at least two node of type $\mathbf{n}$. Hence on a path, at most 4 arcs separate two successive nodes of type $\mathbf{n}$. +\end{proof} + +Thus, in the absence of negative cycles, shortest paths in $G_f$ have length at most $4N$. So we can do only $4N+1$ iterations of the outer loop in the Bellman-Ford algorithm. This makes the complexity of the detection of one set of cycle to be $O(N\#E) = O(N^2 P)$. + +With this improvement, the complexity of the whole algorithm is, in the worst case, $O(N^2P^2)$. However, since we detect several cycles at once and we start with a flow that might be close to the previous one, the number of iterations of the outer loop might be smaller in practice. + + + +\subsubsection*{Metrics} +We can display the node and zone utilization ratio, by dividing the flow passing through them divided by their outgoing capacity. In particular, we can pinpoint saturated nodes and zones (i.e. used at their full potential). + +We can display the distance to the previous assignment, and the number of partition transfers. + + +\bibliography{optimal_layout} +\bibliographystyle{ieeetr} + +\end{document} + + + diff --git a/doc/optimal_layout_report/optimal_layout.bib b/doc/optimal_layout_report/optimal_layout.bib new file mode 100644 index 00000000..9552b11d --- /dev/null +++ b/doc/optimal_layout_report/optimal_layout.bib @@ -0,0 +1,11 @@ + +@article{even1975network, + title={Network flow and testing graph connectivity}, + author={Even, Shimon and Tarjan, R Endre}, + journal={SIAM journal on computing}, + volume={4}, + number={4}, + pages={507--518}, + year={1975}, + publisher={SIAM} +} diff --git a/doc/optimal_layout_report/optimal_layout.pdf b/doc/optimal_layout_report/optimal_layout.pdf Binary files differnew file mode 100644 index 00000000..0af34161 --- /dev/null +++ b/doc/optimal_layout_report/optimal_layout.pdf diff --git a/doc/optimal_layout_report/optimal_layout.tex b/doc/optimal_layout_report/optimal_layout.tex new file mode 100644 index 00000000..005e7b50 --- /dev/null +++ b/doc/optimal_layout_report/optimal_layout.tex @@ -0,0 +1,709 @@ +\documentclass[]{article} + +\usepackage{amsmath,amssymb} +\usepackage{amsthm} + +\usepackage{graphicx,xcolor} + +\usepackage{algorithm,algpseudocode,float} + +\renewcommand\thesubsubsection{\Alph{subsubsection})} + +\newtheorem{proposition}{Proposition} + +%opening +\title{Optimal partition assignment in Garage} +\author{Mendes} + +\begin{document} + +\maketitle + +\section{Introduction} + +\subsection{Context} + +Garage is an open-source distributed storage service blablabla$\dots$ + +Every object to be stored in the system falls in a partition given by the last $k$ bits of its hash. There are $P=2^k$ partitions. Every partition will be stored on distinct nodes of the system. The goal of the assignment of partitions to nodes is to ensure (nodes and zone) redundancy and to be as efficient as possible. + +\subsection{Formal description of the problem} + +We are given a set of nodes $\mathbf{N}$ and a set of zones $\mathbf{Z}$. Every node $n$ has a non-negative storage capacity $c_n\ge 0$ and belongs to a zone $z\in \mathbf{Z}$. We are also given a number of partition $P>0$ (typically $P=256$). + +We would like to compute an assignment of nodes to partitions. We will impose some redundancy constraints to this assignment, and under these constraints, we want our system to have the largest storage capacity possible. To link storage capacity to partition assignment, we make the following assumption: +\begin{equation} + \tag{H1} + \text{\emph{All partitions have the same size $s$.}} +\end{equation} +This assumption is justified by the dispersion of the hashing function, when the number of partitions is small relative to the number of stored large objects. + +Every node $n$ wille store some number $k_n$ of partitions. Hence the partitions stored by $n$ (and hence all partitions by our assumption) have there size bounded by $c_n/k_n$. This remark leads us to define the optimal size that we will want to maximize: + +\begin{equation} + \label{eq:optimal} + \tag{OPT} +s^* = \min_{n \in N} \frac{c_n}{k_n}. +\end{equation} + +When the capacities of the nodes are updated (this includes adding or removing a node), we want to update the assignment as well. However, transferring the data between nodes has a cost and we would like to limit the number of changes in the assignment. We make the following assumption: +\begin{equation} + \tag{H2} + \text{\emph{Updates of capacity happens rarely relatively to object storing.}} +\end{equation} +This assumption justifies that when we compute the new assignment, it is worth to optimize the partition size \eqref{eq:optimal} first, and then, among the possible optimal solution, to try to minimize the number of partition transfers. + +For now, in the following, we ask the following redundancy constraint: + +\textbf{Parametric node and zone redundancy:} Given two integer parameters $1\le \rho_\mathbf{Z} \le \rho_\mathbf{N}$, we ask every partition to be stored on $\rho_\mathbf{N}$ distinct nodes, and these nodes must belong to at least $\rho_\mathbf{Z}$ distinct zones. + + +\textbf{Mode 3-strict:} every partition needs to be assignated to three nodes belonging to three different zones. + +\textbf{Mode 3:} every partition needs to be assignated to three nodes. We try to spread the three nodes over different zones as much as possible. + +\textbf{Warning:} This is a working document written incrementaly. The last version of the algorithm is the \textbf{parametric assignment} described in the next section. + + +\section{Computation of a parametric assignment} +\textbf{Attention : }We change notations in this section. + +Notations : let $P$ be the number of partitions, $N$ the number of nodes, $Z$ the number of zones. Let $\mathbf{P,N,Z}$ be the label sets of, respectively, partitions, nodes and zones. +Let $s^*$ be the largest partition size achievable with the redundancy constraints. Let $(c_n)_{n\in \mathbf{N}}$ be the storage capacity of every node. + +In this section, we propose a third specification of the problem. The user inputs two redundancy parameters $1\le \rho_\mathbf{Z} \le \rho_\mathbf{N}$. We compute an assignment $\alpha = (\alpha_p^1, \ldots, \alpha_p^{\rho_\mathbf{N}})_{p\in \mathbf{P}}$ such that every partition $p$ is associated to $\rho_\mathbf{N}$ distinct nodes $\alpha_p^1, \ldots, \alpha_p^{\rho_\mathbf{N}}$ and these nodes belong to at least $\rho_\mathbf{Z}$ distinct zones. + +If the layout contained a previous assignment $\alpha'$, we try to minimize the amount of data to transfer during the layout update by making $\alpha$ as close as possible to $\alpha'$. + +In the following subsections, we describe the successive steps of the algorithm we propose to compute $\alpha$. + +\subsubsection*{Algorithm} + +\begin{algorithmic}[1] + \Function{Compute Layout}{$\mathbf{N}$, $\mathbf{Z}$, $\mathbf{P}$, $(c_n)_{n\in \mathbf{N}}$, $\rho_\mathbf{N}$, $\rho_\mathbf{Z}$, $\alpha'$} + \State $s^* \leftarrow$ \Call{Compute Partition Size}{$\mathbf{N}$, $\mathbf{Z}$, $\mathbf{P}$, $(c_n)_{n\in \mathbf{N}}$, $\rho_\mathbf{N}$, $\rho_\mathbf{Z}$} + \State $G \leftarrow G(s^*)$ + \State $f \leftarrow$ \Call{Compute Candidate Assignment}{$G$, $\alpha'$} + \State $f^* \leftarrow$ \Call{Minimize transfer load}{$G$, $f$, $\alpha'$} + \State Build $\alpha^*$ from $f^*$ + \State \Return $\alpha^*$ + \EndFunction +\end{algorithmic} + +\subsubsection*{Complexity} +As we will see in the next sections, the worst case complexity of this algorithm is $O(P^2 N^2)$. The minimization of transfer load is the most expensive step, and it can run with a timeout since it is only an optimization step. Without this step (or with a smart timeout), the worst cas complexity can be $O((PN)^{3/2}\log C)$ where $C$ is the total storage capacity of the cluster. + +\subsection{Determination of the partition size $s^*$} + +Again, we will represent an assignment $\alpha$ as a flow in a specific graph $G$. We will not compute the optimal partition size $s^*$ a priori, but we will determine it by dichotomy, as the largest size $s$ such that the maximal flow achievable on $G=G(s)$ has value $\rho_\mathbf{N}P$. We will assume that the capacities are given in a small enough unit (say, Megabytes), and we will determine $s^*$ at the precision of the given unit. + +Given some candidate size value $s$, we describe the oriented weighted graph $G=(V,E)$ with vertex set $V$ arc set $E$. + +The set of vertices $V$ contains the source $\mathbf{s}$, the sink $\mathbf{t}$, vertices +$\mathbf{p^+, p^-}$ for every partition $p$, vertices $\mathbf{x}_{p,z}$ for every partition $p$ and zone $z$, and vertices $\mathbf{n}$ for every node $n$. + +The set of arcs $E$ contains: +\begin{itemize} + \item ($\mathbf{s}$,$\mathbf{p}^+$, $\rho_\mathbf{Z}$) for every partition $p$; + \item ($\mathbf{s}$,$\mathbf{p}^-$, $\rho_\mathbf{N}-\rho_\mathbf{Z}$) for every partition $p$; + \item ($\mathbf{p}^+$,$\mathbf{x}_{p,z}$, 1) for every partition $p$ and zone $z$; + \item ($\mathbf{p}^-$,$\mathbf{x}_{p,z}$, $\rho_\mathbf{N}-\rho_\mathbf{Z}$) for every partition $p$ and zone $z$; + \item ($\mathbf{x}_{p,z}$,$\mathbf{n}$, 1) for every partition $p$, zone $z$ and node $n\in z$; + \item ($\mathbf{n}$, $\mathbf{t}$, $\lfloor c_n/s \rfloor$) for every node $n$. +\end{itemize} + +In the following complexity calculations, we will use the number of vertices and edges of $G$. Remark from now that $\# V = O(PZ)$ and $\# E = O(PN)$. + +\begin{proposition} + An assignment $\alpha$ is realizable with partition size $s$ and the redundancy constraints $(\rho_\mathbf{N},\rho_\mathbf{Z})$ if and only if there exists a maximal flow function $f$ in $G$ with total flow $\rho_\mathbf{N}P$, such that the arcs ($\mathbf{x}_{p,z}$,$\mathbf{n}$, 1) used are exactly those for which $p$ is associated to $n$ in $\alpha$. +\end{proposition} +\begin{proof} + Given such flow $f$, we can reconstruct a candidate $\alpha$. In $f$, the flow passing through $\mathbf{p^+}$ and $\mathbf{p^-}$ is $\rho_\mathbf{N}$, and since the outgoing capacity of every $\mathbf{x}_{p,z}$ is 1, every partition is associated to $\rho_\mathbf{N}$ distinct nodes. The fraction $\rho_\mathbf{Z}$ of the flow passing through every $\mathbf{p^+}$ must be spread over as many distinct zones as every arc outgoing from $\mathbf{p^+}$ has capacity 1. So the reconstructed $\alpha$ verifies the redundancy constraints. For every node $n$, the flow between $\mathbf{n}$ and $\mathbf{t}$ corresponds to the number of partitions associated to $n$. By construction of $f$, this does not exceed $\lfloor c_n/s \rfloor$. We assumed that the partition size is $s$, hence this association does not exceed the storage capacity of the nodes. + + In the other direction, given an assignment $\alpha$, one can similarly check that the facts that $\alpha$ respects the redundancy constraints, and the storage capacities of the nodes, are necessary condition to construct a maximal flow function $f$. +\end{proof} + +\textbf{Implementation remark:} In the flow algorithm, while exploring the graph, we explore the neighbours of every vertex in a random order to heuristically spread the association between nodes and partitions. + +\subsubsection*{Algorithm} +With this result mind, we can describe the first step of our algorithm. All divisions are supposed to be integer division. +\begin{algorithmic}[1] + \Function{Compute Partition Size}{$\mathbf{N}$, $\mathbf{Z}$, $\mathbf{P}$, $(c_n)_{n\in \mathbf{N}}$, $\rho_\mathbf{N}$, $\rho_\mathbf{Z}$} + + \State Build the graph $G=G(s=1)$ + \State $ f \leftarrow$ \Call{Maximal flow}{$G$} + \If{$f.\mathrm{total flow} < \rho_\mathbf{N}P$} + + \State \Return Error: capacities too small or constraints too strong. + \EndIf + + \State $s^- \leftarrow 1$ + \State $s^+ \leftarrow 1+\frac{1}{\rho_\mathbf{N}}\sum_{n \in \mathbf{N}} c_n$ + + \While{$s^-+1 < s^+$} + \State Build the graph $G=G(s=(s^-+s^+)/2)$ + \State $ f \leftarrow$ \Call{Maximal flow}{$G$} + \If{$f.\mathrm{total flow} < \rho_\mathbf{N}P$} + \State $s^+ \leftarrow (s^- + s^+)/2$ + \Else + \State $s^- \leftarrow (s^- + s^+)/2$ + \EndIf + \EndWhile + + \State \Return $s^-$ + \EndFunction +\end{algorithmic} + +\subsubsection*{Complexity} + +To compute the maximal flow, we use Dinic's algorithm. Its complexity on general graphs is $O(\#V^2 \#E)$, but on graphs with edge capacity bounded by a constant, it turns out to be $O(\#E^{3/2})$. The graph $G$ does not fall in this case since the capacities of the arcs incoming to $\mathbf{t}$ are far from bounded. However, the proof of this complexity works readily for graph where we only ask the edges \emph{not} incoming to the sink $\mathbf{t}$ to have their capacities bounded by a constant. One can find the proof of this claim in \cite[Section 2]{even1975network}. +The dichotomy adds a logarithmic factor $\log (C)$ where $C=\sum_{n \in \mathbf{N}} c_n$ is the total capacity of the cluster. The total complexity of this first function is hence +$O(\#E^{3/2}\log C ) = O\big((PN)^{3/2} \log C\big)$. + +\subsubsection*{Metrics} +We can display the discrepancy between the computed $s^*$ and the best size we could hope for a given total capacity, that is $C/\rho_\mathbf{N}$. + +\subsection{Computation of a candidate assignment} + +Now that we have the optimal partition size $s^*$, to compute a candidate assignment, it would be enough to compute a maximal flow function $f$ on $G(s^*)$. This is what we do if there was no previous assignment $\alpha'$. + +If there was some $\alpha'$, we add a step that will heuristically help to obtain a candidate $\alpha$ closer to $\alpha'$. to do so, we fist compute a flow function $\tilde{f}$ that uses only the partition-to-node association appearing in $\alpha'$. Most likely, $\tilde{f}$ will not be a maximal flow of $G(s^*)$. In Dinic's algorithm, we can start from a non maximal flow function and then discover improving paths. This is what we do in starting from $\tilde{f}$. The hope\footnote{This is only a hope, because one can find examples where the construction of $f$ from $\tilde{f}$ produces an assignment $\alpha$ that is not as close as possible to $\alpha'$.} is that the final flow function $f$ will tend to keep the associations appearing in $\tilde{f}$. + +More formally, we construct the graph $G_{|\alpha'}$ from $G$ by removing all the arcs $(\mathbf{x}_{p,z},\mathbf{n}, 1)$ where $p$ is not associated to $n$ in $\alpha'$. We compute a maximal flow function $\tilde{f}$ in $G_{|\alpha'}$. $\tilde{f}$ is also a valid (most likely non maximal) flow function in $G$. We compute a maximal flow function $f$ on $G$ by starting Dinic's algorithm on $\tilde{f}$. + +\subsubsection*{Algorithm} +\begin{algorithmic}[1] + \Function{Compute Candidate Assignment}{$G$, $\alpha'$} + \State Build the graph $G_{|\alpha'}$ + \State $ \tilde{f} \leftarrow$ \Call{Maximal flow}{$G_{|\alpha'}$} + \State $ f \leftarrow$ \Call{Maximal flow from flow}{$G$, $\tilde{f}$} + \State \Return $f$ + \EndFunction +\end{algorithmic} + +\textbf{Remark:} The function ``Maximal flow'' can be just seen as the function ``Maximal flow from flow'' called with the zero flow function as starting flow. + +\subsubsection*{Complexity} +From the consideration of the last section, we have the complexity of the Dinic's algorithm $O(\#E^{3/2}) = O((PN)^{3/2})$. + +\subsubsection*{Metrics} + +We can display the flow value of $\tilde{f}$, which is an upper bound of the distance between $\alpha$ and $\alpha'$. It might be more a Debug level display than Info. + +\subsection{Minimization of the transfer load} + +Now that we have a candidate flow function $f$, we want to modify it to make its associated assignment as close as possible to $\alpha'$. Denote by $f'$ the maximal flow associated to $\alpha'$, and let $d(f, f')$ be distance between the associated assignments\footnote{It is the number of arcs of type $(\mathbf{x}_{p,z},\mathbf{n})$ saturated in one flow and not in the other.}. +We want to build a sequence $f=f_0, f_1, f_2 \dots$ of maximal flows such that $d(f_i, \alpha')$ decreases as $i$ increases. The distance being a non-negative integer, this sequence of flow functions must be finite. We now explain how to find some improving $f_{i+1}$ from $f_i$. + +For any maximal flow $f$ in $G$, we define the oriented weighted graph $G_f=(V, E_f)$ as follows. The vertices of $G_f$ are the same as the vertices of $G$. $E_f$ contains the arc $(v_1,v_2, w)$ between vertices $v_1,v_2\in V$ with weight $w$ if and only if the arc $(v_1,v_2)$ is not saturated in $f$ (i.e. $c(v_1,v_2)-f(v_1,v_2) \ge 1$, we also consider reversed arcs). The weight $w$ is: +\begin{itemize} + \item $-1$ if $(v_1,v_2)$ is of type $(\mathbf{x}_{p,z},\mathbf{n})$ or $(\mathbf{x}_{p,z},\mathbf{n})$ and is saturated in only one of the two flows $f,f'$; + \item $+1$ if $(v_1,v_2)$ is of type $(\mathbf{x}_{p,z},\mathbf{n})$ or $(\mathbf{x}_{p,z},\mathbf{n})$ and is saturated in either both or none of the two flows $f,f'$; + \item $0$ otherwise. +\end{itemize} + +If $\gamma$ is a simple cycle of arcs in $G_f$, we define its weight $w(\gamma)$ as the sum of the weights of its arcs. We can add $+1$ to the value of $f$ on the arcs of $\gamma$, and by construction of $G_f$ and the fact that $\gamma$ is a cycle, the function that we get is still a valid flow function on $G$, it is maximal as it has the same flow value as $f$. We denote this new function $f+\gamma$. + +\begin{proposition} + Given a maximal flow $f$ and a simple cycle $\gamma$ in $G_f$, we have $d(f+\gamma, f') - d(f,f') = w(\gamma)$. +\end{proposition} +\begin{proof} + Let $X$ be the set of arcs of type $(\mathbf{x}_{p,z},\mathbf{n})$. Then we can express $d(f,f')$ as + \begin{align*} + d(f,f') & = \#\{e\in X ~|~ f(e)\neq f'(e)\} + = \sum_{e\in X} 1_{f(e)\neq f'(e)} \\ + & = \frac{1}{2}\big( \#X + \sum_{e\in X} 1_{f(e)\neq f'(e)} - 1_{f(e)= f'(e)} \big). + \end{align*} + We can express the cycle weight as + \begin{align*} + w(\gamma) & = \sum_{e\in X, e\in \gamma} - 1_{f(e)\neq f'(e)} + 1_{f(e)= f'(e)}. + \end{align*} + Remark that since we passed on unit of flow in $\gamma$ to construct $f+\gamma$, we have for any $e\in X$, $f(e)=f'(e)$ if and only if $(f+\gamma)(e) \neq f'(e)$. + Hence + \begin{align*} + w(\gamma) & = \frac{1}{2}(w(\gamma) + w(\gamma)) \\ + &= \frac{1}{2} \Big( + \sum_{e\in X, e\in \gamma} - 1_{f(e)\neq f'(e)} + 1_{f(e)= f'(e)} \\ + & \qquad + + \sum_{e\in X, e\in \gamma} 1_{(f+\gamma)(e)\neq f'(e)} + 1_{(f+\gamma)(e)= f'(e)} + \Big). + \end{align*} + Plugging this in the previous equation, we find that + $$d(f,f')+w(\gamma) = d(f+\gamma, f').$$ +\end{proof} + +This result suggests that given some flow $f_i$, we just need to find a negative cycle $\gamma$ in $G_{f_i}$ to construct $f_{i+1}$ as $f_i+\gamma$. The following proposition ensures that this greedy strategy reaches an optimal flow. + +\begin{proposition} + For any maximal flow $f$, $G_f$ contains a negative cycle if and only if there exists a maximal flow $f^*$ in $G$ such that $d(f^*, f') < d(f, f')$. +\end{proposition} +\begin{proof} + Suppose that there is such flow $f^*$. Define the oriented multigraph $M_{f,f^*}=(V,E_M)$ with the same vertex set $V$ as in $G$, and for every $v_1,v_2 \in V$, $E_M$ contains $(f^*(v_1,v_2) - f(v_1,v_2))_+$ copies of the arc $(v_1,v_2)$. For every vertex $v$, its total degree (meaning its outer degree minus its inner degree) is equal to + \begin{align*} + \deg v & = \sum_{u\in V} (f^*(v,u) - f(v,u))_+ - \sum_{u\in V} (f^*(u,v) - f(u,v))_+ \\ + & = \sum_{u\in V} f^*(v,u) - f(v,u) = \sum_{u\in V} f^*(v,u) - \sum_{u\in V} f(v,u). + \end{align*} + The last two sums are zero for any inner vertex since $f,f^*$ are flows, and they are equal on the source and sink since the two flows are both maximal and have hence the same value. Thus, $\deg v = 0$ for every vertex $v$. + + This implies that the multigraph $M_{f,f^*}$ is the union of disjoint simple cycles. $f$ can be transformed into $f^*$ by pushing a mass 1 along all these cycles in any order. Since $d(f^*, f')<d(f,f')$, there must exists one of these simple cycles $\gamma$ with $d(f+\gamma, f') < d(f, f')$. Finally, since we can push a mass in $f$ along $\gamma$, it must appear in $G_f$. Hence $\gamma$ is a cycle of $G_f$ with negative weight. +\end{proof} + +In the next section we describe the corresponding algorithm. Instead of discovering only one cycle, we are allowed to discover a set $\Gamma$ of disjoint negative cycles. + +\subsubsection*{Algorithm} +\begin{algorithmic}[1] + \Function{Minimize transfer load}{$G$, $f$, $\alpha'$} + \State Build the graph $G_f$ + \State $\Gamma \leftarrow$ \Call{Detect Negative Cycles}{$G_f$} + \While{$\Gamma \neq \emptyset$} + \ForAll{$\gamma \in \Gamma$} + \State $f \leftarrow f+\gamma$ + \EndFor + \State Update $G_f$ + \State $\Gamma \leftarrow$ \Call{Detect Negative Cycles}{$G_f$} + \EndWhile + \State \Return $f$ + \EndFunction +\end{algorithmic} + +\subsubsection*{Complexity} +The distance $d(f,f')$ is bounded by the maximal number of differences in the associated assignment. If these assignment are totally disjoint, this distance is $2\rho_N P$. At every iteration of the While loop, the distance decreases, so there is at most $O(\rho_N P) = O(P)$ iterations. + +The detection of negative cycle is done with the Bellman-Ford algorithm, whose complexity should normally be $O(\#E\#V)$. In our case, it amounts to $O(P^2ZN)$. Multiplied by the complexity of the outer loop, it amounts to $O(P^3ZN)$ which is a lot when the number of partitions and nodes starts to be large. To avoid that, we adapt the Bellman-Ford algorithm. + +The Bellman-Ford algorithm runs $\#V$ iterations of an outer loop, and an inner loop over $E$. The idea is to compute the shortest paths from a source vertex $v$ to all other vertices. After $k$ iterations of the outer loop, the algorithm has computed all shortest path of length at most $k$. All simple paths have length at most $\#V-1$, so if there is an update in the last iteration of the loop, it means that there is a negative cycle in the graph. The observation that will enable us to improve the complexity is the following: + +\begin{proposition} + In the graph $G_f$ (and $G$), all simple paths have a length at most $4N$. +\end{proposition} +\begin{proof} + Since $f$ is a maximal flow, there is no outgoing edge from $\mathbf{s}$ in $G_f$. One can thus check than any simple path of length 4 must contain at least two node of type $\mathbf{n}$. Hence on a path, at most 4 arcs separate two successive nodes of type $\mathbf{n}$. +\end{proof} + +Thus, in the absence of negative cycles, shortest paths in $G_f$ have length at most $4N$. So we can do only $4N+1$ iterations of the outer loop in Bellman-Ford algorithm. This makes the complexity of the detection of one set of cycle to be $O(N\#E) = O(N^2 P)$. + +With this improvement, the complexity of the whole algorithm is, in the worst case, $O(N^2P^2)$. However, since we detect several cycles at once and we start with a flow that might be close to the previous one, the number of iterations of the outer loop might be smaller in practice. + + + +\subsubsection*{Metrics} +We can display the node and zone utilization ratio, by dividing the flow passing through them divided by their outgoing capacity. In particular, we can pinpoint saturated nodes and zones (i.e. used at their full potential). + +We can display the distance to the previous assignment, and the number of partition transfers. + + + + + +\section{Properties of an optimal 3-strict assignment} + +\subsection{Optimal assignment} +\label{sec:opt_assign} + +For every zone $z\in Z$, define the zone capacity $c_z = \sum_{v, z_v=z} c_v$ and define $C = \sum_v c_v = \sum_z c_z$. + +One can check that the best we could be doing to maximize $s^*$ would be to use the nodes proportionally to their capacity. This would yield $s^*=C/(3N)$. This is not possible because of (i) redundancy constraints and (ii) integer rounding but it gives and upper bound. + +\subsubsection*{Optimal utilization} + +We call an \emph{utilization} a collection of non-negative integers $(n_v)_{v\in V}$ such that $\sum_v n_v = 3N$ and for every zone $z$, $\sum_{v\in z} n_v \le N$. We call such utilization \emph{optimal} if it maximizes $s^*$. + +We start by computing a node sub-utilization $(\hat{n}_v)_{v\in V}$ such that for every zone $z$, $\sum_{v\in z} \hat{n}_v \le N$ and we show that there is an optimal utilization respecting the constraints and such that $\hat{n}_v \le n_v$ for every node. + +Assume that there is a zone $z_0$ such that $c_{z_0}/C \ge 1/3$. Then for any $v\in z_0$, we define +$$\hat{n}_v = \left\lfloor\frac{c_v}{c_{z_0}}N\right\rfloor.$$ +This choice ensures for any such $v$ that +$$ +\frac{c_v}{\hat{n}_v} \ge \frac{c_{z_0}}{N} \ge \frac{C}{3N} +$$ +which is the universal upper bound on $s^*$. Hence any optimal utilization $(n_v)$ can be modified to another optimal utilization such that $n_v\ge \hat{n}_v$ + +Because $z_0$ cannot store more than $N$ partition occurences, in any assignment, at least $2N$ partitions must be assignated to the zones $Z\setminus\{z_0\}$. Let $C_0 = C-c_{z_0}$. Suppose that there exists a zone $z_1\neq z_0$ such that $c_{z_1}/C_0 \ge 1/2$. Then, with the same argument as for $z_0$, we can define +$$\hat{n}_v = \left\lfloor\frac{c_v}{c_{z_1}}N\right\rfloor$$ +for every $v\in z_1$. + +Now we can assign the remaining partitions. Let $(\hat{N}, \hat{C})$ to be +\begin{itemize} + \item $(3N,C)$ if we did not find any $z_0$; + \item $(2N,C-c_{z_0})$ if there was a $z_0$ but no $z_1$; + \item $(N,C-c_{z_0}-c_{z_1})$ if there was a $z_0$ and a $z_1$. +\end{itemize} +Then at least $\hat{N}$ partitions must be spread among the remaining zones. Hence $s^*$ is upper bounded by $\hat{C}/\hat{N}$ and without loss of generality, we can define, for every node that is not in $z_0$ nor $z_1$, +$$\hat{n}_v = \left\lfloor\frac{c_v}{\hat{C}}\hat{N}\right\rfloor.$$ + +We constructed a sub-utilization $\hat{n}_v$. Now notice that $3N-\sum_v \hat{n}_v \le \# V$ where $\# V$ denotes the number of nodes. We can iteratively pick a node $v^*$ such that +\begin{itemize} + \item $\sum_{v\in z_{v^*}} \hat{n}_v < N$ where $z_{v^*}$ is the zone of $v^*$; + \item $v^*$ maximizes the quantity $c_v/(\hat{n}_v+1)$ among the vertices satisfying the first condition (i.e. not in a saturated zone). +\end{itemize} +We iterate these instructions until $\sum_v \hat{n}_v= 3N$, and at this stage we define $(n_v) = (\hat{n}_v)$. It is easy to prove by induction that at every step, there is an optimal utilization that is pointwise larger than $\hat{n}_v$, and in particular, that $(n_v)$ is optimal. + +\subsubsection*{Existence of an optimal assignment} + +As for now, the \emph{optimal utilization} that we obtained is just a vector of numbers and it is not clear that it can be realized as the utilization of some concrete assignment. Here is a way to get a concrete assignment. + +Define $3N$ tokens $t_1,\ldots, t_{3N}\in V$ as follows: +\begin{itemize} + \item Enumerate the zones $z$ of $Z$ in any order; + \item enumerate the nodes $v$ of $z$ in any order; + \item repeat $n_v$ times the token $v$. +\end{itemize} +Then for $1\le i \le N$, define the triplet $T_i$ to be +$(t_i, t_{i+N}, t_{i+2N})$. Since the same nodes of a zone appear contiguously, the three nodes of a triplet must belong to three distinct zones. + +However simple, this solution to go from an utilization to an assignment has the drawback of not spreading the triplets: a node will tend to be associated to the same two other nodes for many partitions. Hence, during data transfer, it will tend to use only two link, instead of spreading the bandwith use over many other links to other nodes. To achieve this goal, we will reframe the search of an assignment as a flow problem. and in the flow algorithm, we will introduce randomness in the order of exploration. This will be sufficient to obtain a good dispersion of the triplets. + +\begin{figure} + \centering + \includegraphics[width=0.9\linewidth]{figures/naive} + \caption{On the left, the creation of a concrete assignment with the naive approach of repeating tokens. On the right, the zones containing the nodes.} +\end{figure} + +\subsubsection*{Assignment as a maximum flow problem} + +We describe the flow problem via its graph $(X,E)$ where $X$ is a set of vertices, and $E$ are directed weighted edges between the vertices. For every zone $z$, define $n_z=\sum_{v\in z} n_v$. + +The set of vertices $X$ contains the source $\mathbf{s}$ and the sink $\mathbf{t}$; a vertex $\mathbf{x}_z$ for every zone $z\in Z$, and a vertex $\mathbf{y}_i$ for every partition index $1\le i\le N$. + +The set of edges $E$ contains +\begin{itemize} + \item the edge $(\mathbf{s}, \mathbf{x}_z, n_z)$ for every zone $z\in Z$; + \item the edge $(\mathbf{x}_z, \mathbf{y}_i, 1)$ for every zone $z\in Z$ and partition $1\le i\le N$; + \item the edge $(\mathbf{y}_i, \mathbf{t}, 3)$ for every partition $1\le i\le N$. +\end{itemize} + +\begin{figure}[b] + \centering + \includegraphics[width=0.6\linewidth]{figures/flow} + \caption{Flow problem to compute and optimal assignment.} +\end{figure} + +We first show the equivalence between this problem and and the construction of an assignment. Given some optimal assignment $(n_v)$, define the flow $f:E\to \mathbb{N}$ that saturates every edge from $\mathbf{s}$ or to $\mathbf{t}$, takes value $1$ on the edge between $\mathbf{x}_z$ and $\mathbf{y}_i$ if partition $i$ is stored in some node of the zone $z$, and $0$ otherwise. One can easily check that $f$ thus defined is indeed a flow and is maximum. + +Reciprocally, by the existence of maximum flows constructed from optimal assignments, any maximum flow must saturate the edges linked to the source or the sink. It can only take value 0 or 1 on the other edge, and every partition vertex is associated to exactly three distinct zone vertices. Every zone is associated to exactly $n_z$ partitions. + +A maximum flow can be constructed using, for instance, Dinic's algorithm. This algorithm works by discovering augmenting path to iteratively increase the flow. During the exploration of the graph to find augmenting path, we can shuffle the order of enumeration of the neighbours to spread the associations between zones and partitions. + +Once we have such association, we can randomly distribute the $n_z$ edges picked for every zone $z$ to its nodes $v\in z$ such that every such $v$ gets $n_z$ edges. This defines an optimal assignment of partitions to nodes. + + +\subsection{Minimal transfer} + +Assume that there was a previous assignment $(T'_i)_{1\le i\le N}$ corresponding to utilizations $(n'_v)_{v\in V}$. We would like the new computed assignment $(T_i)_{1\le i\le N}$ from some $(n_v)_{v\in V}$ to minimize the number of partitions that need to be transferred. We can imagine two different objectives corresponding to different hypotheses: +\begin{equation} + \tag{H3A} + \label{hyp:A} + \text{\emph{Transfers between different zones cost much more than inside a zone.}} +\end{equation} +\begin{equation} + \tag{H3B} + \label{hyp:B} + \text{\emph{Changing zone is not the largest cost when transferring a partition.}} +\end{equation} + +In case $A$, our goal will be to minimize the number of changes of zone in the assignment of partitions to zone. More formally, we will maximize the quantity +$$ +Q_Z := +\sum_{1\le i\le N} +\#\{z\in Z ~|~ z\cap T_i \neq \emptyset, z\cap T'_i \neq \emptyset \} +.$$ + +In case $B$, our goal will be to minimize the number of changes of nodes in the assignment of partitions to nodes. We will maximize the quantity +$$ +Q_V := +\sum_{1\le i\le N} \#(T_i \cap T'_i). +$$ + +It is tempting to hope that there is a way to maximize both quantity, that having the least discrepancy in terms of nodes will lead to the least discrepancy in terms of zones. But this is actually wrong! We propose the following counter-example to convince the reader: + +We consider eight nodes $a, a', b, c, d, d', e, e'$ belonging to five different zones $\{a,a'\}, \{b\}, \{c\}, \{d,d'\}, \{e, e'\}$. We take three partitions ($N=3$), that are originally assigned with some utilization $(n'_v)_{v\in V}$ as follows: +$$ +T'_1=(a,b,c) \qquad +T'_2=(a',b,d) \qquad +T'_3=(b,c,e). +$$ +This assignment, with updated utilizations $(n_v)_{v\in V}$ minimizes the number of zone changes: +$$ +T_1=(d,b,c) \qquad +T_2=(a,b,d) \qquad +T_3=(b,c,e'). +$$ +This one, with the same utilization, minimizes the number of node changes: +$$ +T_1=(a,b,c) \qquad +T_2=(e',b,d) \qquad +T_3=(b,c,d'). +$$ +One can check that in this case, it is impossible to minimize both the number of zone and node changes. + +Because of the redundancy constraint, we cannot use a greedy algorithm to just replace nodes in the triplets to try to get the new utilization rate: this could lead to blocking situation where there is still a hole to fill in a triplet but no available node satisfies the zone separation constraint. To circumvent this issue, we propose an algorithm based on finding cycles in a graph encoding of the assignment. As in section \ref{sec:opt_assign}, we can explore the neigbours in a random order in the graph algorithms, to spread the triplets distribution. + + +\subsubsection{Minimizing the zone discrepancy} + + +First, notice that, given an assignment of partitions to \emph{zones}, it is easy to deduce an assignment to \emph{nodes} that minimizes the number of transfers for this zone assignment: For every zone $z$ and every node $v\in z$, pick in any way a set $P_v$ of partitions that where assigned to $v$ in $T'$, to $z_v$ in $T$, with the cardinality of $P_v$ smaller than $n_v$. Once all these sets are chosen, complement the assignment to reach the right utilization for every node. If $\#P_v > n_v$, it means that all the partitions that could stay in $v$ (i.e. that were already in $v$ and are still assigned to its zone) do stay in $v$. If $\#P_v = n_v$, then $n_v$ partitions stay in $v$, which is the number of partitions that need to be in $v$ in the end. In both cases, we could not hope for better given the partition to zone assignment. + +Our goal now is to find a assignment of partitions to zones that minimizes the number of zone transfers. To do so we are going to represent an assignment as a graph. + +Let $G_T=(X,E_T)$ be the directed weighted graph with vertices $(\mathbf{x}_i)_{1\le i\le N}$ and $(\mathbf{y}_z)_{z\in Z}$. For any $1\le i\le N$ and $z\in Z$, $E_T$ contains the arc: +\begin{itemize} + \item $(\mathbf{x}_i, \mathbf{y}_z, +1)$, if $z$ appears in $T_i'$ and $T_i$; + \item $(\mathbf{x}_i, \mathbf{y}_z, -1)$, if $z$ appears in $T_i$ but not in $T'_i$; + \item $(\mathbf{y}_z, \mathbf{x}_i, -1)$, if $z$ appears in $T'_i$ but not in $T_i$; + \item $(\mathbf{y}_z, \mathbf{x}_i, +1)$, if $z$ does not appear in $T'_i$ nor in $T_i$. +\end{itemize} +In other words, the orientation of the arc encodes whether partition $i$ is stored in zone $z$ in the assignment $T$ and the weight $\pm 1$ encodes whether this corresponds to what happens in the assignment $T'$. + +\begin{figure}[t] + \centering + \begin{minipage}{.40\linewidth} + \centering + \includegraphics[width=.8\linewidth]{figures/mini_zone} + \end{minipage} + \begin{minipage}{.55\linewidth} + \centering + \includegraphics[width=.8\linewidth]{figures/mini_node} + \end{minipage} + \caption{On the left: the graph $G_T$ encoding an assignment to minimize the zone discrepancy. On the right: the graph $G_T$ encoding an assignment to minimize the node discrepancy.} +\end{figure} + + +Notice that at every partition, there are three outgoing arcs, and at every zone, there are $n_z$ incoming arcs. Moreover, if $w(e)$ is the weight of an arc $e$, define the weight of $G_T$ by +\begin{align*} +w(G_T) := \sum_{e\in E} w(e) &= \#Z \times N - 4 \sum_{1\le i\le N} \#\{z\in Z ~|~ z\cap T_i = \emptyset, z\cap T'_i \neq \emptyset\} \\ +&=\#Z \times N - 4 \sum_{1\le i\le N} 3- \#\{z\in Z ~|~ z\cap T_i \neq \emptyset, z\cap T'_i \neq \emptyset\} \\ +&= (\#Z-12)N + 4 Q_Z. +\end{align*} +Hence maximizing $Q_Z$ is equivalent to maximizing $w(G_T)$. + +Assume that their exist some assignment $T^*$ with the same utilization $(n_v)_{v\in V}$. Define $G_{T^*}$ similarly and consider the set $E_\mathrm{Diff} = E_T \setminus E_{T^*}$ of arcs that appear only in $G_T$. Since all vertices have the same number of incoming arcs in $G_T$ and $G_{T^*}$, the vertices of the graph $(X, E_\mathrm{Diff})$ must all have the same number number of incoming and outgoing arrows. So $E_\mathrm{Diff}$ can be expressed as a union of disjoint cycles. Moreover, the edges of $E_\mathrm{Diff}$ must appear in $E_{T^*}$ with reversed orientation and opposite weight. Hence, we have +$$ + w(G_T) - w(G_{T^*}) = 2 \sum_{e\in E_\mathrm{Diff}} w(e). +$$ +Hence, if $T$ is not optimal, there exists some $T^*$ with $w(G_T) < w(G_{T^*})$, and by the considerations above, there must exist a cycle in $E_\mathrm{Diff}$, and hence in $G_T$, with negative weight. If we reverse the edges and weights along this cycle, we obtain some graph. Since we did not change the incoming degree of any vertex, this is the graph encoding of some valid assignment $T^+$ such that $w(G_{T^+}) > w(G_T)$. We can iterate this operation until there is no other assignment $T^*$ with larger weight, that is until we obtain an optimal assignment. + + + +\subsubsection{Minimizing the node discrepancy} + +We will follow an approach similar to the one where we minimize the zone discrepancy. Here we will directly obtain a node assignment from a graph encoding. + +Let $G_T=(X,E_T)$ be the directed weighted graph with vertices $(\mathbf{x}_i)_{1\le i\le N}$, $(\mathbf{y}_{z,i})_{z\in Z, 1\le i\le N}$ and $(\mathbf{u}_v)_{v\in V}$. For any $1\le i\le N$ and $z\in Z$, $E_T$ contains the arc: +\begin{itemize} + \item $(\mathbf{x}_i, \mathbf{y}_{z,i}, 0)$, if $z$ appears in $T_i$; + \item $(\mathbf{y}_{z,i}, \mathbf{x}_i, 0)$, if $z$ does not appear in $T_i$. +\end{itemize} +For any $1\le i\le N$ and $v\in V$, $E_T$ contains the arc: +\begin{itemize} + \item $(\mathbf{y}_{z_v,i}, \mathbf{u}_v, +1)$, if $v$ appears in $T_i'$ and $T_i$; + \item $(\mathbf{y}_{z_v,i}, \mathbf{u}_v, -1)$, if $v$ appears in $T_i$ but not in $T'_i$; + \item $(\mathbf{u}_v, \mathbf{y}_{z_v,i}, -1)$, if $v$ appears in $T'_i$ but not in $T_i$; + \item $(\mathbf{u}_v, \mathbf{y}_{z_v,i}, +1)$, if $v$ does not appear in $T'_i$ nor in $T_i$. +\end{itemize} +Every vertex $\mathbb{x}_i$ has outgoing degree 3, every vertex $\mathbf{y}_{z,v}$ has outgoing degree 1, and every vertex $\mathbf{u}_v$ has incoming degree $n_v$. +Remark that any graph respecting these degree constraints is the encoding of a valid assignment with utilizations $(n_v)_{v\in V}$, in particular no partition is stored in two nodes of the same zone. + +We define $w(G_T)$ similarly: +\begin{align*} + w(G_T) := \sum_{e\in E_T} w(e) &= \#V \times N - 4\sum_{1\le i\le N} 3-\#(T_i\cap T'_i) \\ + &= (\#V-12)N + 4Q_V. +\end{align*} + +Exactly like in the previous section, the existence of an assignment with larger weight implies the existence of a negatively weighted cycle in $G_T$. Reversing this cycle gives us the encoding of a valid assignment with a larger weight. Iterating this operation yields an optimal assignment. + + +\subsubsection{Linear combination of both criteria} + +In the graph $G_T$ defined in the previous section, instead of having weights $0$ and $\pm 1$, we could be having weights $\pm\alpha$ between $\mathbf{x}$ and $\mathbf{y}$ vertices, and weights $\pm\beta$ between $\mathbf{y}$ and $\mathbf{u}$ vertices, for some $\alpha,\beta>0$ (we have positive weight if the assignment corresponds to $T'$ and negative otherwise). Then +\begin{align*} + w(G_T) &= \sum_{e\in E_T} w(e) = + \alpha \big( (\#Z-12)N + 4 Q_Z\big) + + \beta \big( (\#V-12)N + 4 Q_V\big) \\ + &= \mathrm{const}+ 4(\alpha Q_Z + \beta Q_V). +\end{align*} +So maximizing the weight of such graph encoding would be equivalent to maximizing a linear combination of $Q_Z$ and $Q_V$. + + +\subsection{Algorithm} +We give a high level description of the algorithm to compute an optimal 3-strict assignment. The operations appearing at lines 1,2,4 are respectively described by Algorithms \ref{alg:util},\ref{alg:opt} and \ref{alg:mini}. + + + +\begin{algorithm}[H] + \caption{Optimal 3-strict assignment} + \label{alg:total} + \begin{algorithmic}[1] + \Function{Optimal 3-strict assignment}{$N$, $(c_v)_{v\in V}$, $T'$} + \State $(n_v)_{v\in V} \leftarrow$ \Call{Compute optimal utilization}{$N$, $(c_v)_{v\in V}$} + \State $(T_i)_{1\le i\le N} \leftarrow$ \Call{Compute candidate assignment}{$N$, $(n_v)_{v\in V}$} + \If {there was a previous assignment $T'$} + \State $T \leftarrow$ \Call{Minimization of transfers}{$(T_i)_{1\le i\le N}$, $(T'_i)_{1\le i\le N}$} + \EndIf + \State \Return $T$. + \EndFunction + \end{algorithmic} +\end{algorithm} + +We give some considerations of worst case complexity for these algorithms. In the following, we assume $N>\#V>\#Z$. The complexity of Algorithm \ref{alg:total} is $O(N^3\# Z)$ if we assume \eqref{hyp:A} and $O(N^3 \#Z \#V)$ if we assume \eqref{hyp:B}. + +Algorithm \ref{alg:util} can be implemented with complexity $O(\#V^2)$. The complexity of the function call at line \ref{lin:subutil} is $O(\#V)$. The difference between the sum of the subutilizations and $3N$ is at most the sum of the rounding errors when computing the $\hat{n}_v$. Hence it is bounded by $\#V$ and the loop at line \ref{lin:loopsub} is iterated at most $\#V$ times. Finding the minimizing $v$ at line \ref{lin:findmin} takes $O(\#V)$ operations (naively, we could also use a heap). + +Algorithm \ref{alg:opt} can be implemented with complexity $O(N^3\times \#Z)$. The flow graph has $O(N+\#Z)$ vertices and $O(N\times \#Z)$ edges. Dinic's algorithm has complexity $O(\#\mathrm{Vertices}^2\#\mathrm{Edges})$ hence in our case it is $O(N^3\times \#Z)$. + +Algorithm \ref{alg:mini} can be implented with complexity $O(N^3\# Z)$ under \eqref{hyp:A} and $O(N^3 \#Z \#V)$ under \eqref{hyp:B}. +The graph $G_T$ has $O(N)$ vertices and $O(N\times \#Z)$ edges under assumption \eqref{hyp:A} and respectively $O(N\times \#Z)$ vertices and $O(N\times \#V)$ edges under assumption \eqref{hyp:B}. The loop at line \ref{lin:repeat} is iterated at most $N$ times since the distance between $T$ and $T'$ decreases at every iteration. Bellman-Ford algorithm has complexity $O(\#\mathrm{Vertices}\#\mathrm{Edges})$, which in our case amounts to $O(N^2\# Z)$ under \eqref{hyp:A} and $O(N^2 \#Z \#V)$ under \eqref{hyp:B}. + +\begin{algorithm} + \caption{Computation of the optimal utilization} + \label{alg:util} + \begin{algorithmic}[1] +\Function{Compute optimal utilization}{$N$, $(c_v)_{v\in V}$} + \State $(\hat{n}_v)_{v\in V} \leftarrow $ \Call{Compute subutilization}{$N$, $(c_v)_{v\in V}$} \label{lin:subutil} + \While{$\sum_{v\in V} \hat{n}_v < 3N$} \label{lin:loopsub} + \State Pick $v\in V$ minimizing $\frac{c_v}{\hat{n}_v+1}$ and such that + $\sum_{v'\in z_v} \hat{n}_{v'} < N$ \label{lin:findmin} + \State $\hat{n}_v \leftarrow \hat{n}_v+1$ + \EndWhile + \State \Return $(\hat{n}_v)_{v\in V}$ +\EndFunction +\State + +\Function{Compute subutilization}{$N$, $(c_v)_{v\in V}$} + \State $R \leftarrow 3$ +\For{$v\in V$} +\State $\hat{n}_v \leftarrow \mathrm{unset}$ +\EndFor +\For{$z\in Z$} +\State $c_z \leftarrow \sum_{v\in z} c_v$ +\EndFor +\State $C \leftarrow \sum_{z\in Z} c_z$ +\While{$\exists z \in Z$ such that $R\times c_{z} > C$} +\For{$v\in z$} +\State $\hat{n}_v \leftarrow \left\lfloor \frac{c_v}{c_z} N \right\rfloor$ +\EndFor +\State $C \leftarrow C-c_z$ +\State $R\leftarrow R-1$ +\EndWhile +\For{$v\in V$} +\If{$\hat{n}_v = \mathrm{unset}$} +\State $\hat{n}_v \leftarrow \left\lfloor \frac{Rc_v}{C} N \right\rfloor$ +\EndIf +\EndFor +\State \Return $(\hat{n}_v)_{v\in V}$ +\EndFunction + \end{algorithmic} +\end{algorithm} + +\begin{algorithm} + \caption{Computation of a candidate assignment} + \label{alg:opt} + \begin{algorithmic}[1] + \Function{Compute candidate assignment}{$N$, $(n_v)_{v\in V}$} + \State Compute the flow graph $G$ + \State Compute the maximal flow $f$ using Dinic's algorithm with randomized neighbours enumeration + \State Construct the assignment $(T_i)_{1\le i\le N}$ from $f$ + \State \Return $(T_i)_{1\le i\le N}$ + \EndFunction + \end{algorithmic} +\end{algorithm} + + +\begin{algorithm} + \caption{Minimization of the number of transfers} + \label{alg:mini} + \begin{algorithmic}[1] + \Function{Minimization of transfers}{$(T_i)_{1\le i\le N}$, $(T'_i)_{1\le i\le N}$} + \State Construct the graph encoding $G_T$ + \Repeat \label{lin:repeat} + \State Find a negative cycle $\gamma$ using Bellman-Ford algorithm on $G_T$ + \State Reverse the orientations and weights of edges in $\gamma$ + \Until{no negative cycle is found} + \State Update $(T_i)_{1\le i\le N}$ from $G_T$ + \State \Return $(T_i)_{1\le i\le N}$ + \EndFunction + \end{algorithmic} +\end{algorithm} + +\newpage + +\section{Computation of a 3-non-strict assignment} + +\subsection{Choices of optimality} + +In this mode, we primarily want to store every partition on three nodes, and only secondarily try to spread the nodes among different zone. So we make the choice of not taking the zone repartition in the criterion of optimality. + +We try to maximize $s^*$ defined in \eqref{eq:optimal}. So we can compute the optimal utilizations $(n_v)_{v\in V}$ with the only constraint that $n_v \le N$ for every node $v$. As in the previous section, we start with a sub-utilization proportional to $c_v$ (and capped at $N$), and we iteratively increase the $\hat{n}_v$ that is less than $N$ and maximizes the quantity $c_v/(\hat{n}_v+1)$, until the total sum is $3N$. + +\subsection{Computation of a candidate assignment} + +To compute a candidate assignment (that does not optimize zone spreading nor distance to a previous assignment yet), we can use the folowing flow problem. + +Define the oriented weighted graph $(X,E)$. The set of vertices $X$ contains the source $\mathbf{s}$, the sink $\mathbf{t}$, vertices +$\mathbf{x}_p, \mathbf{u}^+_p, \mathbf{u}^-_p$ for every partition $p$, vertices $\mathbf{y}_{p,z}$ for every partition $p$ and zone $z$, and vertices $\mathbf{z}_v$ for every node $v$. + +The set of edges is composed of the following arcs: +\begin{itemize} + \item ($\mathbf{s}$,$\mathbf{x}_p$, 3) for every partition $p$; + \item ($\mathbf{x}_p$,$\mathbf{u}^+_p$, 3) for every partition $p$; + \item ($\mathbf{x}_p$,$\mathbf{u}^-_p$, 2) for every partition $p$; + \item ($\mathbf{u}^+_p$,$\mathbf{y}_{p,z}$, 1) for every partition $p$ and zone $z$; + \item ($\mathbf{u}^-_p$,$\mathbf{y}_{p,z}$, 2) for every partition $p$ and zone $z$; + \item ($\mathbf{y}_{p,z}$,$\mathbf{z}_v$, 1) for every partition $p$, zone $z$ and node $v\in z$; + \item ($\mathbf{z}_v$, $\mathbf{t}$, $n_v$) for every node $v$; +\end{itemize} + +One can check that any maximal flow in this graph corresponds to an assignment of partitions to nodes. In such a flow, all the arcs from $\mathbf{s}$ and to $\mathbf{t}$ are saturated. The arc from $\mathbf{y}_{p,z}$ to $\mathbf{z}_v$ is saturated if and only if $p$ is associated to~$v$. +Finally the flow from $\mathbf{x}_p$ to $\mathbf{y}_{p,z}$ can go either through $\mathbf{u}^+_p$ or $\mathbf{u}^-_p$. + + + +\subsection{Maximal spread and minimal transfers} +Notice that if the arc $\mathbf{u}_p^+\mathbf{y}_{p,z}$ is not saturated but there is some flow in $\mathbf{u}_p^-\mathbf{y}_{p,z}$, then it is possible to transfer a unit of flow from the path $\mathbf{x}_p\mathbf{u}_p^-\mathbf{y}_{p,z}$ to the path $\mathbf{x}_p\mathbf{u}_p^+\mathbf{y}_{p,z}$. So we can always find an equivalent maximal flow $f^*$ that uses the path through $\mathbf{u}_p^-$ only if the path through $\mathbf{u}_p^+$ is saturated. + +We will use this fact to consider the amount of flow going through the vertices $\mathbf{u}^+$ as a measure of how well the partitions are spread over nodes belonging to different zones. If the partition $p$ is associated to 3 different zones, then a flow of 3 will cross $\mathbf{u}_p^+$ in $f^*$ (i.e. a flow of 0 will cross $\mathbf{u}_p^+$). If $p$ is associated to two zones, a flow of $2$ will cross $\mathbf{u}_p^+$. If $p$ is associated to a single zone, a flow of $1$ will cross $\mathbf{u}_p^+$. + +Let $N_1, N_2, N_3$ be the number of partitions associated to respectively 1,2 and 3 distinct zones. We will optimize a linear combination of these variables using the discovery of positively weighted circuits in a graph. + +At the same step, we will also optimize the distance to a previous assignment $T'$. Let $\alpha> \beta> \gamma \ge 0$ be three parameters. + +Given the flow $f$, let $G_f=(X',E_f)$ be the multi-graph where $X' = X\setminus\{\mathbf{s},\mathbf{t}\}$. The set $E_f$ is composed of the arcs: +\begin{itemize} +\item As many arcs from $(\mathbf{x}_p, \mathbf{u}^+_p,\alpha), (\mathbf{x}_p, \mathbf{u}^+_p,\beta), (\mathbf{x}_p, \mathbf{u}^+_p,\gamma)$ (selected in this order) as there is flow crossing $\mathbf{u}^+_p$ in $f$; +\item As many arcs from $(\mathbf{u}^+_p, \mathbf{x}_p,-\gamma), (\mathbf{u}^+_p, \mathbf{x}_p,-\beta), (\mathbf{u}^+_p, \mathbf{x}_p,-\alpha)$ (selected in this order) as there is flow crossing $\mathbf{u}^-_p$ in $f$; +\item As many copies of $(\mathbf{x}_p, \mathbf{u}^-_p,0)$ as there is flow through $\mathbf{u}^-_p$; +\item As many copies of $(\mathbf{u}^-_p,\mathbf{x}_p,0)$ so that the number of arcs between these two vertices is 2; +\item $(\mathbf{u}^+_p,\mathbf{y}_{p,z}, 0)$ if the flow between these vertices is 1, and the opposite arc otherwise; +\item as many copies of $(\mathbf{u}^-_p,\mathbf{y}_{p,z}, 0)$ as the flow between these vertices, and as many copies of the opposite arc as 2~$-$~the flow; +\item $(\mathbf{y}_{p,z},\mathbf{z}_v, \pm1)$ if it is saturated in $f$, with $+1$ if $v\in T'_p$ and $-1$ otherwise; +\item $(\mathbf{z}_v,\mathbf{y}_{p,z}, \pm1)$ if it is not saturated in $f$, with $+1$ if $v\notin T'_p$ and $-1$ otherwise. +\end{itemize} +To summarize, arcs are oriented left to right if they correspond to a presence of flow in $f$, and right to left if they correspond to an absence of flow. They are positively weighted if we want them to stay at their current state, and negatively if we want them to switch. Let us compute the weight of such graph. + +\begin{multline*} + w(G_f) = \sum_{e\in E_f} w(e_f) \\ + = + (\alpha - \beta -\gamma) N_1 + (\alpha +\beta - \gamma) N_2 + (\alpha+\beta+\gamma) N_3 + \\ + + \#V\times N - 4 \sum_p 3-\#(T_p\cap T'_p) \\ + =(\#V-12+\alpha-\beta-\gamma)\times N + 4Q_V + 2\beta N_2 + 2(\beta+\gamma) N_3 \\ +\end{multline*} + +As for the mode 3-strict, one can check that the difference of two such graphs corresponding to the same $(n_v)$ is always eulerian. Hence we can navigate in this class with the same greedy algorithm that discovers positive cycles and flips them. + +The function that we optimize is +$$ +2Q_V + \beta N_2 + (\beta+\gamma) N_3. +$$ +The choice of parameters $\beta$ and $\gamma$ should be lead by the following question: For $\beta$, where to put the tradeoff between zone dispersion and distance to the previous configuration? For $\gamma$, do we prefer to have more partitions spread between 2 zones, or have less between at least 2 zones but more between 3 zones. + +The quantity $Q_V$ varies between $0$ and $3N$, it should be of order $N$. The quantity $N_2+N_3$ should also be of order $N$ (it is exactly $N$ in the strict mode). So the two terms of the function are comparable. + + +\bibliography{optimal_layout} +\bibliographystyle{ieeetr} + +\end{document} + + + diff --git a/doc/sticker/Garage.pdf b/doc/sticker/Garage.pdf Binary files differnew file mode 100644 index 00000000..1bfb4a16 --- /dev/null +++ b/doc/sticker/Garage.pdf diff --git a/doc/sticker/Garage.png b/doc/sticker/Garage.png Binary files differnew file mode 100644 index 00000000..1bfd61b1 --- /dev/null +++ b/doc/sticker/Garage.png diff --git a/doc/sticker/Garage_NGI.pdf b/doc/sticker/Garage_NGI.pdf Binary files differindex 1359a30d..43f511e7 100644 --- a/doc/sticker/Garage_NGI.pdf +++ b/doc/sticker/Garage_NGI.pdf diff --git a/doc/talks/.gitignore b/doc/talks/.gitignore new file mode 100644 index 00000000..9b421064 --- /dev/null +++ b/doc/talks/.gitignore @@ -0,0 +1 @@ +.direnv/ diff --git a/doc/talks/2023-09-20-ocp/.gitignore b/doc/talks/2023-09-20-ocp/.gitignore new file mode 100644 index 00000000..9f1f00e6 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/.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-09-20-ocp/Makefile b/doc/talks/2023-09-20-ocp/Makefile new file mode 100644 index 00000000..554f7b97 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/abstract.md b/doc/talks/2023-09-20-ocp/abstract.md new file mode 100644 index 00000000..b2658868 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/AGPLv3_Logo.png b/doc/talks/2023-09-20-ocp/assets/AGPLv3_Logo.png Binary files differnew file mode 100644 index 00000000..445284a3 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/AGPLv3_Logo.png diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme.png b/doc/talks/2023-09-20-ocp/assets/aerogramme.png Binary files differnew file mode 100644 index 00000000..3aabe3ad --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme.png diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme.svg b/doc/talks/2023-09-20-ocp/assets/aerogramme.svg new file mode 100644 index 00000000..0c1ee127 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/aerogramme_components1.drawio.pdf b/doc/talks/2023-09-20-ocp/assets/aerogramme_components1.drawio.pdf Binary files differnew file mode 100644 index 00000000..71a90f26 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme_components1.drawio.pdf diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme_components1.png b/doc/talks/2023-09-20-ocp/assets/aerogramme_components1.png Binary files differnew file mode 100644 index 00000000..fb81b460 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme_components1.png diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme_components2.drawio.pdf b/doc/talks/2023-09-20-ocp/assets/aerogramme_components2.drawio.pdf Binary files differnew file mode 100644 index 00000000..87e42eed --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme_components2.drawio.pdf diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme_components2.png b/doc/talks/2023-09-20-ocp/assets/aerogramme_components2.png Binary files differnew file mode 100644 index 00000000..f9e2df14 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme_components2.png diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme_datatype.drawio.pdf b/doc/talks/2023-09-20-ocp/assets/aerogramme_datatype.drawio.pdf Binary files differnew file mode 100644 index 00000000..0606e059 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme_datatype.drawio.pdf diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme_datatype.png b/doc/talks/2023-09-20-ocp/assets/aerogramme_datatype.png Binary files differnew file mode 100644 index 00000000..c3b015a1 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme_datatype.png diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme_keys.drawio.pdf b/doc/talks/2023-09-20-ocp/assets/aerogramme_keys.drawio.pdf Binary files differnew file mode 100644 index 00000000..8fea81c7 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme_keys.drawio.pdf diff --git a/doc/talks/2023-09-20-ocp/assets/aerogramme_keys.png b/doc/talks/2023-09-20-ocp/assets/aerogramme_keys.png Binary files differnew file mode 100644 index 00000000..ed2077d9 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/aerogramme_keys.png diff --git a/doc/talks/2023-09-20-ocp/assets/alex.jpg b/doc/talks/2023-09-20-ocp/assets/alex.jpg Binary files differnew file mode 100644 index 00000000..eac0f0a9 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/alex.jpg diff --git a/doc/talks/2023-09-20-ocp/assets/atuin.jpg b/doc/talks/2023-09-20-ocp/assets/atuin.jpg Binary files differnew file mode 100644 index 00000000..f2fbd61d --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/atuin.jpg diff --git a/doc/talks/2023-09-20-ocp/assets/compatibility.png b/doc/talks/2023-09-20-ocp/assets/compatibility.png Binary files differnew file mode 100644 index 00000000..ce364a9b --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/compatibility.png diff --git a/doc/talks/2023-09-20-ocp/assets/consensus.svg b/doc/talks/2023-09-20-ocp/assets/consensus.svg new file mode 100644 index 00000000..8321e383 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/consistent_hashing_1.svg b/doc/talks/2023-09-20-ocp/assets/consistent_hashing_1.svg new file mode 100644 index 00000000..f8d24fd8 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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,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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> + <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-09-20-ocp/assets/consistent_hashing_2.svg b/doc/talks/2023-09-20-ocp/assets/consistent_hashing_2.svg new file mode 100644 index 00000000..5ac8faf6 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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,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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> + <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-09-20-ocp/assets/consistent_hashing_3.svg b/doc/talks/2023-09-20-ocp/assets/consistent_hashing_3.svg new file mode 100644 index 00000000..fdfd3efc --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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,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> + <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-09-20-ocp/assets/consistent_hashing_4.svg b/doc/talks/2023-09-20-ocp/assets/consistent_hashing_4.svg new file mode 100644 index 00000000..95ed0e02 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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,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> + <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-09-20-ocp/assets/deuxfleurs.svg b/doc/talks/2023-09-20-ocp/assets/deuxfleurs.svg new file mode 100644 index 00000000..c298c22b --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/endpoint-latency-dc.png b/doc/talks/2023-09-20-ocp/assets/endpoint-latency-dc.png Binary files differnew file mode 100644 index 00000000..7c7411cd --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/endpoint-latency-dc.png diff --git a/doc/talks/2023-09-20-ocp/assets/garage.drawio.pdf b/doc/talks/2023-09-20-ocp/assets/garage.drawio.pdf Binary files differnew file mode 100644 index 00000000..a54a163c --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/garage.drawio.pdf diff --git a/doc/talks/2023-09-20-ocp/assets/garage.drawio.png b/doc/talks/2023-09-20-ocp/assets/garage.drawio.png Binary files differnew file mode 100644 index 00000000..386dd862 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/garage.drawio.png diff --git a/doc/talks/2023-09-20-ocp/assets/garage2.drawio.png b/doc/talks/2023-09-20-ocp/assets/garage2.drawio.png Binary files differnew file mode 100644 index 00000000..8562fbcf --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/garage2.drawio.png diff --git a/doc/talks/2023-09-20-ocp/assets/garage2a.drawio.pdf b/doc/talks/2023-09-20-ocp/assets/garage2a.drawio.pdf Binary files differnew file mode 100644 index 00000000..422c9343 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/garage2a.drawio.pdf diff --git a/doc/talks/2023-09-20-ocp/assets/garage2b.drawio.pdf b/doc/talks/2023-09-20-ocp/assets/garage2b.drawio.pdf Binary files differnew file mode 100644 index 00000000..05a9710e --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/garage2b.drawio.pdf diff --git a/doc/talks/2023-09-20-ocp/assets/garage_sync.drawio.pdf b/doc/talks/2023-09-20-ocp/assets/garage_sync.drawio.pdf Binary files differnew file mode 100644 index 00000000..a94b3572 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/garage_sync.drawio.pdf diff --git a/doc/talks/2023-09-20-ocp/assets/garage_sync.drawio.png b/doc/talks/2023-09-20-ocp/assets/garage_sync.drawio.png Binary files differnew file mode 100644 index 00000000..2e7b5af0 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/garage_sync.drawio.png diff --git a/doc/talks/2023-09-20-ocp/assets/garage_tables.svg b/doc/talks/2023-09-20-ocp/assets/garage_tables.svg new file mode 100644 index 00000000..c7172713 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/lattice1.svg b/doc/talks/2023-09-20-ocp/assets/lattice1.svg new file mode 100644 index 00000000..8bfa5aa7 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/lattice2.svg b/doc/talks/2023-09-20-ocp/assets/lattice2.svg new file mode 100644 index 00000000..adcd92cb --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/lattice3.svg b/doc/talks/2023-09-20-ocp/assets/lattice3.svg new file mode 100644 index 00000000..640dc468 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/lattice4.svg b/doc/talks/2023-09-20-ocp/assets/lattice4.svg new file mode 100644 index 00000000..b2a99e28 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/lattice5.svg b/doc/talks/2023-09-20-ocp/assets/lattice5.svg new file mode 100644 index 00000000..bc6b7195 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/lattice6.svg b/doc/talks/2023-09-20-ocp/assets/lattice6.svg new file mode 100644 index 00000000..176b1715 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/lattice7.svg b/doc/talks/2023-09-20-ocp/assets/lattice7.svg new file mode 100644 index 00000000..7ce8bda8 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/lattice8.svg b/doc/talks/2023-09-20-ocp/assets/lattice8.svg new file mode 100644 index 00000000..c94a69b2 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_1.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_1.svg new file mode 100644 index 00000000..92232a1b --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_10.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_10.svg new file mode 100644 index 00000000..34c24e0d --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_2.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_2.svg new file mode 100644 index 00000000..c07cba2b --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_3.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_3.svg new file mode 100644 index 00000000..198d1f5d --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_4.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_4.svg new file mode 100644 index 00000000..c5f6148d --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_5.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_5.svg new file mode 100644 index 00000000..c2b668be --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_6.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_6.svg new file mode 100644 index 00000000..980823fc --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_7.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_7.svg new file mode 100644 index 00000000..154c0b7d --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_8.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_8.svg new file mode 100644 index 00000000..21766415 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/latticeB_9.svg b/doc/talks/2023-09-20-ocp/assets/latticeB_9.svg new file mode 100644 index 00000000..b60f8afe --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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-09-20-ocp/assets/location-aware.png b/doc/talks/2023-09-20-ocp/assets/location-aware.png Binary files differnew file mode 100644 index 00000000..f5966865 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/location-aware.png diff --git a/doc/talks/2023-09-20-ocp/assets/logo_chatons.png b/doc/talks/2023-09-20-ocp/assets/logo_chatons.png Binary files differnew file mode 100644 index 00000000..890cf17e --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/logo_chatons.png diff --git a/doc/talks/2023-09-20-ocp/assets/map.png b/doc/talks/2023-09-20-ocp/assets/map.png Binary files differnew file mode 100644 index 00000000..1dff3ab6 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/map.png diff --git a/doc/talks/2023-09-20-ocp/assets/minio.png b/doc/talks/2023-09-20-ocp/assets/minio.png Binary files differnew file mode 100644 index 00000000..a71e9ccc --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/minio.png diff --git a/doc/talks/2023-09-20-ocp/assets/neptune.jpg b/doc/talks/2023-09-20-ocp/assets/neptune.jpg Binary files differnew file mode 100644 index 00000000..61fcbff6 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/neptune.jpg diff --git a/doc/talks/2023-09-20-ocp/assets/rust_logo.png b/doc/talks/2023-09-20-ocp/assets/rust_logo.png Binary files differnew file mode 100644 index 00000000..0e4809ec --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/rust_logo.png diff --git a/doc/talks/2023-09-20-ocp/assets/scr_garage_stats.png b/doc/talks/2023-09-20-ocp/assets/scr_garage_stats.png Binary files differnew file mode 100644 index 00000000..c92f0774 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/scr_garage_stats.png diff --git a/doc/talks/2023-09-20-ocp/assets/scr_garage_status.png b/doc/talks/2023-09-20-ocp/assets/scr_garage_status.png Binary files differnew file mode 100644 index 00000000..849b8336 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/scr_garage_status.png diff --git a/doc/talks/2023-09-20-ocp/assets/scr_garage_status_broken.png b/doc/talks/2023-09-20-ocp/assets/scr_garage_status_broken.png Binary files differnew file mode 100644 index 00000000..86dcce89 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/scr_garage_status_broken.png diff --git a/doc/talks/2023-09-20-ocp/assets/scr_garage_worker_get.png b/doc/talks/2023-09-20-ocp/assets/scr_garage_worker_get.png Binary files differnew file mode 100644 index 00000000..e7d4e288 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/scr_garage_worker_get.png diff --git a/doc/talks/2023-09-20-ocp/assets/scr_garage_worker_list.png b/doc/talks/2023-09-20-ocp/assets/scr_garage_worker_list.png Binary files differnew file mode 100644 index 00000000..472312a0 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/scr_garage_worker_list.png diff --git a/doc/talks/2023-09-20-ocp/assets/slide1.png b/doc/talks/2023-09-20-ocp/assets/slide1.png Binary files differnew file mode 100644 index 00000000..eb2e67a0 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/slide1.png diff --git a/doc/talks/2023-09-20-ocp/assets/slide2.png b/doc/talks/2023-09-20-ocp/assets/slide2.png Binary files differnew file mode 100644 index 00000000..126a39b8 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/slide2.png diff --git a/doc/talks/2023-09-20-ocp/assets/slide3.png b/doc/talks/2023-09-20-ocp/assets/slide3.png Binary files differnew file mode 100644 index 00000000..a39f96bf --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/slide3.png diff --git a/doc/talks/2023-09-20-ocp/assets/slideB1.png b/doc/talks/2023-09-20-ocp/assets/slideB1.png Binary files differnew file mode 100644 index 00000000..b14b6070 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/slideB1.png diff --git a/doc/talks/2023-09-20-ocp/assets/slideB2.png b/doc/talks/2023-09-20-ocp/assets/slideB2.png Binary files differnew file mode 100644 index 00000000..a881a796 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/slideB2.png diff --git a/doc/talks/2023-09-20-ocp/assets/slideB3.png b/doc/talks/2023-09-20-ocp/assets/slideB3.png Binary files differnew file mode 100644 index 00000000..830709d2 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/assets/slideB3.png diff --git a/doc/talks/2023-09-20-ocp/assets/slides.svg b/doc/talks/2023-09-20-ocp/assets/slides.svg new file mode 100644 index 00000000..9946c6fb --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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 +rfU8ujsEl7UuSDIAqJU5wFNKKadk5gvoxthLfXF9RJxda10OnE03PbI0rQwAmk6PAF4QEc8Fjgf2 +bFyPNAruBFZk5leAzwM/blyPesIAoKm2FHhJRJxMNx5f0v1bHRHLa61n0fUfsO+ApoQBQFPhmFLK +yzPzN4AjWhcjzWBXRcSZtdZPAf/VuhiNFwOAhuWhwAsj4pXA41oXI42h1Zn5WeCTwI9aF6OZzwCg +B+IA4GUR8XLgyfj7JE2HBL6dmZ8G/hn4eeN6NEN5wtbuWFZKeW1m/je63vyS2rgjIr5Yaz0dOKd1 +MZpZDADaWfsBp0bE6+k69mnmuBPYNGn/Dn5xWdw5bLnU8VxgrymuS8N1SWZ+DPgUDivUTjAAaEeO +LqX8QWa+HK/2p8ptwDq6W7m3AhsjYiOwAbi11roR2AjcMnht46RtA3D34N9NuGvwd8M0jy2Hbc4H +9qBbk2HeYJtPFxT3BeaVUiZe2z8zJ76eBzwIWIi/T1NlU0R8qtb6fuDy1sVodBkAtD3LSilvHDT8 +s1oXMwNtBq6lWzhmfURcW2tdS7fs7L2vT9rvo33olmVeABxKN/vjglLKocCizJz8+kK6wKGdV4Ev +Z+a7gP9oXYxGjwFAkwVwckS8mW6iHm3bncA1wNURcVWt9SrgauBKukVgrqU7+Wp4ZtEFgcPp1oU4 +opRyeGYeMXjtMHxkcX/Ozcz3Al/BeQU0YADQhOdFxLuAX2pdyIj4Od2ELJdNauCvomvk12IDP2oK +XUA4YrAdXko5IjOPApbQPXYQXJiZ7wC+2roQtWcA0C9HxF8BT29dSCPr6Rr6VbXWNXSrtq0C1rQt +S0O2gK7z6pJSyuLMXEoXDB5GP8+D387MtwHntS5E7fTxF1+dpYOG/5TWhUyTW4HvR8TKWutquob+ +UroAoP5aQBcEji6lLM3Mx9FNZDWvbVnT5guZ+Xa6z4J6xgDQP3OAN0fE2xjfZ6Z3AVcMGvsVdPOp +X4q37bXzFgHHlVKOz8xlwLGM76iFuyPiI7XWP2bL0SQacwaAfvmNiHg/8ODWhQzR3cBFEfG9WusF +wAV0V/d3ty1LY2YPukcIy0opj8/MJwLHMF4jE36SmW+kW5FQPWAA6IcjIuI04FmtCxmCu4HvRcR5 +tdZzgRV41aI25gPHl1JOyMwTgMczHoHgy5n5euAnrQvR1DIAjL+XDBr/Ba0L2U13AxdHxDm11vOB +b9FNfiONmrl0a2IcHxHHAU9ly9kVZ5KbM/N36RYe0pgyAIyv/UspH83Ml7UuZDdcMVgP/avAt9ly +GltppphL14/gOZl5MvDI1gXtqoj4RK31d+lmodSYMQCMpydGxGfpJkeZCe4GvpWZXwKWAz9sXI80 +FY6km2jreXR3B2bK44KrMvPFwMrWhWi4DADj52UR8fd006yOsp9HxDdqrWcBX8Tb+uqXucCJpZST +M/PXgENaF7QDmzPzdcAZrQuR9ItmlVLeExE5wtuGUsrfAyfh+gLShFnASaWUj0fEhhH4nG5vq6WU +d9HNuihpROwVEZ8bgRPEtrbNEfEvwIuA2a1/UNKImw28ePB53jwCn99tbZ9lfOcQkWaUvSPiX0fg +pDB5uyciVgBvBA5s/QOSZqj9gFdGxPKIuGsEPteTty8z+o8ZpbE2JyK+PgIng4ltfSnlg3SLsUga +nkXAOyNi3Qh8zie2b9KfKZOlkbJnRHxtBE4CGRHfA16Ft/ilqTYbeHVEXDACn/uMiK8wc0YzSGMh +Sil/3/iDf0cp5Uy6Dn2Spt+yUsppEXFby3NBKeX/tv5BSH3ypw0/8LeXUj4AHNr6hyAJgEWllA9F +xO2tzgvAO1r/EKQ+eHZE1EZX/KcxXgsJSePkoFLKuxsFgXuAZ7b+AUjj7KCIWDvNH+w7SylnAItb +v3lJO+WhpZQPxvQPI7yO0Z/QSJqZIuLL0/yB/jxweOv3LWm3PCwivjjN54zlrd+0NI5ePI0f4p8B +L279hiUNxSkRcdV0nT+AX2/9hqVxsk9EXDkNH967BuP457d+w5KGag7dPAJ3TMN55OrBf0/SELx9 +Gj60FwPHtH6jkqbUYyPiv6bhLsBbW79RaRzMjinu+Dfo5Gdil/ph9qCT4FSGgOtxqmDpAXv9FH5I +NwOntn6Dkpp4VUzhIwHgda3foDSjRcRFU/QBvQk4vvX7k9TU0yLi51N0jvl+6zcnzWRHTdEH8+fA +41u/OUkj4diIuHGK7gIsaf3mtH2ldQG6Xy+bgmNuzMwTgQum4NiSZp7vZ+ZzgE1TcGyHE48wA8AI +i4hnDPmQNTNfAVw05ONKmtkuyMxTgRzmQafgHCb1wt4x5Dm9B4v4SNI2lVL+ZsiPATbjMuHSLnvC +kD+IP8GhfpLu39yI+NmQ+wEsa/2mtG0+AhhdDx/mwTLzvcBtwzympLGzKTPfN+RjDvVcpuExAIyu +Ya6+dxfwiSEeT9L4+kfg7iEez5VER5QBYESVUvYb4uH+E9gwxONJGl/rge8N62CllP2HdSwNlwFg +dM0d1oGiW5xDknZKRFw1xMPNG+KxNEQGgNG15xCP5f9nSbtimOeMYZ7LNEQ2DD2QmXbCkbTTMvMR +rWvQ1DMA9MMy4KDWRUiaEQ4Gjm1dhKaeAaAfCvCa1kVImhFeh21DL/g/uSci4veBB7WuQ9JIOzAi +3ti6CE0PA0B/HFBK+VDrIiSNrlLKh/FCoTcMAD0yWAjov7euQ9JIel1mvrR1EZo+BoCeiYiPACe1 +rkPSSHlORHy4dRGaXgaA/tkzIv4VeGbrQiSNhGdFxOeAPVoXoullAOinOYMQ8OLWhUhq6qWDc8E+ +rQvR9DMA9Nc+EXEm8A4gWhcjaVoF8CcR8U/A7NbFqA0DQL9FRPxFRHyNbvIPSePvwIhYHhF/huG/ +1wwAAnhmRFyAnQOlcfeciLgIeF7rQtSeAUATHhIRXy+lnInjgKVxc2gp5YyI+Arw4NbFaDQYALSF +zHxJRPwAOBVvD0oz3SzgDRFxWWae2roYjRYDgLbl0Ig4IyJWAE9qXYyk3fLkiPhuRHwQ2Ld1MRo9 +BgDdn6dExHci4uvAE1oXI2mnHFNKOTMivk23Eqi0TQYA7YyTIuI/B0Hg8a2LkbRNjxk0/N/PzJe0 +LkajzwCgXTERBD4PPLZ1MZIAODYivhARFw8afvvuaKcYALSrAnhBRHx/MHTwlcCejWuS+mYWcEpE +fD0iVgLPx4Zfu8gAoAdiWUT8Y0RcU0p5N/DQ1gVJY+5g4C0RcWVEfJFu7g4bfu0WA4CG4ZDMfEtE +/KiU8k/A8a0LksbMU0sp/xwRP4kIw7aGwtWfNEx7ZebLIuJlwNUR8c+11o8Dl7cuTJqBjqBbrOe3 +gEdlZuNyNG68A6CpcvjgrsBlEbEKeAtwaOuipBF3APDaiFgREWsGV/uPal2UxpMBQNNhSUS8e3D7 +8mzgVcCCxjVJo2IB8KpBh77rI+I04Dh8tq8p5iMATadZdAsPPRO4B7goM88ClgMrm1YmTa/FdL34 +TwaeBuzVuB71kAFArcyiG0WwDPhT4MqI+Hqt9SzgbOCOptVJwzULeHIp5eTM/DXg6NYFSQYAjYqH +ZeZrI+K1wC3A2Zn5VeCbwI+bVibtnkcAJ0TErwLPAubbkU+jxACgUbQv8OKIePFg/7qI+Fat9Xxg +BXAh4JlUo2YxcHwp5bjMfBZdL35pZBkA+uEHdBOILGxdyG46ZLBM8cT85tdGxDdrrecC5+IwQ7Vx +FHBCKeWEzDwBWAQwBlf564DrgUe3LkRTywDQAxHx7Vrr20op78rM1zDzR38sysyXR8TLB/vXAxdk +5gXAxHZds+o0jg6lWwhrWUQ8nm51zINgLBr8CTUiTq+1vqOU8leZaQAYcwaA/vh5rfX1wOkR8RHg +Sa0LGqKDgedFxPMmvbYWWJmZK+lGGPwnXVCQdmQ/4DHAslLKssxcBixpXNNU+35m/nZmfqd1IZo+ +BoD+uTAzjwNeHxF/AezfuqApcihw8mCY1YSrgAsjYnWtdRVw2WDb3KA+tTeb7jb+0aWUpZl5NLAM +OHziG8bo6n571mfmO4DTgNq6GE0vA0A/3QP8bWb+E/CGiPg9uquecXcEcERmvjBiizlW1gKrJgWD +1cDFwK3TX6KmwN50PfKXAEtLKUsycylwJN3wvD409FvbFBEfrrW+F/h562LUhgGg334OvDMz/7aU +8ubM/G1gTuuiGjgUODQzT9oqGFwNXB4RV9Var6a7g3A1cCVdaOhdqzGigu7/4cPort6PKKUcnpkP +o2vkD5v8zT1s7CfbFBF/W2t9X2be2LoYtWUAEMC6WusfAX9dSnlrZr4O2Kd1USPgcLo1DdgqGEA3 +UdE1dIseXV1rvYr7wsFPgRuA26ax1nE2h67D3UMYNPKllCMy83C6uzqHsdVMej1v5Lfl9oj4WK31 +PZlpXxgBBgBt6fpa6+8D7yulvCkzf4vx7SPwQO0NPBJ45HYCAsAmutEI1wPrIuJ6up/xOrqAcB3d +kKsbgL5djS2ctB0CHFRKWUg35HNiyOpBg7+bu/U/toHfaRsi4u9qrf87M9e2LkajxQCgbbm21vom +uil6T42I32X8e0FPhbnAwwfbvY3WdsLC3XR9DjYAGye2iNhANzPiRmBjrXXr77kVuHnSce6kCx4T +bmfLTo4bgbu2U++ewLxJ+7PZ8k7QXLa80t5/8P0T2/6llPnA/MH+/Mz8he8Z/P0vnHts1IdqVWZ+ +GPhEZm7a4XerlwwAuj8bgY9m5kfpZjh7Q2b+Ov7eTIU96FaF22KVxK0bxe2Eh5FhI95UBf4tMz8E +nIV9VLQDnsi1s1bUWlcAi0spv52ZrwYe1LooSdwUER+vtX6Erg+KtFNm+oxwmn5raq1/mJkHZeYz +I+IT2NlNmm53AGdl5m9k5qJBJ14bf+0SA4B21z3AObXWV2bmosz8TeAcvO0oTaWVmfl7mfmQzDwF ++Cxdvw9pl/kIQMNwM3BGZp5BN1TrRRHxKuCxTauSxsNlmfkZ4BO4NLaGyACgYfsp8MHM/CBdAHhB +RLwAOKZtWdKMcnFmfgH4AnBR62I0ngwAmkoXARdl5jvpJnD59Yh4PvAU/N2TJrsbOD8z/5Wu0fd5 +vqacJ2FNlyuB92fm++nGk59YSjk5M59L99hA6pt1EfHNWutZwHJgfeuC1C8GALWwCVhea11ON4/7 +scBJEXECcDywb8vipClyC/CtzDwP+Drd3TE7zaoZA4BaS+BCumWK30u3OttRwHGllJMy80TggJYF +SrvpVuC7mXkOcD7wXbY/C6M07QwAGjX3AKuAVbXW0wevLQZOGgSCXwEObFadtH23AP85aPDPAb5P +NzufNJIMAJoJ1gCnDwJBAEuBJ5VSlmXm4+hGGMxuWaB6ZzNwcUSsrLVeCHwHWI3zYGgGMQBopkng +B8APaq1/N3htD7p135cNQsEyun4FcxrVqPFyF3DFoLFfCawEvgfc4SN8zWQGAI2Du7nvscEZg9f2 +AI7mvlBwDN2KhvYn0P25CVgdERcNruxXApcCd9vYa9wYADSu7gYuAS6ptf7DpNcX0PUpWFpKWQIs +zsyldHcQZk17lWplLbAqItbUWlfTBcg1g81VDdULBgD1zXq6q7qVtW7RP2s2XQg4CjiqlHJ0Zj4S +OAw7Hc5UNwLXRMQVtdZL6a7kLx9sm8GGXv1mAJA6m4GLBxtbhYO9gQfT3TlYBBxaSlmcmRP7R2B/ +g+l2F10Df21ErKFbpXItcC3dVfyP6NaosJGXtsMAIO3YHUy6PQy/EBBmAYfQBYHDgENKKQuBgzPz +QGDhYDsYmD89Jc9YtwLXA+voZsq7Ebi+1roOuA64BriK7hZ+BRt4aXcZAKQH7h7gZ4PtfPiFgDDZ +3mwZCA4EFpZSDhx8PTcz5wLzgP3ppk2eSxcc9mX0+yncQzce/ha6GR9vAzYAGyNi0+C1G2utN9I1 +8jcyqcGnC1v3snGXpo4BQJped9CtmPjTyS/eT2DY2my6QLAfXSiYy32PH7YOCPPZ8jO+xX4pZd7g +v71x0vfcTXcVvr39iQYeusZ90+Dvbx58vXl7hduYS6PFACDNLJsH200P9EC7EDokjaHSugBJkjT9 +DACSJPWQAUCSpB4yAEiS1EMGAEmSesgAIElSDxkAJEnqIQOAJEk9ZACQJKmHDACSJPWQAUCSpB4y +AEiS1EMGAEmSesgAIElSDxkAJEnqIQOAJEk9ZACQJKmHDACSJPWQAUCSpB4yAEiS1EMGAEmSesgA +IElSDxkA+mGv1gVImlH2bl2App4BoAcyc1HrGiTNHJ4z+sEA0A+/jHcBJO2cvenOGRpzBoB+2Bd4 +busiJM0IzwPmty5CU88A0BMR8XYgWtchaaTF4FyhHjAA9McTgNe0LkLSSHs9sKx1EZoeBoAeiYj3 +AUe2rkPSSDoqIt7TughNHwNAv+wbEV8GDmxdiKSRckBEfBGf/feKAaB/FkfE14ADWhciaSTsHxFf +AR7ZuhBNLwNAPz1uEAIWti5EUlMHR8S/0/URUs8YAPprWURcCDy2dSGSmnh0RHwHzwG9ZQDot4dE +xLnAb7QuRNK0ellEfBs4onUhascAoH0j4jOllI8Bc1oXI2lKzSmlnB4R/4Qd/nrPACAAMvN1EXEJ +cGLrWiRNiedFxKrMdD4QAQYAbWlxRJxTSvko8KDWxUgaiodExOci4iy85a9JDADaWmTm6yPiR8Ab +gVmtC5K0W/YA3hgRq4Ffb12MRo8BQNuzICI+MHgs8EoMAtJMUYCXRMQlEfEBfNav7TAAaEeOjoh/ +jIj/wiAgjbIATomIlRFxJnBU64I02gwA2llLBkHgYuAluLKgNComGv4LBtP5Oq5fO8UAoF21NCLO +jIjvA/8dhw5KrcwBXhMRFw8a/se1LkgziwFAu+uYiPg/EXFtKeU04OjWBUk98fBSyrsj4pqIOB14 +TOuCNDMZAPRA7ZeZr42IH0TE1+keD9hPQBquApxUSjkzIi7PzLfggl56gPZoXYDGRgFOioiTgB9l +5ieATwM/aluWNKM9AnhFRJwKPDwzW9ejMeIdAE2FR0TEn0XEFRGxCngLcEjroqQZ4kHAayNiRUT8 +MCLeCTy8cU0aQwYATbUlEfHuiPhpRKwAXovjkqWt7UM3dn95RFwXEacBx+FoG00hHwFouswCjouI +44D/D/hqZn4J+BJwfdPKpDYOoZuf/3nAs3FEjaaZAUAtzAFeGBEvHOyvjojltdazgPMBH3RqXC0F +To6IU4An411YNWQA0ChYkplLIuItwM8i4kuDMPBvwKbGtUkPxFzgGaWUkzPzecCi1gVJEwwAGjUP +HgwrfC1wN3BxRJxTaz0fOA+4uW150v2aAzwFOH7wuOupwN723tcoMgD0wx3A3q2L2A17AMsyc1lE +QBcIvhcR59ZazwVWABtbFqjemw8cX0o5ITNPAB7PeJxXZ+o5Q7tgHH5RtQMRcUat9byIeB8zezje +HsCTM/PJEfFWukCwMiK+VWv9HrAS+HHTCjXuHg48vpTyhMx8Kt30u3uM0RX+dZn5h4NA85rWxWhq +GQD6IYFPZubyUsqfZ+bvMB6z9e0BPCkznzS4QwBwC3BJRKysta6kCwWrsWOhdt0iYBmwLCKWAU8C +FgKMUYM/oUbEp2qtvw/cBDytdUGaegaAfrm51vpG4B8i4qN0J7Rxsy9wXGYeNykU3ABcMAgFFwI/ +AK4E7mlUo0bLLGAx8OhSyrGZ+Xi6W/kL25Y1bf4jM387My9qXYimlwGgn76fmU8BfjMi/gQ4onE9 +U+0g4LmZ+dxJoeAO4LKIuLTWuhq4lO5OwRXAXW3K1BTbE3gksAQ4upSyNDOPAo5i8Lx7DK/s78+V +mflnwCeA2roYTT8DQH9V4OOZ+SngtyLi7cBDG9c0nfYGjsnMYyaFAuga/x/RzU1waa31UuBqujsG +a/FRwqgL4FDgYcARpZSjMvNoukb/EXQhAOhdYz/ZNZn5l8DHMez2mgFAdwIfy8y/B141uCPw4MY1 +tbQn3dLGR2cmW4WDO4GfAmsj4lpgTa11DTCxXUPXMVFTawHdLfvFwOJSyuLMXETX8B9FN/Ye6HUj +vy03ZOb7gQ8Cm1sXo/YMAJpwJ3D6YBW/10XEm+lOqLrPXgwanYmGZRt3D35CFxJuiIjraq3r6Pog +XAdM/vrW6St7RphP9/u2cLAdAhxUSlmYmYcAB9MF04cy6SoebOR3wrWZ+V7gNGz4NYkBQFu7HfhA +Zn4EeHFEvIHx7Cw4FfbkvitTtnEHYbLN3BcGboiIdcAGYGOt9Va6CY9uoZvnYCNdYNgw6evbpu5t +7Ja5wLzBtj9dgz6xvy+wfynl3r/PzIV0fTMmGv3Z2zqojfsD8p3M/BDwL3QBX9qCAUDbcyfw6cz8 +NPCEUsobMvMlODnIsMwGDhtsWzR09xMaJqvcFxLuoQtuk6/uNrLl892bI2Kio1fShYnJ9mew8lxm +FmC/SX+3J13DPbn2feh6z+87+N4dzmlvYz4t7oiIM2utHwIuaF2MRpsBQDvje7XWU4E3Aa+OiN+h +Xx0GR1Ghexa+YGf/gQ3wWLsuIv6x1vo3mfmz1sVoZnAlKu2KG4D3ZObDM/NFwBfw1qLUyh3A5zPz +hZl5WK31rYCNv3aadwC0O+4CPpeZn6O7dfxrEXEq8AwGt5ElTZmVg866n6brWCrtFgOAHqgNwBmZ +eQbdY4GXR8SrgSPbliWNlasj4p9rrf+Xbp4K6QEzAGiYfkL3iOA9wJNKKS/NzBfQTcoiaddcGRFf +qLV+BviufTg0bAYATZXv1lq/C/wBsBQ4OSJOoVsr3ccE0ratjojltdazgPPTVl9TyACg6bAKWDW4 +M/Aw4Fcj4leBE4E5TSuT2toE/FtmfgX4MnC1bb6miwFA0+1K4CODiYZmA08rpfxqZj6Tbr527w5o +nCWwKiLOrrV+FTiPrje/NO0MAGppM3B2rfXswf5C4JdLKcdl5knAsThUVTPfmog4p9Z6DvDvwI1e +5WsUGAA0StYBy2utywf78+k6E56UmccDT2SreeClEXMPcHlErBg0+P8G3GSDr1FkANAouxWYuHKC +bsrZ40spJ2TmE+nuEOzbrDqpm4r5woj4bq31PGAFcIsNvmYCA4BmkpuBL9VavzTptUXAMmBZRCwD +ngwc0KI4jb1bgf+KiJW11pXASuBSoNrgayYyAGimu3awLZ90Et46FPwycGCb8jRD3QJcYmOvcWYA +0DjaOhQE3fDDI4ElpZQjM/Mo4GgMBn23jm7s/eW11svoGvnL6UaruICSxpoBQH2QwJrB9pVa6+S/ +WwAsBpaWUpYAizNzKV1YmDXdhWrKrKUbfre61rqK7nfhB8B1YEOvfjIAqO/W093eXblVMNgbeARw +OHBYKeUw4KGZeQRwGN1jBj8/o+FuulXwromIq4Braq0/Aa4BrgZ+zGCsvQ29dB9PYNK23cFgBkOA +rcIBdJ+dRXRh4N6QkJkPBR5MN6fBgXRBQrtvM3Aj3a36n0XE1o371XRX9/eADby0KwwA0u65m64R +uoZu6Ne2QgJ0wxQP5r5AcCBwSCllIXBgZh4IHDL4+33p5j4YZ7cMthuAGyJiHXBjrfWGwWvr6Br8 +if1bJ/9jG3hpeAwA0tSaaPCumPzidsLChP2AuYNtIhRM7O8PzAPmllIm9mczaU2FzNxr8L0Ttt7f +c3CMyTYCd03a3wTcOXk/Iibv30Z3db6h1rpx8P2b6B6pTHy9kW7o5sT+LVu/URt0qR0DgDR6bh5s +92sHIWLobKyl8eI865Ik9ZABQJKkHjIASJLUQwYASZJ6yAAgSVIPGQAkSZDCqiQAABVySURBVOoh +A4AkST1kAJAkqYcMAJIk9ZABQJKkHjIASJLUQwYASZJ6yAAgSVIPGQAkSeohA4AkST1kAJAkqYcM +AJIk9ZABQJKkHjIASJLUQwYASZJ6yAAgSVIPGQAkSeohA0A/+P9Z0q7wnNED/k/ugcw8sHUNkmaO +zFzYugZNPQNAPzy6dQGSZpTHtC5AU88A0A+PAJa2LkLSjPAYYHHrIjT1DAA9UUr5/dY1SBp9pZQ3 +ta5B08MA0BOZ+Urgl1rXIWmkPTYzX9G6CE0PA0B/7BkR/wDs1boQSSNp74j4OLBH60I0PQwA/XJs +KeW01kVIGj2llNOBx7auQ9PHANAzmfkq4E9b1yFpdJRS/tfgMaF6xADQQxHxTgwBkri38f/j1nVo ++hkAeioi3jm45bdn61okNbFHKeXDNv79ZQDoscx8TUR8CXCmQKlfFkbE1zLzd1oXonYMAHpmRPwA +eGbrQiRNixMi4vvAia0LUVsGAAEcHBFfKaX8FTC7dTGSpsS8UspfR8Q3gAe3LkbtGQA0YVZmvnVw +ZXBc62IkDdULImJ1Zr4JmNW6GI0GA4C2dlREfKuUcibw0NbFSHpAHhwRn42Iz+PnWVsxAGhbIjNf +Mugb8HZgXuuCJO2S+cD/jIjLgRe3LkajyQCg+7NvRPxlRFwFvBPYt205knZgLvDGiLgiIv58sC9t +kwFAO+OAiPjTiPgx8BZgTuuCJG1hDl3D/6OI+ABwcOuCNPoMANoVB0bEuwdB4E3A/q0Lknpuf+AP +I2LNoOE/pHVBmjkMANodh0TEX0fE2lLKGcAxrQuSeuaoUsoHI+KnEfE+vOLXbjAA6IGYnZmnRsRF +EXEB8EqcWliaKrOAUyLi64MhfW/AZ/x6AAwAGpZlEfGPEXEl8D+Bw1sXJI2JI4A/jYhrIuKLwElA +tC1J48AAoGF7cET8eURcNbgr8EbgoNZFSTPMAuCVg6v9NYMVPBc1rkljZo/WBWisLYuIZcD/Bv49 +Mz8BfA7Y2LYsaSTNBp5ZSjk1M58P7NW6II03A4CmwyzgpIg4CfhwRHyh1vr/gHOA29qWJjU1Fzip +lPKizHwBMD8zW9eknjAAaLrNH3QcPBXYDKzIzLOAzwPXtC1NmhaHA88upZyUmb8KzLPRVwsGALU0 +m/vuDHwAWBMRZ9ValwPfBO5uWZw0JAU4lq4H/8nA4+im225blXrPAKBRsjgz3xARbwDWRcTZtdZz +gXOBHzauTdoVRwJPK6U8PTOfBRzYuiBpawYAjaqFmfmKiHjFYP/6iDiv1no+sAK4EPASSqNiMXB8 +KeW4zHwOcBiAV/kaZQaAfvga3bjhZ7Uu5AE4eLBC4UsG+9dFxLmDOwTnAZcB97QrTz0yCzia7gr/ +hMx8GoMpeMekwT+bLlw/u3UhmloGgB6IiKtrra+jewb5YQZXJzPcIZn50oh46WB/I3BxRKysta4E +VgKXArVZhRoXi4Bl3Des9Ti6cfrj0uBPuDYz3wacUUo5bczem7bBANAvyzPzG8CbI+JtjNc443nA +cZl5XMS9k6TdCvzXVqFgNT460PZt3dg/GTigbUlT7u6I+Eit9Y/pPjPqCQNA/9wGvDMzPxsRHwJO +bF3QFJrPL4aC9cCqiFhda72ULhBcCvykUY1q4zDgKGBpKeXozFwCLGFwZd8j52TmGzNzdetCNP0M +AP21KjOfARwfEX8O/ErrgqbJAuD4zDx+UigAuAP4cUSsqrWuBlbRhQP7Fsxsi+ga9qWllCWZuRR4 +DLDvxDf09Fb3tzPzT4BvtC5E7RgAtCIzT6QLAn8BnNC6oEb2BpZk5pKtgsGdwE/p5ihYC1xba10D +TGxXY0BoaQFdD/zFwOJSyiLg0MxcTDcUb97EN/a0od/adzLzXcDy1oWoPQOAJqzIzKcDz42IPwMe +37ieUbEXg8ZlogHZxp2Da4CrI+KqWuvVdI8T1gHXAdcPvr5zGmseB3sDC+nWuT948PVDSylHZObh +dCvkHcZW/Vhs5Lfre5n5p8BXWhei0WEA0Na+nJlfAZ49mJDn2bhq5P3ZG3gk8MjM3DocTLaBLhCs +A26IiOtqreuAGwav3wDcQjeaYQNdZ6xxmQlxD7r+GPsP/tyXrkE/FFhYSlmYmYfQrRq5kG5I3f7b +OpAN/C6pwFcz80PcN7RPupcBQNuSdCeOrwKPLKX8Tma+mknPTbXL9h9sR0HXkN1PWJiwmS4Q3ALc +TBcKNkbEvSGh1roRuH3w/bcP/s2EjcBdk/Zv5r5hkTk4xkRtE8UUYL9J/2ZPJt1Gp5u+eZ/B1/uU +UuYxaNwzc+LreYNj7Dv4evb9vUkb9aG7OSI+Xmv9W+BHrYvR6DIAaEeuqLX+HvDHwMsj4n8Aj25c +U1/MHmxbTCM7ucHciRAxpWy8R8oVmfl3wGmZuWGH363e89audtZG4PTM/KXMfDbwL3TPvyW1sxn4 +f5n5zMw8EngP993Zke6XdwC0qxI4OzPPprvN+/zB0r7P4L7byJKmTgX+IzM/C3wKuLFxPZqhDAB6 +IG4GzsjMM4CHAC+KiN+kW/pU0nBdmplnAp8Afty6GM18BgANy0+BD2bmB4HHlVJOzczfoJuIRdLu +uTYiPlNr/STdCpjS0BgANBUurLVeCPw+sBSYWMVvSduypBlhTUScVWv9LN2MfS5opSlhANBUW0U3 +7fA76ZZQfX5EPJdukRV//6RuvodvD+bf+AJwmaMrNB08AWs6XUr3HPPdwFzgxFLKyZn5XLo+BFJf +rIuIb9Zaz6Kblnd964LUPwYAtbIJWF5rXU43euDRwNMj4gTgaXQzwknj4gbgvMw8D/gm8IP0Ml+N +GQA0ChK4BLgkM/9m8Npi4KRSyvGZeQLdvO/STHE93fz7K4Bz6Drw2eBrpBgANKrWAKfXWk8f7C8G +ji+lHDeYiOjwdqVJv+C6iPhWrfV8YAU2+JoBDACaKdYAa2qtZwz2FwHLgGURsWzw9aGtilOvrAdW +R8TKWutKYCVdR9fGZUm7xgCgmerawbZ80onXUKBh22ZjD66DoJnPAKBxcn+h4JhSypLMPAo4EpjT +pkSNqNuAyyLi8lrrauBiusb+WrCx13gyAGjc3RsKat1iPpVFdBMTLS6lLM3MJXT9DB6GaxqMs/V0 +E+2srrWuAlbTXdFfBVQbevWJAUB9NREM2CoYLACOAo4upTwSODwzD6PrdHgoMGua69SuuQdYC1wd +EVcD19Rar6Cbg+IyBuPtbeglA4C0tfXAfwD/sVUwmLCA7k7BYrq7B4uAQzNzMfAIuhUSNXU20wW3 +NRGxFri21rqGQSdR4CfAXWAjL+2IAUDaNevpng2vhF+4ewBwAHAI3URGBw/+PLCUsjAz792f9Gff +Hzck3XK26yb+jIjra63rJr1+/eDP64Cb7v2HNvDSA2IAkIbrJiY1UhO2czdhFl0ImAgEB9BNkTwH +2K+UMn+wPxfYPzPnTdpfMOnreUN/FztnI92MjpvogtEmYFNEbAQ2TOzXWm+lWzp64nt/zqQGn259 ++3vZsEvTwwAgtXMP3dXt9dv6y+2EhvuzN1uObth6fy+6wDBhz8Gfd016bRNw56T924A77mf/F9iA +SzODAUAaH3ewg8ZZkiaU1gVIkqTpZwCQJKmHDACSJPWQAUCSpB4yAEiS1EMGAEmSesgAIElSDxkA +JEnqIQOAJEk9ZACQJKmHDACSJPWQAUCSpB4yAEiS1EMGAEmSesgAIElSDxkAJEnqIQOAJEk9ZACQ +JKmHDACSJPWQAUCSpB4yAEiS1EMGAEmSesgAMLruGuKx5g3xWJLG3/whHmuY5zINkQFgdG0a1oEy +84hhHUvS+MvMhw3xcBuHeCwNkQFgRNVaNwzxcE8AFgzxeJLG14OAxw/rYLXW9cM6lobLADC6rhzi +sfYEXjnE40kaX68C9hji8dYM8VgaIgPA6PrRMA8WEX8EzB3mMSWNnXkR8YdDPuaPh3w8DYkBYHRd +Amwe4vEeXEp59xCPJ2nMlFLeCxw6xEPeDqwa4vGkfoiI8yIih7jdA7yg9fuSNJJeFBF1yOecb7Z+ +U9o+7wCMsMz8xpAPWSLik8CyIR9X0sz2xIg4A4hhHnQKzmFSbxw55DQ+sa2nGxkgSY+LiJum4lwD +PKr1m5NmrIi4cIpCwM+Bp7Z+f5KaenpErJ+ic8zK1m9O989HACMuMz82RYdeEBHnAL85RceXNNp+ +KyK+Buw/FQefwnOX1Bt7R8S1U5TQMyKylHIGMKf1G5U0LWaXUj44leeUiLgOmN36jUrj4C1T/GHN +iLgYeEzrNyppSj02Ii6Z6vMJ8Eet36g0LvaOiB9OQwi4czBXwN6t37CkoZoDvDMi7pyG88iP8epf +GqoXTMMHd2K7BPiV1m9Y0lC8MCJ+Ml3nD+DXWr9haexExBenMQRkKeVM4IjW71vSblkcEcun85wR +EV9o/aalcXVgRPxsmj/Qdw46CS5u/eYl7ZTDBp38Nk/zueKnwIGt37w0zk6IiLun+YOdEXFHKeU0 +4CGtfwCStukhg4b/9gbnh3uAZ7T+AUh98LYGH/CJ7fZSygeBRa1/CJKAbqGvv2lwxX/vBry59Q9B +6o1Syt82DAETdwTOBE5q/bOQempZKeW0Rlf8926llP/T+gch9c0eEfHlxiFgYrsAeDUO/ZGm2j50 +M/itHIHPfUbEl4A9Wv9QpD6aExFfG4GTwMS2YfB44GGtfzDSmHkw3Tj+dSPwOZ/YvkIXSCQ1sldE +fG4ETgaTt3siYgXwRuwVLO2u/YBXRjeU764R+FxP3s7CO37SSNizlPKZETgpbGvbHBH/ArwQTxjS +jswGXjQI9c069d3fVkr5J2DP1j8oSfcppZS/iIja+gRxP9v6UsrfAScCs1r/wKQRMQs4sZTydxGx +YQQ+p9vbainlz4Bo/QPTcPg/cvy8JCL+gdFf3e+miPi3WutZwBeBDa0LkqbRXLpG/+TMPAU4tHVB +O7A5M18DfLJ1IRoeA8B4WhYRn2XmdMa7C/hWZn4JWA5c0bgeaSo8CjglIp4HHM/MuY2+JjNfDHy/ +dSEaLgPA+Nq3lPI3mfnK1oXshh9GxFm11q8C3wY2tS5I2g1zgeNKKc/JzJOBR7YuaFdFxMdrrW8E +bm1di4bPADD+XhQRpwEHtC5kN90NXBwR59Razwe+hY8LNJrmAk8Gjo+I44CnMnOX1t6Qmb8DfLp1 +IZo6BoB+eEhEfAQ4pXUhQ3A38L2IOK/Wei6wAq9O1MZ84PhSygmZeQLweMZjUpx/HTT+P2tdiKaW +AaBfnh8RHwIOa13IEN0NXBQR36u1XgBcAKwevC4Nyx7AUuDxpZRlmflE4BjGo8GfcHVm/g+6fjjq +AQNA/8wB3hwRb2Xm3p7ckbuAKyJiZa11Jd1dgouAe9qWpRliFnAU3Vz7yzJzGXAsoz+yZnfdFREf +rbW+A9jYuhhNHwNAfx0dEX8B/Dr9+D3YCHx/EApW090lWA2sb1uWGnsQcDSwpJSyNDMfR9fYz2tb +1rRI4POZ+Q7gstbFaPr14cSv+/eEiPgr+ruW93pgdUSsGgSDVcCawabxsYDuFv6SUsrizFwKLKEb +KtvH8+D5mfk2uk616qk+/uJr254ZEe+i68gkuIkuGFxWa70KuBq4arCtBWqzyrQthW4ynSMmtlLK +EZl5JF1DP1NHwQzb9zLz7cA5rQtRewYATRbAsyLiLcCvtC5mhN0JXANcHRFX1Vonh4OrgGuxv8Gw +zaJbEe9wtmzgDx+8dhiwV7vyRt43MvO9wNmtC9HoMABoex5bSvmDzHw5ztu/OzbTBYG1wPqIuLbW +upbukcO9r9MNterrvAaz6Z7BL6C7el8ELCilHAosyszJry9kvHrcT4cKfDkz/xL4TutiNHoMANqR +Rw6CwH+jHx2jWtgErKN77LAR2BgRG4GbgVtqrbdOvE4XGjZO2m6mCxu3b3W8O4dc4150E91M2Ieu +Ad+P7vdiYlsw+HN+KWUesC+wX2ZO/p4D6Br0ycfT8NwaEZ+stb4f+FHrYjS6DADaWfOBV0TE6+nG +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,iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAABmJLR0QA/wD/AP+gvaeTAAAgAElE +QVR4nOy9a7AkyXXf969HP+69s/PYneUuAO6CFGg+TVs0CYoQRD8UdMghhj8wFIA/2FaQYRsEwCds +EEsw7Ij54ABpkhGmJQdFrymHRVmUQ7AVlmiSFuWgEHqQBiGQFAmABLUkQljMvmdm78zc2/XM9Ie+ +dae6OqvqZD26qrr/v4mO252VmZVd3VP/PidPngQIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGE +EEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBC +CCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh +hBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQ +QgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghpCucoQcg5T3veY/31V/91U+naboYeixk +P/A8L5zNZndu3boVDD0WQsjhMVoBfu65564BeC+A7wLwLQBuYsTjJZPmLoBPAviE53m/8rGPfewz +Qw+IELL/jE7Qbt26tVytVh8F8F8CuDL0eMhB8jta658/Pj7+X2gdE0L6YlQC/OEPf/jf8Dzvfwfw +dUOPhRDHcf6V1vq/Pjo6+sVbt26pocdDCNkvRiPAP/qjP/odWuu/C+CxocdCSIHf0Fr/Rz/5kz/5 +paEHQgjZH0YhwB/96EffrZT6fwEshx4LISW86rruX/rxH//xfzb0QAgh+8HgAvxjP/ZjT6Vp+jsA +3jL0WAipIXAc57t+4id+4v8ZeiCEkOnjDj2ANE1/GhRfMiK01mWPpVLq4x/5yEe+ZegxEkKmz6AW +8HPPPfdvAvhtjOCHANl/tNZddfWK7/t/+mMf+9irXXVICDk8hha+HxrBGMgeUGG1Xj465OkkSX6m +yw4JIYfHYBbw+973vtmNGzdeBXBD2sbzPCwWC3ieB9ftTre11vA8r7P+AMBxnE771FrDdV04Trcf +Wdfv23Xd1p9NXiz7+GwAQCmF09NT3L9/v5E463Wjb/+pn/opBmURQhrhD3Xi69evfzOE4nt8fIxv +/uZvxtNPP435fG51w6yrazou6b9NHen421ptxfZdWYFt31fXtDlvFEV48cUX8YUvfAFnZ2c2/TkA +fhrAuxqfnBBy0Azm/nVd92sl9Xzfx7ve9S48++yzVuJb53YsOy4R7KZ1pK7QNi7Tosu1KxesqZ8e +XbyV5+/yvPP5HO94xzvw7ne/G1/xFV9ha21/23PPPfdnWw2AEHKwDDn/+oSk0pNPPoknn3wSQHeW +YxNxnIrwdtFXsY8y0e2LnudvjRwdHeHrv/7r8TVf8zVYLOT7fSil/tMeh0UI2WMGc0FrrUV3uatX +r8J13U7cwn25m+uEu23/0nZdCFXTa9Tl+fqm7Jy+7+PZZ59FkiR44YUXkKappLv/oNPBEUIOhsEs +YMdxQmE9UX99iK/U6m3TtmEAUKfW7q4s3V1YtlWuask55/M5nnnmmUuvi+A8X/Hcc8892+V7IIQc +BoMJsFJKJMBtLUjTTbeNsNb1sSvhbStiuxDdvsS2r/ngjJOTEzzzzDOXnpe68yRJ8q2dnJgQclAM +GYQl2uYtSZLSY5J5W0mZbZ9jEN6m9Cm6XYthHyIrsZC11njyySdxcnIi6tNxHAowIcSaIeeARQJc +Ng9nK7xN29TVaWuhS9u0Fd2u+qrre8h+unxfvu/jLW95C+7fvy+p/mc6OzEh5GAYTIAdxwklN0yT +AEuEVGuN8/NzBEGAJElaWcq2gt5V2zps3lNXPxT6HneX7fP1XNeF53lYLpc4Pj7GfD6vbf/000/j +85//vORU33Lr1i3/1q1b5e4aQggpMCkLWDpvG8cxXnvttQ3htbFe6wR0F8Lb1Fq3Fd4+Lf8mdW3b +2fZ9enoKAFgul7h582alm/natWs4Pj7G+fl53XmPHz58+PUAfs9qMISQg2awOWBbAZbOy2qt8dpr +ryGOY2vxrZtrlcz/2s4Rl83J1r3PNv3YHG8yX9xkzrZurrfr+eAgCPClL30Jr7/+emXfTzzxhOi8 +WmvOAxNCrBi9ACulrCy+8/NzxHF8ecxGfG3bSNtJLeaq9pJjdcLU5HgT0ZVQJmhdCm1ZX/nHnTt3 +8Prrr5f2cfPmTem5KMCEECsGnQOW1KuLgi4ShmHpsbqyJsIrrdNVW9Mxm7pt++u6Xhsrtk3bPHfv +3sViscDVq1e3jt24cQOO49Sei5HQhBBbhlwHHAD1VkpmzeaRuChNbcrKbNs0tXrbtDUds6lbdlxq +PRfrNLWIm1q2XVnFZX2+9tprxoC/xWKBo6MjSXf/+oc//GHZuiVCCMGAAjybzQLJTbR4U7SxUrNj +ZSJQ1V9TwR6z8JrEy1aoJfVM/UtFs+yHmC11P+yKfSZJgnv37m21930fV65ckfTvpWn6b1kPlBBy +sAwmwFEUiVzQ+TlgifjmU1fW1W9q9ZpoKrx1fUos1DqhqhLFqvpNrNy2gmuDVFzr6maPe/fuGdvf +uHFDOk66oQkhYgabA14sFkHV/G5GWRR02U0wE+A6C7bsmE0baXkfbeuO2fTTto6NcDa1Zvvot0iS +JDg/P8fx8fFG+fXr10XtHcd5Z+tBEEIOhsEEOE3TyzngmnpQSsF1HxnrNsJTfG1j9dq2kbRr29b2 +mO216qLPpnUl9bsQ2ipOT0+35nyzHbmUUnXNaQETQsQM5oI+OjoSZcIyuTir6hZ3T6pyAVe5KyXH +y/qqc4M2aWt7rK2LuViniVu6rQta4lqWIHE/Z4+HDx9utZ/NZltWcQlf+UM/9ENPNRokIeTgGMwC +vnXrVvgjP/IjGkDlfoNFESgeS9N0o04URQiCYKP+rqzeNhZvk/Z1x2zrNrV0uxhDW8u2K8s4DEM8 +fPhwI/DK8zxcvXr1UpyrzuV53jsB/N+dDIYQstcMJsAANIAQwLKyktZbyTiUUgjD8FJ88wRBgAcP +HlSfuMbqtW1j266qXFpH6hWw6aersTWpJ6VPF3TW90svvYRnnnkG8/kcnucBWM8D3759W9IHBZgQ +ImJIAQYEAgxgY+5NKYXValXqkiy6oPN0ZfVOQXj7sHZ3LbpD9XN6eoq3ve1tCIIA8/kcvu+LA7HA +eWBCiJChBTjQWl+rq5QkCRaLBYC1i7BqLrVMgHdl9Y5ZePsS3S6Ecpcu6Lq6URTh7OwMx8fHiKII +nufhypUrNoFYDtYeHkIIKWWwICwA0Bb5oC/qG93OeUE2CbCt+FYFBJUdt+nLpo7kvLbH6saUD0pq +U6eKfHtb8TQ9JHVszpXtmpR952az2eXOSTX9P/6hD33oHeI3RAg5WAYVYKxd0LVkAmzamKH4upiI +o05IizS1erueS+1aeOsEqG/RbSKCTYW2C4oC7DgOrl69Ku2fbmhCSC1DC7DVjkhlS4zyZOuF66ze +KmE2lUnbVJXbtu1SeG3HUTzeVnRt6pZZ7F0IbZ11nD2CIMBqtQLw6DslnQfW60AsQgipZNA5YK11 +UBU0lZFlzHIc53JnmrIbcNnONX1YvZIyaZ2689m0b9qH9HgX7dqMr8txVHF6eorlcnkpwDdu3JA2 +/TOdDIAQstcMPQccSqyRfODLcrkUi1BW1lR8ba3eKvqyeMusRZs+pMer2kjfv8S6bXLutpaxiXv3 +7mE2m13+qDs5OblcllQzrm+6devWvLOBEEL2kkEtYMdxRC7ofD5o13WxXC4vo6EzsuemzRjGaPWO +xeJt6lpuWq/P8/XRV/7HXxaIlc0PV7C8e/fuNwL4tPUACSEHw+DLkCSVijsieZ6Ho6OjyzzRxZtq +3kpuYvWa6KpNsdy2bZNzSI535ZbuQnTbCG4X5/I8D77vw/M8PHjwAPP5I2P22rVrEgGG67rfCgow +IaSCwS1gyQ3TtCOS4zjw/e3he553mbdXIgZtrV4bwWkjvFLBtBHSLkS3reA2Fdu2P1Ck3L9/H088 +8cTl6xs3buCLX/yi5LzvBPDXWp2cELLXDG0Bi5Yhmdb+mtBal25H2LXLuYmlbNvOVN5EeLu2dnct +ul1Z500IggBxHGM2mwFY74wkhEuRCCGVDBqEpZQSBWFlFnAVVSJXJ6Sm+lVlZf01FXmpxdykvaSP +/LE6ITf1JxFIad26+qbvR1Mk3z2tNU5PTy+fn5ycGD0vhr6/9oMf/OCV2oqEkINlEuuA6wQ4L4yS +tcJ1QlpVZtOmSuTL2tm0tWkvFemy49L+ytpJ65YJfBOxrRNWKffv3798nk1xCPr2PM/7NqsBE0IO +ikEFuEkUdNmNNH9DrXJDNxXfOqtY2kZa3pXwVtWTHpeIlo24SQVXSluBrSMIApyfn1/2KV0P7DjO +d3U2CELI3jG4C1pYr/bmX1dmK6RNxbquzRiEt4wyQayrv0vB7VJo66zY/OPevXuX7SwScnzPD//w +D39F4wESQvaa0VvAWlfPAZuEs8wNPbTVayobWnjbWLtVdCG4bcW2TlRt6r/55pt4+PAhtNY2gVhH +aZr+3Hve85767B2EkINj6ExYgeQmmaWivGhTehPNXjdNxiGxYE1ldW3q+qoSx7LyroRXUjd/3LZO +G8GVIhHYuu+Z5Hwvv/wylFI4OTnZWBtcNSYAf+Hpp5/+eWbGIoQUGVyAJfXy2xFW9HX5vJgvukpo +Te1txLesv6o2knZN29ocqxOfvkW3ieA2FdouiOMYL774IgDgySeftBHz775z586vf//3f/9XdjIQ +QsheMHQijlbrgLVe54kuzhEHQYAoihoJqU39Muos2iYWr+Tc0mNNx191XGrh2tD0vTahrj/P8+B5 +Hs7OzvDyyy/jy77sy3D79m2bcbzbcZw/+MEf/MFf1Fr/jTAMf+P555+PWw+cEDJZhhbg2kxYWusN +F3RGFEWlIrtarS63kiv2JSmT1LcR0SbWdd3YmrRvI2i7Et0x9wEA8/kcWq/XA1+9elWUljLHQmv9 +PQC+Z7FYrH7gB37gMwBqO+j6x8auyefTJiJCAP/KcZzPaK3/4c/+7M++MPSASD8Mvh2h5OZStIAz +8TX0V3Uucd26+k0s5TZWr3SMZeVdCu8uRLdN+77FKoqiy6DA69ev4+HDh6JEMQaO9B7sGyy53pIt +R7tm6j9a8lMZH/jABz4L4Geeeuqp//XWrVvb1giZLEMn4hC5oPMWcJqmteKb7d+aldsK0i7Et2xu +0mbutK68qi/Jsby1XzeuNvOtTeZrhXOvjcdQ9UiSBEEQwHVd3Lx5s3F/Y0Z6LTguexqM/xsA/M+v +vvrq733f933fvz3AkElPDL0O2CoIC9jOimX6wpYl4igrqzpWFKG6c5uES3qesQivdExNb3i2N8su +brBNbthV9bPpj6OjI9y4cWMyAjBmARvruKTs4Np+nVLq19///vf/V12NmQzLoALsuq51JqzMHV0m +FlrryyjoIjbiWxRSSV/F8ZiO246rqp3pnFXnlQivjSjZ0EZwm5yjqo8ubpT5H4XXrl3DtWvXxOPs +g6kL65jFdWTj9xzH+ekPfOADH9vVCUl/DJ2Io9YFrfXa5Zd9wU1JNtoKmOkGbXouKau64duMq+pc +xbZN+i/eOOrG0qfoNrmRtRHZLih+Dx9//PGNbQu7ZEQ3f+txjVlYgfFeWwEf/eAHP/iRoQdB2jG4 +C1ry5c/PAXveo6RCZf85inPAZXQhpEURk56j6Y+GroTXpq7NTaiJ6Nr0KRXbttR9Lz3P2yp77LHH +8PTTT298R9ucY+ziOmbGfG0lSMaulPrx97///X9+6LGS5kwiCCvv7vN9//LmV0bVHHBGnfja1peI +dd2Y6tp1Jbx1N6A+RNfmxte32La9Mbuui6OjI+Ox5XKJt73tbZfpKsd28z8EYTqg8bsAnv/Qhz5k +/jKS0TPoMqQkSQKJtZCfAwaAxWKRtd8ozyibA84w3dQlxyT1bcps21UJpqRP2x8kVTR9PzZ129xI ++7oJZ9sRVi2tcV0Xjz/+OB577DGcnp7i7Oys97WwYxYdCVMfPzDYe3jH+fn5+wD8D0OcnLRjUAH2 +fV+0Djg/BwysBXa5XCJN061jwFqgl8ul6KZua/XWHbe1rKXlfbStO2Y63uSaSGnatusbn6k/x3Hg +eR5836/9gZfh+z6eeOIJPP744zg/P8dqtUIQBMbEMrbjmRIcf784jvP9AP4KgHEPlGwxqACHYRhI +ktpnqSaLVofrusak+MfHxwiCzQBrW2Hssr5NG0m7tm1tj3Ulul1YuW1vhl2IfJM+jo+PcXx8DACX +6VPTNC21jJsmr9h10ouy80nGYTvWqvpNj9XVado2XyZ9n1m9MAzx6quvGrP55cl9D7/q/e9//5/9 +uZ/7uX8mOhEZDYMKcJqmodSVqZTaCK4qqycttxHTti7nrtpIy8ckvLZ9NjlHm3ZDWDdXrlyp3U3J +BtsbfF/993kOG0GTiGkb8bcR67p2plUdq9UKN2/exBe+8AW88cYbovEppf4dABTgiTGoAL/1rW8N +7t69W1uvbDOGDNMccNmxfFnb+d5dWr27Et6hRbeJIPbpFu+DIAjw+OOP421vextms9mgY+nTYh6r +4Hdlnfd1bqUUvvjFL8JxHARBgIcPH0q6/kbrwZDBGTQK+tatWwrAdl5JAzYWYVkUtNa6kfjm20nq +S46XjakPV7XkWFU9m+PF/iTiKK1rql+8BlXHm1LWb9NHmqZ48cUX8alPfQp/8id/gjAMext7k/fW +V9+27bqua9OmqzpN2riui7e//e2Yz+d4+umnRf26rvus1UDIKBjUAr4gBFDrjzPNlZV9kU1BMmXC +W1fWV/26NtJy27bS9nXHTMdtbppSmry/tn3vijRNcfv2bbz00kt4/PHH8fTTT+P69eu1HhwTXVqy +VT9qu+pX0p9Nfdu+pW2yOlV9SurYtnEcB1evXsW9e/ek/R2LT05GwxgEOADwmOlA/j9IkiQb82ZN +buIScawSp7r2tmJt00bSrqpc2r7umOm41HKV0IfgDi20dWitcefOHdy5cwez2Qw3b97EE088gWvX +rjUSkyJdi2cXfe5CjLsURKkQ216Xqjau61bGvRQ+E64FniCDC7DWWpwPWnrjN1kQfYqvjWi0aWPb +zqa97bGuRLdLwe1DaHct3lEU4aWXXsJLL70E3/dx9epVXL9+HdevX8fJyUmjPiX/T9r0OZQYj1GI +uz6ndMkbKMCTZHABxtoCrsVGAIpzwG3FtMv6Nm3atJO0bXLM1jqW1rEVujG4oLsW5+INOEkS3L17 +F1mgouu6WC6XOD4+vvzr+z5838dsNrt8XrdaoGr8TcS0S+vYRsD6FuI2bucuzuk4jvizBAV4koxB +gK3TUdbd+PK/GrsW3zYu511ZvV0L7xhEt6nY7eIcXVF3/jRNcXZ2hrOzs8uyNkuQfL/+v38mAhIh +cF13Kw+2xL1at4ZX2qfneY3HWda353miJUima1TWLjt33fsOw9BGwCnAE2QMAiyygMvSTmZJDfIC +HUXRViIOU9t8mY1Qd1G/rKxqTNJ2VXVs+m0rvG0ErQ8X9NACu2vqbt6WN3hxv23adrUeWLpWt881 +vcXyujae5238iDD9+KiAAjxBRi3A+Rtmlg0rfywIgss80fnyKIo2rIRiX8UyWzGVHGtjKTcZQ9Nx +msqbWs1lx7uaL7ahT7HdhZCPcX1um75sBEtyvI2Qtj1/EyG2abNcLrFcLm0TD3nve9/7Zs8//3xc +2YiMijEIsCgbVj5/rtYa5+fnpcJhyi5T9rpP8e1KeOvG0GSMpvIuhXeXojuG+eCusRlPk8jbLvox +9VU3J5qv02Yetdhf3f/9qj5sz58vN9WpKzPNL+fLMsPiypUrcBwHjuOINvNIkmQJgAI8IQYXYC2M +gs7/hwuCoPSGXycETed768ZUfD0Gq7etq7ru+BCiu2u39hSoel9NonGbtDX1IRXjujbS4xIhrjrW +Vogl/VZd43z9OI4RRRHm8zk8zxMJ8Hw+PwLwoLYiGQ2DCzAs5oCzL2hxN5myL3Vf4tuF1VvXpm4M +TdpJhbdra3fXojl193OeLpf42PbbVpAl7ZuKcVMhruqjjRDXib9Nm+xYHMeYz+fi6x7HMeeBJ8YY +BFgUBZ19UYu/BE03GNd1Ry2+ba3eIYR3zKK7jy7oDOm4unBDS5fzdHHOtmIstWibWL5NhLhrt7TW ++tLQKJsLLn4enudRgCfG4AKstQ4krqrsy1jlzqk4R2n9NuLbxuXcpbtZKshNLO1dCK9NG7qgzXTh +hrYV5TaCbGvptrFos2O2gmuyXOvaSdzSUms4MySKPyTKSNOUAjwxBhdgx3EC4Zcrqw/XdbeinzNM +vyTzf4vldWVlx6rEdypWr/T9Dim6fQv6GPqV0MYVXTburt3QdaJa165NsJW0H1shrrOGszp1gZ9N +rOFsnbbFD6ilqCIZDYMLsBYGYeVdz4vFAufn51n7rbrFX81txLcLK7aqflW5pM+q8rEJb1+i21YY +uxDWLvqwsTZt20v77MoN3cQ6trGKq+oOIcR1VrS0z6y+67qXue+la4Fd16UFPDEGF2BYZMLKvrCu +62KxWCCKImuRGJP4TlF4hxbdXbigh7J0m5xXOiXT1A1tI8hdWscSgc2O1Qlp1bEmwVNV70Fq3Vad +x/M8nJyclNYvQ2tNAZ4Ygwuw1jq0mQPOyn3fh+d5SNPUuFHD8fFxbbR0UzeyRBjrBK2urCvBrmvX +lfBKrp/N8aZ1pfWHEtldIrlxN3FtS9s0OX9VG+mxJn3UjbWunel4XZnpvc9mM8xmMwCPhLnONZ9r +TwGeGGMQYCsXdPFXbZa+LdcfAODo6GhjnriN+PYp1HX9l5VJ2rVta3usK9HtUnD7Ftq++m8z59u2 +f5tzdyXGNkJcdVzaj6S8C1GtK5N4GKRBWLSAp8fgAuw4TmfbEZa5nMrqtbVkhxLffRTeLizirsRw +DNaxzRiaiHWJBWU81kUkdJ0LusytXFe/j8jnfFvb+eG646Zx1tW32N2KQVgTY3ABrnJB57FxJwPl +N5Mm4msrjH3Vr2sjLe9CeHcpul0L7hgEtkuq3k+TaORi26aC3LUY7yryOStvE6hVJt5V5yk7JhVg +BmFNj8EFWGoBV21HWPZrflfi29RKlvYvadOmnU2fbYW3jTA3Ec6+xHZXIt7WFV02TttAqHybrqxe +SR2TiJrq9iHE0nZdRD7nMUVFS9B0QU+OUQiwRITKtiO0taL6Et+pWr1dCG9fomsrcl2I4i4Eu41V +WoatUJf9aLVpYxLkLsS4jVUsFekuhbhva9hkAZd8LyjAE2NwAU7TVOSCrpoDrruZlNWzEcguxLRp +fZs2knY25X0Kb1vRbSqWuzjHLvqssqLK6lVhK8omQZZYx1Krt+54U/d0G8s2385GvE3vR1pfGoQF +gHPAE2NwAbYJwspTZxUWf50PKb5NhLSJ1TsG4e1TdJsIVxfW+VipG3uZy7h43OYctvO/XYpt1TGp +5VvXvk4gi2MuO27rlq6qL50DBi3gyTEKAZbcBE1Liup+9e9afMdg9fYlvF1bu5LP3FYc2/ww6JKm +52o73ysdR5UwN3VDV9XrQoxtjkkEt6zcVoi7cktXCbPF94ICPDEGF+A0TQPJL7yiC7qpcLQRVNvz +NxXfIazeJsI7tOg2/bHQtv++aHK+JqJdJby2olwnqmV1qizbuuO2VnFTIe5qfriNNWxqX4bDRByT +Y3AB9n0/NG02XbwRlCXV0FpDKbUVJR3HMYJg07vdhfh2IaZd1K8qt2nXt/B2Kbp9CO6uRXbXtLGq +y9paCILVcdv6knb5Y03fj+l4XV/SNlmZ67pwXXcjqVD+WBHT91YpRQGeGIMLcJIkpdsRFuoB2BSq +OI5L80EHQXC5YUO+XZ6+xLeun7IyW7FuMqa6Ok2F19babSO6YxTNrsfUtTu6C2yEyLaejRg3OSYZ +Z937sxVVaZti/cVigeVyefmaQVj7y+AC7LqueA44Xy8MQ8RxXFq/LkK0T/HdhdXbp1Xc5lgXwjsW +0R1S6G3OvSuxLo5JGvVcbCuZ/+3CBS1tU1VH4mKua1MXpFWsHwQBlFI4OTmhC3rPGVyAtdai3ZDy +LugkSbbEt+xGsC/iO4TVKxXePkR3V+Jnc56xWN51Ubl19bvCJKp1QiupYxI9U13JsaZC3NX8sK1w +Z6+jKMJsNsN8PmcU9B4zuAB7nhcUlxiZyLYjdBxnKy2liTK3TVvxtbUUq9p3IdZ1Y2rSrgvhHZvo +tvmBMjYk46zzABXrdD2mOvEstuvLKm4qxHXt8uMqHu/KGo6iiAK85wwuwPfv3w9OTk62yotf9LwA +l60JzlP1n3QX4jsGq3eMwrsL0e3CIp86EtGV/r9pe36JGDexiocW4iZu6QxJ/Wzare565aAAT4zB +Bfgd73hH+PLLL9fWywS4+MWXMlXx7dLqHUp4m/x4sKGtJd72HEPRRCzrRLfOwmtCUzHuwj3dpxDb +Wrf5Mkn9fES18PvHIKyJIfZt9MWtW7cSALU+Za315VKjOpeM1pvZY/ZJfLMfIVXjsTlPlSjnxyGp +V3cse92FmJn6ypc1OY+pfVfj7YOq8dqMuapt19eh2FdV3zbH6urZlNeNv6zM1GdVWdmxDN/3jUJd +AS3giTG4BXxBAOBKXaVMgOfzOZIkQdX64WJQyBDiW7yR1fVbVb9uLLZtJOU2771JHzY0uR42ffWF +9Fx9BEqVnVtyrmLbsqDGNuMu+7/ahVXcxvKtOpekTdlxqTWstYbneVgsFpXjMEABnhhjEeAQFgIM +AEdHR1itVqJtCrsW38pfwXDwIJ7jfjyH0q5Vv3XHbNo0sf7a1OlD1LqyuLpgrFZwV8LdRT99/Iio +6lNyPtsxmeo3eV824y6+9jwP8/kcr957VH7P/fLac2qtT975n/+t91kOdUC5EYcAACAASURBVJIo +V4eA88V5OvsXv/nX33t36PE0ZSwCvLUhg+mGl80DZxwdHSFNU2Oayvl8jsVi0Zn4ltXLl710fozf +vfM4wtTbqkMIIY3xvlZSywX0/9T3UMaAowFAI3Yj9S3/xf/2m452fuHe0Y2/8cJf/YuiZa1jYRQC +rLUW7YiUJMmWAHqetzUnrLXG0dERjo6OtspNr7sQ33957wi/9VqtEU8IIaQ7XADv1o5+9/Xgzke+ ++X2/8B9/+vm//MmhByVl8CCsC6yTcWQ0dRt3Kb5nsYvffnV7KRUhhJBd4bzD0e4n3vmf/eJ/OPRI +pIxFgEUWsE3QkykKuvi6jXs6X3b7wQKJGl/uXkIIOTCW2lX/x7d+7y++a+iBSJiUAFdlwNqV5Ws6 +z92Ac76EEDIS5qlSP//v3vpHo5hirWIsArzhgi6uk8se+WQcpqUu+WOmxet9iK/WGkE6lstICCHE +Ab7+wUu33zv0OOoYhXJorQOTsBaR5IyuOMfG32K5bb18WRCP4jISQgi5wAH+0tBjqGMsyiFyQVcl +3igKZN+ZsPJ1QzWWy0gIIQQAoPFtQw+hjrH4yEUCXFzvm1ElmH2LLwCECQWYEEJGxuNDD6COsQjw +1hywiSoLuPhasvF28bVNlHX2PFFALIiAdgB89Z96CjevbuZLj1OFoZMsRUlz134XaA0k6fZnu0uU +1kjSYT+IVCkoNewYxvB9JKSKJE7x+p37kqpR32NpyygEWJqIo2wbQqXU5SN/LAiCjXrFdvnnTSxf +ADhPZJdwNvPxrd/4drzjaa4XJqSKeOAfQlqvfwwNiVLrH4VDkio9+BhM/PHtU/zyJz5TW08DX9rB +cFoxCgGGhQs6Q+v1fplhGBotY6UUzs/PrYRVUqd47DSS7QA2n3uY+VwrTEgdM28M/0+4tHCs/LHw +R4EDvNrzUFozCgHWWoeShOd5AU6SRGThSsoF4ys9T6Rl/1F938fc354r9j0XPeSwJ4SQvUEpjfRi +euY8EKZ7dvBaj0PqhFEIsOM44ijobD2wRHzza4FtE3UUX5eVR8KNF+YzH3NvW4BdBxRgQggpQetN +d/zZqnb7eACAo2gBiyhawGVimVnAZeuBi+3K9jAtq98kOCtU8jngmcECJoQQUo7SeiMw8Gwli63S +Li1gKYHEPZyloixuS5inzAKuqlf1uq5eJMyCNZt5Rhc0rV9CCCknLawMeLiSuaAdPX4BHotJJrqi +mfCa5ott5ne7Et/1HLDsN8zcYAFTfAkhpJxUbVq/AHB2LrSAoUfvgh6LAFtlwjLt/5v/myER6rZr +gkPhHPDRcg6XgksIIWKK1m+iNFZBLGqrtEMLWIjVMiTXdTGbzQCUC2ZWL0/X4qu1Riy0gE+OZltl +DqjIhBBiwmT9JolGHMuCsDw1fgEexRyw4zhBlZBmJElyeXw+n68FMI5L2/SZDesyClq4DOnkaG4Y +4HZRnGqcnsl+4XWFN/C6S8dx4A/sj3ccwBvYReG6zuDTEv4IxkCI1kBqSMgSpSmiim1p84RxOnoX +9CgEWGsdSuZwi9HP8/kcvu8jTdNL93S+n8VicdnGlP3KMA7R63x5LIyCPlmaLOBtHq4S/OFtUZo1 +QvYSzx3WMeeO5MeYO/AvIdfFzsZw9djHszePL18rpWG6SwdhCuOBbc5+72/+5bOOhtcboxBgNMyE +BazdzJmruSiYR0dHxvKuNmuIlYNU139BXdfBciG71PHAOZEJGZqh00CmAOJh06MfHIvZI0+i1uu5 +XhOrUOwdHL37GZjoHLDEWs6ipbtIRVkm0oFwF6RZSRIO04/LKKEAE0IOi3z60WLgVZ5zYQDWFNJQ +AiOxgLXWVsuQLtoU+9iqX5wDbiPGpvJQugbYL0vCsa3AQ+/IQwghu8b3sqRJdQIsm//VE7GARyHA +NkFYpjplQlqVXUtyvjqxly5BWifh2BZbk/M6SijAhJDDYnbhIawzQM4D6RpgWsA2iDJhmVJQSt3R +ptdt3dNSC3g+L7GADQo89L64hBCya2a+K9qCUZqGcgpZsICRzAErpUQu6DRNrQS3KhGHdN63qixI +ZBGCs5KdkIwWMAWYEHJgzFwXiSD47qE4D/T41wADI7KAJZWK+/7WLS0qBmG1iXguorVGYOGCnhmC +sEwkDMIihBwYjquhBStKaAH3gHQ7wrwFbJP7uYo27mnpRgxzi40YuAyJEHJIaC3PCvjgXLYRg9Lp +JAR4FBaw7/tBHK/Dy6uEtWwXJJsgrCqr2dZCDoQCfHQ03xJb09dNqeoIQEII2TfiRF9GQVehNbA6 +Fy5Dct3X245rF4xCgJ9//vn4u7/7uxVqLHKtNZRS8Dxvq6wYoJWlqQzDUCSsttmxtNbiOeArS1ka +yohLkAghB0SqNODI7nuJ0ggimQD7yqUFbEkA4LiuUl6AkyRBGIalc8NRFOH8/HyjrFgn/1zids6X +S5chmfJAm1wunP8lhBwSQaxwPJfdR6M4RSqbolPPnvpvfLLVyHbDKOaALxAn4wCAOI4RBEGlaGYu +aKmwSupcijWASMm+OMdHst85jIAmhBwKUaKglC5JUrTNKpQl4YDGvY9//L2TSCY6JgEWR0IrpRCG +a72WuJHzSOZ9Je7oVPvQgsABz3OxnG0LsCkAi2uACSGHgNJAFK/vd6Y0vSbEeaAdTGL+FxifC7pW +RNM0FeWELssFXawjOaepjjQAazYrS0O5TfaFJISQfSaI0stNjWaGLIEmLCzgScz/AiMSYK212ALO +bz9Y0ldtedtsWLGWXbpZ2RIkQ92yHUAIIWRfiFO9sdpDmiNBmgcajjMZC3hMLmhxNixThqsiWuvL +bQqz16Y6Va/L+gXk879z39/Y6eMS405IFGBCyP6iNRAW9nqUegileaAdrSZjAY9JgMUWcH4ZUpGm +QVjSZUgZkZ7VjhW42IrQ3x6vKQo6ZhQ0IWSPCWOF4i1VagGvVrI5YDUhC3g0LmhYbMjgui5msxmy +5B0ZRbeyTS5oE1XCHdmkoRTOccQDb0ROCCF9kSptzPQnvT8+DGRZsBxHU4Btke4JnKWjnM/nUEpd +blF40Yep363nbXdBAoBYeOnWFrAwDSUtYELIHqI1EETm+5vp/mjiodACnkoeaGBEAgyhCzqf8Wq5 +XF4GZJVtVbhYLDZeS9JMSuokMGS3MjCf+WIXCwWYELKPRIkq3WpQHIQlzQPtTCMNJTBBAS6Koed5 +cF0Xvu9vWbuu6+Lo6GijnW0u6LI6yalsDvjoaGa0dotlkr0wCSFkaiSpRlRhXEgF+P65LAjL1dPY +ihAYkQBrrUNJdHOSJNbRy9LtBaV1AHkayitHMqFmHmhCyL6hNRDE5UmpPNeBK9BfrYFzoQs69JLJ +WMCjioLO3L9Vj6o9gYtlpt2QTK+bbNYQKdmlOzZsxGDMgkX3MyFkzwjidCvqOY84SVFinmY0oL7m +zvKOqNMRMCoBllTKfwh1wVNlmbDarglWWh4FfWK0gLcVmHmgCSH7RJxqJDWevc7TUAJ3p5IHGpig +AFdlwCpDMqdbVVZsHykXEoex77lYGNcAb8MALELIvqA0EEb1OihPQynTVI3pREADE5wDzgTYZj1v +xTm3+pAIdJi0zAPNJUiEkD0mn+u5CnESDqEF7GA6a4CBEVnAjuNYrQMGZAFTZfPAtkFX+dc2GzFI +80AzCQchZB+IErWR67kKcRpK6RpgTCcCGhiRBQyLTFiAPKK5LB1lVbu6PqXzv2VrgM0uaEZBE0Km +TX6bQQniNcBCC1hhOlsRAiMTYEmlsoQbZa+l6ShtoqRD4UYMs7l5JySzC5oCTAiZLloDK6HrOUM6 +ByzeiGFCaSiBEQmwbSpKQ3tjRqw4jhFF0Ua9/N9iedmxfNlK9l3AzPdLvmCGjRgYBU0ImTBhrKAs +t1SVRkGfidNQ0gXdCK11YBOElX8dRdHGxgx5sTw/P98Q4OLx4mtJdqyzSDi/YbEXMAWYEDJV4tS8 +0UId8jlgmdUzpZ2QgBEJMIQu6PzmC0opBEFQuTbYrUmz0iQ7lnQjhtI5YEZBE0L2BOmSIxPSOeAH +K+FOSEpRgJvgum4oWeObrxPHcWV2lHwQVr6sqn5dmdYasZJdtpOjuVFsi6RKMw80IWSSSJccmZBa +wGfnMhe059EF3QittdgCvtwQ4cIabromuGmCjkgLN2IwpKE0ESf1dQghZGyEsXzJUREHwMwT7gUs +3AkpiuaTsoBHsw4YDXZDkghu3gUtbVsXJZ1o2e+Wso0YilYx538JIVMjTqp3OarD81yRhzBJFcJI +ZKWkv/P2z00mDzQwIgG2sYAL7Tb+FpGsA7ZJ0KG0g1jXXzYHDo4NAswALELI1EmVRlixy5GEecdp +KB3gDm7dmtTNdDQCrJSyWoaktYbnrdfjli0bMs0BF+vb5oKOlAezjG7i+a45xJ4BWISQCaM1EESq +8bxvhjQAK4xk8796Ykk4gBHNASulrJchzefzrf2Bi+JZ3BGpbRBWAtn873xelobSsAaYAkwImQhB +rDoJGhUvQQrEQTKTCsACRmQBLxaLRi7o5XJ5Oc/bRRBWnUBHwvnfme+Jv2B0QRNCpkAYKyQd3a+6 +3oiBFnAL4jgW7YZUzAXtui6Ojo6QpumWOANrK3k+n2+0KT7PXovSUYZLydvBvGwjBpMLumbPTEII +GZo4bRd0VcSYpteAOAuWQwFuTJIkwWxW797NC2VeID3Pu5wTztc7OjpCFEVWuZ6Lz/P9qUQmwH7Z +VoQG6IImhIyZVOnGyTbK8IVLkKQbMUBNKwsWMCIX9MOHD8WbMZis1TzSzRjqykzHIuFGDPOZZwzC +ogVMCJkSTTZZkCC1gKVpKLXLOeDG/Oqv/mqk10DyKENizZrql5UV+5MK8HojBlrAhJDpcim+PdgI +4ixYQgF21LR2QgJGJMAANIDapUjZrkd1dTKqUlFKxTpfFkr3Ap77xiwvxihoBmERQkZIm0xXdUiD +sB5K54AnloYSGJcAA8JsWGUCbLKO8wLcxvWcIbWAS/NAF8oS5oEmhIyQMFa9Ggddp6FM05QWcEtE +FnA+Elrqmjb1U1VWZh2HYgEuSUNZeG0I3CaEkEFpm2ZSgnQO+OG5zAXtL/TkLODRREED8nSUJgu4 +TFBNqSibuJ4zpC7o4yPZRgwR3c+EkBGRpBpByzSTdTiOLApaKY1VIHJBJ7/15BfutR7YjhmVADuO +E0is2CwSuohJUCVri6v6yZcpuEhFeaCBo4X50haH09WidkIIaYtS6+0F+0Y6/xvFqXSKbnJ5oIGR +uaC11iJnf9ECrhLtslSUzaxf2eXyZz4WxjSU20Tx5L4zhJA9pK/lRiak7udVKJyjm2ASDmBkFjBa +BGEppS4jpDe2DkwSRNGjOQRxxitD2Vki+9LMy5JwGBSYFjAhZGi0Bs5DsbXZGqkFLE3C4ejpRUAD +IxPgOhd0diwLwsrK4jjeyHa1sWwoDLFarTbKy6zfunzQD5OF6H3MZ755JyQuQSKEjAytgfNod+IL +yNcAB0ILWDvTWwMMjEyA0zQV5YPOW8BhGCKOH/1KauJalh6PtSwAy5+ZN2Iw7gWccAkSIWQYMrez +6mmtbxnSJUjnsgAsQE8vDSUwMgF2HMcqHWWapojjuHYOGJAvOypDa41YC7cinHkWGzHQAiaEDEMQ +p70l2qhCvhWh0AWNaVrAowrCguUccHEv4Dz53ZKKZcXnVWV5xFsR2mzEQAEmhAzAKlJIBspDL54D +llrAwBuNBzMgkxVgSUrKjDZu5/zxWEkFuGQjBkNduqAJIbumy319mzD3ZS7os0CWhAPQkxTgUbmg +UZMJqxiEVZZm0pQLuou54Vh4uRYz37zInC5oQsjABFG/KSYlSC3gs3OZBZxqCnAXiBJxJBf5G/Pu +5abYWMexlmW3OjlamPNAFxQ4SZkHmhCyO8YgvoDFTkjCPNCO63IOuC02qSi11vB9H57nVVq3ZYk4 +8s/r5pEvXdDCOeBjaR5o7gNMCNkRYxFfwEKA99wFPSoBdhzHOhPWYrGA55UvD3IcpzIdpc0GDlIB +PlmWCHBhGBEFmBCyA8YkvoBsGZIG8EC2F7AGzicpwKNyQUtTUeYTcQDAcrlEmqZI09SYpnKxWGxl +yLK1flPtQgl+r7iug6OFbLlS0vNuI4QQ0ve2grZ4rgPPrRfgNFGIZZtC3P/0898rDpceE2MT4EBi +rRYFGAA8zytdcnR0dGQU4LqUlPnX54lMVH1fvgSp7+2+CCGHzXqp0bjuM9IArDBKIXNQTtP9DIxQ +gIX1Nv4Wnxepmgc2lRk3YhDuAzyfe6Uh9twJiRCyC7ReJ9kYY5zJTLgEaRVJN0t3KMBdIJ0DzrJf +Sd3HJqvadm1wJBTgme8bf+GZDHvuBUwI6ZosveQQGa4kdL4RA6a5ExIwsiAsGwu4aXKNJtav1hqR +OAmHL95qK2ESDkJIh4xdfAGLjRgCmQWsJpoFCxiZALuu23g7wgyTgBYtYBvxzp5LLeCyrQgdQxYO +WsCEkK7IdjUas/gC8r2Az8P9XoIEjMwFXWUBF/f4remn9rn0eIZUgMt2QuJewISQvlAKOI8SYdDS +sMh3QpLOAbsU4C5QSllvR5inTEDLUlbW9bGxr7DUAvbNLmjTu2IUNCGkLUmqEUQpJqC9AGw2YpBZ +wI6ergt6VALsuq5VKkqg2oLNB2G13Y5QuhHDYu6Jf+GNMUKREDId4kQjkK2VHQ3yNJRSFzQFuBOU +UpXrgDOaLEOqq1PVn9ZabAEfH5vzRW8vQWIeaEJIc8JYTdKL1nkayoluxACMTIBd1w0lFnCZCzqf +CSvfTxRFiKLIKid08bl0DrgsDWXRCc1tCAkhTdB6fNmtbJB6CMUWMAW4G6os4GIQlo3AhmGI1WpV +uTSpWpwd8TKkk6MSC7jwOhbuZUwIIRnqYpmRGnmkcxXSKOiHsjzQmDmLya4DHpUAp2kaVG2skKt3 ++TyKIoRhdf6OsjlgQLYZQwIP2hhGtYnruljOSy5poXk8QdcRIWQ4knQ93zv1mStJEJbWGueBKBFH +8pvPfO7N1oMaiFEJsOu6VpsxpGmKKNr+lVS0YOvmletc07F4DbBX+uXasoDpgiaECIkShTCe/o92 +33NK9krfJI6VyEhxgLu4dWuyF2ZUiTiWy6UoEUdegG22EywibRvD7FYuss6CJZvfmOr8DSFkd6wz +W+2H+ALyJUiBMA/0lLNgASOzgOM4FiXiyITXFHAlyYRV1m/ZUiXpEqRZWRIObEdBU4AJIVUoDQQT +yGxlgzQCWroRw5TXAAMjs4C/4Ru+IcwCooqPPJJc0Pm6bTdjiIW/U2YzH3PTRgyGunRBE0LKiBON +8yDZK/EF5BbwSrgRA1wKcGfcWvvya0PfMgH2PM8qmYapH8nxGLK9gMvyQJsUmBYwIaRI5nIO4ulk +trJBOkUnTkOpp7sTEjAyAQbkOyIppeB5Hny/3jq1Se5RfA4AiZYJcPlOSNvnZxQ0ISRPqjTOw3Sv +c8SLXdCyCGhg4i7oUc0BA/I9gdM0hed5WCwWALY3aMi7qW13QyrWkVrAZXPARhf0Hv8nI4TYsS9R +znWI80AL1wDDde60GM7gjE6AARgt4KJo5iOgF4sFPM+DUmojS1Z2fD6fYz6fb5TbZMVKE1kU9Hzm +G7O8mAxwCjAhRGsgiNODyQsv34iBFvAg2Lig83ieh3wSj2LU9HK53CivEuDi62QlE+CTo4WoXpzq +yS+mJ4S0I040wj2d6y1jJpwDPhMKsOOqSc8Bj06AUWIBF6nbkrDKzWyzXzAARKksEceVo9mWsDrO +tgs6YQQ0IQfLPi4vkiK1gKVpKB1MNw80MEIB1lqL9gTOp6Osm9OV7oZUrKO1hgYQaeFOSIaNGLQG +9MXfjJDuZ0IOkihRiGJ1UFZvHmkeaOlGDK4zowB3ieM4rSxgYFtoJYJexjoJR317z/OwmHkl/7Gc +jfKEEdCEHBSHbPXmEUVBa+DhuSgWFw9cjwLcJVrrrR2RTJZrZgFLXMj5/mzdz7HQ+p3P3PWXq+z/ +V658int4EkKacehWb4bjAL7r1Ma/KKWlmbBWn/3Z9z7sYmxDMUYBFv30qZsDzlO1G1JZ2+y5dBtC +/yICWhv/m22W7vM6P0LImjjViGIFxYhLAPL53zAWbrfoTDsCGhihAEtd0NkyJGmwVfG1NINWJN4J +aZ0FS2AAI2IQFiF7i1LrpUWH7m4uMvPK7495VqEwC9bEA7CAEQqwyQVtQiklTj3ZJhOW1AKe+xdr +gAUKTAuYkP1D6wt3M6eYjPh+xf0xhzgPtHYpwF0jzYRlckG3yQtdhjQCejb3S3/hFcsiCjAhe0Wc +aEQJ3c1VrO+P9ddHnIaSFnAvbLmgTWJaFODMHW1yTadpijAMN+oWn5eJdxDLIqhnvgff2w7Cchxs +lR1K1htC9h0Kr5yZVxKAVbjFirNgTXwvYGCkAiyxXvO5n5VSCMNwKx808EiYgyDYKCseLzsWCJNw +zGY+Zr6z9fvOwXYZN2IgZNrE6YXwcp5XTGkQVuESngtd0A4FuHukqSjzlutqtapcFyxZhlRGrGWX +aDH34bkGc3c9gtw5gaRirISQ8ULhbY4vDMKiBTws4t2QACCKokrxBdZCK1mKZBJnqQCfHG+noQQA +OJtZsFLmgSZkciQXwsvI5uZUBqnmEO+ExDngXhALsNYacbz+tWQS17yVXCbAdcuYpFsRHi1kGzZE +tH4JmQRar3ctixLFH80dILWAz1YyCzjVFODOkWbCyqzeurXAZf2IEnPAQSq5RM46D7Sxx8KPPqah +JGTcKLVeTpSkzF7VJb4nS4gk3wnJnfROSMAIBdhxHFEQVuaCrnMtZ8dMa4HrEnMkmEGSB3rmeesk +42VrkHLlDMAiZJykSiNKNFIKby/4hr3STUjzQNMF3QNKKfFuSNK5XcB+QwatNWItcz/7M//CvVIW +gPWonAFYhIwHpdc/ipNUcylRz0hc0BrAucwFrYFzCnDX2O6GtFgsLsVYirRuIpz/nWd5oEu6zZfH +XANMyKBovQ6qilMGVe0K13EuVolUkyYpIsNyUgP3P/3894rDpcfK6ATYJhUlsLZsl8slwjA0JufI +qJpXLnsuDcCazS6ScAhImAeakEFIlb4UXhq7u6Vs/tcpTPGFUSr8bKbvfgZGKMAwREGbPrgs+hlY +78V7fHyMJEmM2xQCa0s531+VAF++TpZAWj/gtQAXLGDn0d98ccw0lITshPWa+7XopoqiOyQzzzVe +/+K0nXQjBgfO5AOwgBEKsDQIy1TH9334vn95LG8RL5fLjfliiQCr86VozLMLF/TmALO/m+UxXV6E +9Ea2dChJNZSSZB4mu0AagCXeiGEPknAAIxRgpVSj3ZCq0ksCsmxYxTaRMAnH/MIFLdoLmFHQhHSG +1mvXstKaojtipGuApQKsKMD94Lqu1TKkrtmYAxYK8Mz3jb/wTD8juBEDIc1RF4Kbphqp1kwJORF8 +aRasA9oJCRihADuOE0oSZpQJcFl96XKlPNK9gBfzGVzHEAVdSEMJACmXIREiQmtAaQ2lLkSXgjtZ +fNeRbUUonAMGpr8XMDBCAU6SROSCzgtw03XAdUIvzgN9ZM4DXdwJKVFc4E9IEa0vXMkXAqsuhZf/ +W/YF6SoRqQXsaLqge8HzvKBucwUAlWt/q4RVkjUrex4KtyJcLMxpKPVWGkreUMhhkP1X0shiMi6E +FvqRZasfHSP7zdYqkRLkGzFQgHvB87xQIsCSOnlsM2Ep7SCFQIAd4Hgxg2mCY33G3JwylyCRHbEW +OwA50cter//oy3obf7Ojgptl2bISCiop4guScAAWc8B7sBEDMEIBPjs7C+bz+p2FTAJsO8db1U6a +hnLme5j55i9XUfOZdYc0IRNPsyV5UQ6sxVYzCpiMD6kFfBYILWAKcD9cu3YtWK1Wl6/LRDW5SFdW +t/woj9Q1rbVGpGXu59nMh++aF5lDb37paAGTInk3rNLboqq5rIbsAZ4rXIYktIBnzoKJOPrg4x// +ePqd3/mdCWrGprVGmqZw3c3JfaXUxlaFGUmSIIqijfb558XX56ksCcd85sPzHPMcMApzwFyCdFBk +1qrS2/OeWRkhh4DnbW5KY0IrsQAnv/nM597sYlxDMzoBviAAcMWmQRzHCMOw1MoNwxBBEBiPmSzn +c6Gx6s/89fyGMQoaG+UU4P1EaVxE7xaEltYrIfDcdcbnuh+ccZIgEXgJHeAubt3aC3fipAVYKQXX +dRFF0YZ1C2wLrCQTVp7EqZ+HBoD5RRIOURYsrgGeLPk1qUprpOqR2BJCypGmoQxCWXKlfcmCBYxX +gEU7MidJcinATQOwALMIJxZpKD3XLfeu5MpTWsCjxyS0dBcT0hxfOv8bHdYaYGC8AnzpK64SVqXU +xq5IVdguQ4ohs4Bns8wCNp6Vc8AjJu86TtUjq5YQ0h2eMA1lEAmzYLkU4L4R5YNWSlkLa56qcyTS +ZUgzD55bIsCFodEFPRxKPcq0RKuWkN3ReRpKjb2IgAZGKsBKqVC6I9JsNitdkpT/m/UndVXHwkuz +mPtwne1feE4h6E+DqfV2RZawn2JLyPB4JUGqRcRbEdIF3S+O4wT1tWBchgSYRbZM0MsEWZqI43g5 +K/11ly9PUkbE9gG3oyNk3JRP0W0iXQMM17nTakAjYpQCjNwccBVKKfi+D8/zLq3grkiEc8BHy1nJ +EiSHS5B6gNvRETItxEk4hC5oR2m6oHvmMgq6ymWc7Yi0WCwuE3OUYTNXnGoHCvW7dzgAFjO/dP43 +X55qzv82IQuOStV6K0e6kgmZFmV5EooEQgtYO6AF3Cdaa7EFDKzFdblcQimFNE23MmFlf+fz+VZZ +8S8ApGoOCJakzeb+RYaXemgBy1BqHazGqGRC9gNXGIQl3QnJ4TrgfnEcRxwFna/nuq4x4YbWGp7n +YbFYbBwrzZoVH4lWIs98f+1eKRmqpgu6lkxoOX9LyH7iC5chnQuDhYi/5wAAIABJREFUsBytKMB9 +YmsB1/QFwM4FHUmTcMwv0lAatyLcLGcSjjVKr69FojRdyoQcAK4jDcISWsBHLl3QPSPKhJXN+bbJ +glVEa41YKMAz3yvfiKHwoy85UKXRem39JxfLgpi6kZDDwcHFMqQalFIIY1EqyuiTf/U/ud92XGNh +rAIcAPXCmqZp7RaEGWW5oE1ESijAc3+dhKNkK6R8+SFZwNk8bpJq7oFMyAHjuln+hep6caykKxru +tR7UiBilAHfhgraxiot1YyXcC9j3LlzQ2xQ93ukeZ8HSGkgu5nHpViaEZPiCbQgBeRpKjf2JgAZG +KsCwdEE3oUqgpXPAs7m/jvAr8UFvLEPaM0swHzy1b++NENINnuvAdHsoGihhLBNglwK8E0QCXBeE +VRRZx3FElrF0Dnju+6L5DWA/oqAzsc3mcwkhpIqy+2PxNizNgqWxP1mwgPEKsNgFXbaUyDQ3XCfA +2TFpGsrlfIZ1GmjTT7xcqe42UGxXPHItK6RMpUkIsaQ0RqZAIAvA2qutCIGRCnC2DlgShGWLRAil +LuhFSRrK9YkePU0ntL71UdQyRZcQ0g6ph1CcB9pRtID7Jk1T0W5IJgFWSl0+toKr4nhr5ySTBS0N +wjqam9NQFjdHGvscqdZAnDJqmRDSLZ5hsxwToTQIS3MOuHekuyHlRTaOY4Theuq4LM1kGIaI47jU +CtZaI9GeKA+06zqYz81C7RQ2Ak5GKGqZpRuniqJLCOkF15V5HcVbETqcA+4daSrKzAKOoghxXP8B +SqzqBLL539nMh+c45sQSDjbKxyJwtHQJIbvEE2bBCsR7AVOAd4EoEUfmajZZtbZBT1l9qQDPZ17p +RgzF0iGTcNDSJYQMhSucA5YKsN6jvYCBkQqwzRywzT7Akj5jCwvYLU72ZucBNoOwdhwBzehlQsgY +kEZBi5chqYQCvAPEc8CSDRkyJFZxoueivmazizSUxqPDzAGnSiNO1hHME1z1RAjZM9YbMXSXCSvx +GYTVO9IgrCRJLtf2lq0HzuPWRORprRELL8nM9y4CDB6VXRrYBUO7z6QVSgNxsp7X5UYHhJCx4DhA +yWZxG2gAQSSygPXjTz9zt/3IxsMoBRgWmbA8z9sIwKqbC66zghNYWMDO5rfrsmute12GxHldQsjY +kW5DGMUptMyRef8Tt/49+ZzjBBilADuOE0hcy2mawvd9+L6/8yjo+ewiD7TxRIV1wB0FYa1FVyNN +Fed1CSGjRpqEQ7oGGM5+uZ+BkQqw67oiAc7qLBaL9Rpei4CsMqRpKP2Zt7aAjVkoN8vbuIZp7RJC +pog0AEsswHuWhAMYqQDDYjekzKW8XC4vo6Lz4p13OS8Wiw2RNiXsSKOK9JI5sjzQRnLlGs0EmNYu +IWTKeJIJYMgDsCjAO2I2mwUSa7aYitLzPLiuWxqQFcfxRhuTACfRQjTGxcIv/3WnH33tbJYgZYky +4pS7DRFCpo14DlgWgAXt6L0TYFmizh1z+/Zt8TKkppiCszSAWAvzQC/WeaBNj2wOWANIBPtFKA2E +scJZkCCMFcWXEDJ5XBfmG2ThEUSyTXXcPcuCBYxUgD/96U/HWus0W15U9sis2bp62aMuCCvRHvRW +HqttPNeF73nQhn/rbQhz/yrENEk1zsMUZ0GCKKGrmRCyP2QWcN0jDBmENUZCAMd1lZRSouhmCZES +rgGer5NwmLNgbZYXk3BcupkTrtslhOwvbsk9sshK6oLmHPBOCSAQ4GwpUheIlyD5fun8xqUb+oJM +ZLOEGTEtXULIASDdiEG+DGn/XNBjFmBxMo6MthsySC1gf77OgmWiaIzHiUIQKSSMZiaE7CFl91nH +0aJ7sHwnJEUB3iGiQKxiJHQZkjngWMsux6UFXPLd0voiL3Oq8TBMEKfNg8UIIYeDrdEwZuR5oIX3 +cJcu6J2hte49EvriPJfPpRbwfOZdbLO1/eVSF1F9l65nRjQTMgj7JGZTxClJVFQkDCJRfyp1KcA7 +pHMBrrWAhZfDn3lwHRgt4GLaSWavIvsAxYxkSL4JjgPAAWrvzhoIY9kccLSYUYB3iHU2LK315RaF +SqmthBxxHCOKosvX+b8AECayVVnzbC9gAYx0JkUoZiRjX78JZXulF4nSVOgl1OFnf/a9D1sPbGSM +WYCtLGCtNYIgqNwZKQxDBMFmt3khDpRMgP2Zv94GUTQ+UZekIRQzAuyvkLVmoAvjVcTI5IlC2fwv +4OzVNoQZkxbgzOLVWuP8/LzWHV3mgs5u4tKtCJez2UW72hFOygKmmBGAYlbKAV6Ypm/ZEQZgSd3P ++5iEAxi3AIcSQUjTFGEYisSjNhOWcB3wYuGh6quZDSVVsjB8sr/w0y/hAC/MIb1l15UYKFY7Ib3R +bkTjZLQCrJQKJBmu8ikp26DhIJUIsLOeA5YI65Ss3ynAq1nCAV6YA3zLk0I6RRdI01Bi/5JwACMW +YAjngIvbD5oQWdKYib4wvufB82TzG2OOgB7vyAbmAC/MAb5lYkD0PRB+WVwI54DFLuj9S8IBjFiA +XdcVuaC7WoYUC93Pvu+Jt9lKlWQWZE85wDd+gG+ZlNClmE0RR7YVMCKhC1rv4U5IwIgFGBZR0L7v +Q7J/cBXiLFhziwjorlzQe/wftYwDfMukhEMXsyniutIgLOH0IYOwdot0Dlgphfl8jiRJLrcdzCiu +9a3qTxoBPfM9OAC0wPBWKUZxYxjBEMhIEATukwNgFx+zZAZOuhXhPu4FDIxYgGGRC9p1XRwdHWG1 +WlXO91YLsNQF7cMR/rpL9AG7oA8AihkBxvYxj2M06zwcAgtYuhUhFNcB7xLpHHAWAe15Ho6Pj5Ek +yWWZyRpeLBZbOyhpraHTJSD4MTbP0lAK3gOXIMmgi5FkjOtjHtdoahnRcF1ANgcsdEFrx6MA7xhx +KsoMx3Hg+z58f3uZUPZ6uVwaBVitlqJBZVmwJF+uIbJgUcxIxrg+5nGNppIJDVXKzt+SI3NBR0IL +2HdoAe8akQu6OO9bV6fMDR0Jg7Bms3W9S22tOPU6EYeoWzJyxvUxjms0lUxoqBL27O30wqM8+fmr +ZbrvarEFrLyYArxjOt0PuA5pFHQxCKsqToyJOMyM66qMazSVTGioEvbs7ZALzA7C7RKVaqTCvdLP +Xz+hAO8YkQvadj/gvAXcbC/grF4WYW2up7UsFVtbxnMTG89IRExsuHXs2dshLdjZd6HkRA4c0SqR +MElFgVoAHn724++VbRo8McYswNYWcN7VbArAqsJmHbBoDTDa/EeY2O10YsOtY8/eDmnB0GI2RYQh +MvIsWMBeWr/AHghwfjvCpijtINFebT0HDuYzT5YHWmk0+l+1R/8Rgb17O6QFFLPDoG4v4OyQdP4X +FOBBsI6ClmAKwkqEl8H3XfFG00rpzm8EvK8QYMffA37pRs0oPx4HUIKRxUIBdvZ0L2Bg3AJsZQFL +MQlwpIRJOGZr97MkvD5VI/3PQTagVUYy+BF1gyCBIQC5AGtoCvAAdCrAVW7jSOB+Bi4ioIUbTR9i +BDTFjGTwIxqYAT+AfBBW1TCkWbDgUIB3juM4gTQTlqlemqYb88NZnTiOEUXRZTkABInsJ9vsIguW +hLY7EVLMSAY/ogEZ0cUf0VBqkYw1jmXGk6Pogt45WutGy5CiKEIYbjbNC3AQBFsCfC70Ynu+X53h +JVeumIRjlPAjGZARXfwRDWVktL8yrjAPdCTcwU45+s22YxorYxVgJ03TyHXd2op5AV6tVojjareG +MQhLy+aAZzMP0LIgrH0X3z1/e+NnRB/AiIYyMg7vymhc3CIFbz0WLkO6mAN2s+5bDG90jE2AnYsH +0jQNJQKcRUEnSSLaE9gowM5M9LHOfV+8EYPNHPBefaOmyIg+gBENZWQc3pUZzTu2HIijZRawOAo6 +Tt/EpgDvjRCPRYCdwgPn5+fxtWvXahtmAly0fIuJOKrmk2PhVoSe74mjoHtYhTQNRvSmRzSUEXF4 +V2VU73hUg+mJjhNxKBXfw6Nk0g72SIiHFuBLwcXFDlZZ2enpaSQR4MwFbbscKU+i56J6s5l/EWJf +/5l3shXhiL5aIxrKiDi8qzKqdzyqwRwepsvvCN3PGkCSyCzgOHpYtICBPRHiIQV4Q3CLjxdeeCF+ +9tlnNczbaFySCa/ruiIRbuOCnnmeKMcpUJEjWtb8ADm8KzOqdzyqwRwe+3L518s069FKIxEmUdLn +r1W5oB2sM/86mKAQDyHARsHFpjWcPQ8B1G7Uq5SC67pbruY6K9RxHGit5UFYi5nsyzW4+3lS38FO +GNU7HtVgDg9e/uFwgfoPQAMqBVLhHPC92599E480oSjCGo/EOXeGabBrAXZL/paJsUiA0zTFfD5H +HMe1qSmLFrCCixSSPNCA59sk4ZjMd2CLUY18VIM5LHjpJ8COPiTpadYxMoIlSGkq7XP10qd/KcSm +yJqs3rLHqNmVANdZvWWPAEDtRHDmej46OsJqtaoU4aIAx0Lr1/d9eMLogvz3b1TfgFEN5rDgpZ8A +IxOzKWKa4jMhnf/VWpe5n4tWb2kXohMNxC4EuMzqrbWGtdaR5APNzwMfHx8jSZKNDFn5v0opzGaP +RDdIjwDBTpP+zIPOkozXfKRMwtEvvLQTgGJ2sBRXiZju4LFQgKF1PgI6667O6i0+mkfo9kyfAtzU +6i26oGspppz0PA+e5xkF2HGcDQv5YXQiE2Dfh6NlG02P9tM2wBvYBKCYkR3S5nuQqWNdf+IkHNq4 +BtiW0Sbx6EuA64RVag13viXhtgtadglmM68mHvvRp6u0ZKaY7Jwdfij8/Amwh98DyRsSWCCJfC/g +e1jrgXTON2/1ZnPFeUb1kfQhwFVi24sF3GbNbSQUYD9LwiEaT+PhTAdaZWTH7N13Ye/eEABoaMFd +MhTmgdYqOcUjHbG5Yln9vPWbDWw0V75rATaJr1Rst6xgrXUomQPO5nubCHGkZFsR+r4PYQ4O+0+X +YkZ2zN59F/iGRnImV9Sf1GupVWkaSom1uz24kYlwlwJsI7pSYRbMztZnwcrW+5oQrwH2Pazjry7m +kyvqanUgVjABMJL/yV3CNzTis4wbDQ2t640m6VaESC8t4CqqrF1TXalg905XAiwRVmtrWGvdiQBv +DLRgUYdCC9ibrV3QsmVI/K/YlL27cnxDIz4L6QPJ7S9Jqnety0jT8BTbwuqgXkSrxLg4pzwYXQhw +W/GtmiPuPAgL2LSIpUFYvreuN6WFZ2MZR2fwDY34LGRw+pgesx6DLBVlnMiMpjSOihZw0dq1sXrL +ygb7L9JWgPNiWXxdJb6iwCytdadBWKZ60kQcs5kn9ldM4oY3iUHaQDEjHTIGMZsYa3NSdlVS4Tpg +FT3MBNh2jldybHARbiPAUqFt4op2sRZgkQu6aAEX1//mnxdd0PIoaL/8I9L5p3oP/mdSzEiHUMwO +A2fb/WyKodUa4o0YoocP8i7oMld0HlsRzo9w51/DLgW4WGYrvqZjVnPAeddymqZQSm2IcfaIogha +a6TahRIEDLiOA891ofMpXsqabX2EFDPSITUfNL8HJGOI70LxnCbnpNIaqdAFHTx4pSwIKy/KUhHW +hr6Kr3d62ZoKsERwi8dt3dRiCzgfhBVFEcJw7bk2ia/WGkEQAABCHInerOd70E7BuVLyMSnI3TBk +YChmRMhBfhcs37QDWaZAreVxO6tX/uA+HoltU/dyWZlJkEcvwFLBbeOSto6C1lpjtVohSZLKLQnz +LugEwo0YZutIadEnc4j/U+liJBYc5HfhQN60xPhIc57Jmt7ie1/6/XM80pc2c7zr4W0HdJmO7+zT +aiPA+eemR/G4tSArpcRzwNkGDDaI01D6NhHQLT87ihmx4CC/Cwf5pqsZwyXJJmfrsNgJKZv/zYuk +jXtZKrimuju5pLYCXBTW/PO6h6luZZmNBRzH9evKsjni7G8stIDXGztAuAZ4HP8ZiB0H+Zkd5Juu +h5elObI1wNKdkFQ+DWWdCNcFWAHVgjuIK9pGgMuEs+x5a6tYKsBN01BKs2D5s3UENOd2ZRzkVTrI +N10PL8thIbOAhXmg0+RNlLufJfO5RYu2SnBNdXv/+jaxgOuEtey59byxUkqULkUpdWnVlomxKR2l +2AL2ZflN++Agb2AH+abr4WUhY0ZDwxGsKpFGQCuV3ke5aNq4l4ttq/oqPu8VqQBLxFVSr9imck2w +dA5YKQXP8y5/WVXlfs4fF2fB8v3p3vwmO/B+4WUhpHskXsIklQlwbiekjDbzuVLBLT7v9VbRxAVd +9ryJCFe1t0rEMZ/PEcexVSBWgrmonu9f5IvmXdsILwshRHojSFKxCzovwFUu5q6s3Z1bwTYWsOR5 +WxEuuqCtckEfHR1htVrVinC2FEmahtL3vJ2oDIWMEDJVpPcvJc0DnUQPUD4HnBfJrgV3Z1awRIDb +iqrkubHMxgUNAK7r4uTkBHEcX64HNq0Jns/nSNMUaToTXVpvyi5oQggZEanQBY0kKLOApe7mtoI7 +Chd0n8KLquNpmoqDsPJC63kePO/RNoPFjFhr8VVIVtIgLNmWhYQQQqqRuqCTOMiCsLoSX5OwmkR2 +ZyLs1le5xOR67sv6BSwE2Gbe95H7WZYH2rnIA00IIaQ9SSwU4NX904unEj2B4LnkeJWR2Dl1FnDd +wE1lnVi/AJAkiXUu6AyT6zm/I1KgpNsQdrFlMiGEEACIIpFdhfDBK6+hndvY9HxUbmiJaWfz66Cp +OBv7T9NULMDFbQZN5Oucp0tJ15jNZUJNCCGkmiRJxJmwTr/0e3kBbuxJrXheRZ2udUKdADcZZFNx +3iqL47ixBVwnyGepbAnSYiGrRwghpJrVuWhhC7RK33jw0ufPL1628aZWMZjrOUM6uWnjT69qb3PB +nDYCXDkYx8H95FhUlwJMCCHd8PDhmaheGgV/dPG0rSC2FdZexbhKgLsW2jq2zhMJJwuKQVh11q+G +gzelArykABNCSBc8uC8T4CR88Iclh/q2fndKFxFGXfyqMIp8EAQif0W2DKkYeFWWjvJ+vECqBca/ +AxwdyeaKCSGElLM6DxCGIqcmzt/4wj9HeWCUCdPxfOCVNJCqSZvGNF1f07XoGuuvVqsIgotg64J+ +NbwqqreYzx+loSSEENKYu3dO6ysB0FqFL3/q479rONSVK7rPNlb0vcC17RvQWuvaRWOZtSuJhAYc +3F7JBPjkypGoHiGEkHKSOMG9N2UCnAYP/7/Vg9fqph+7EMedu5yLjC3DhOmCdBIJnYn0q6sjhErm +eT85kc0TE0IIKefVV+9AK5lH9/yNP/kHPQ9ncOHNGJsAmz4h8Txwbeca+MPTa6KBOI6Dx65eEdUl +hBBi5vw8wN27b8oqa/Xgi5/8W/+03xGNh74FWBf+2negdSeR0I7j4OXVMe6FC9F5r167As8b2+8T +QgiZDlpp3H7xFbEChPdf+/vBvZcD1LdoEyDVWpe6oqnCtHkD0rYaALTWnVjAq8TD7955QtIVAODG +DZmlTAghxIAGbn/pVQgXswBapy//i1/+O9U9bvwtPq8ZjVX9pm2s6GIZUj5ku8q3XpZvs65t66VI +SgOfeuNJREoW0TybzXDl6omoLiGEkG1eefl13LsnC7wCgPDsjV964/P/6BWYBbZPY69tm8ZUWcBd +Db7JL5T8c/GWhMC261nDwaffeBJ3ApnrGQC+7KknxjNLTwghE0Jjbfm+/vpdm1arL33y4z+Peu0o +E+f8o6ytpJ+dIrWAy3aIaGLxFttX9qm1vi8Z4J07d/DYY49tlIXKw6deu4nXA3kyjfl8hhuPy5Yp +EUIIeUQSJ3jxi6+IU05mnN958Rfu/clvvH7xsiikXRh2+ec2/fQqznUCLBVZyfZPUjb6TJLkC77v +f1tdoxdffBE3b97ElStXoAF88eEJPnP3OsLULpHGU08/KVxPTAghBFgHwb7xxj3cee0eUsvESGm8 ++qM/+tUf/5uoFl7J87Ky4nNTWV37XpBYwHWWahuRrhJuAHDCMPzccllvwYZhiM997g/w2DPfhNvp +23Aa2edwvnLlGNevP1ZfkRBCDhgNIIkSnJ+v8ODBGU5PH0CldsILAFrr6LXP/Np/m6weZFONeQGE +4Hmd4HZhTQ8ehGUSWYmLWfK88vjt27f/ydWrV2PHcSo25nUQXv063L7+jVCr5sFT5+cBPvfZFxq3 +J4SQQyBVaSeydP/lz/53t//5x/8IZqFsKqJNrd2dW8E2Lug2Ilv1vPL4K6+8cvervuqrfn0+n/8F +0wCV/xjOn/7zUAv5EqMybHNKE0IIaUZ4+srf/pe//BO/jGoRLD7K6tU9h+G5qWynIixZB9zVmy0+ +r/PdXz5//fXX/zoAgzo6WH3Zn+tEfAkhhOyG8MFrf+/3/85H/wrshbaNCLcV586RRiiV7Z1Yt6di +1V7CpmPGOnfu3HnjrW996w3f978xfzA5/nJEN/606A0QQggZnvD0lY///v/53E9DJQrlArwLq3hQ +9zMgF2BAJqy2gpt/bgrkuiw7PT397aeeeurPua77ZFYWX/lTSI/eUjloQgghw6Oh1dlrf/xXP/d3 +f+z5i/m+vIiaxLhYhpLnfQtyb3RlAaPiedUxaT2EYRgHQfCPb968+R2O41wFgPTky5EunxIMnxBC +yFCoNHn9zuf/8XN//A//+19DvdCWiWydxdyXCPdGFxZw3eum7bZen52dnWmt/8mNGze+3XGca9pd +ILnylVVjJoQQMhAaWkUPXv/7X/jE//hjr33mH3wBcvGts4DrLGKp9Vz3vFfsslQ8ogtr16btJaen +p6dnZ2e/8sQTT/xrM716e/zYO6Bd+zW/hBBCekMnq/u/8dpnfuW/eeHXfubvhfdfX0FuvUpd0k1d +1KOwfgH7LFUO1pHTTu7hCp43OV5WJ3t43/RN3/QdJ2/5uo+Eb/n3n9JuxTJhQgghvaPS5LXo4Ruf +uPPCP/2ll3/7/3oB9qILyMTXVF7Xrk7Ai3V7p0nOxT4Ft0yEi+e9fMxmM+8b3vUX3zN75tvfj+UT +j2t31uQ9EUIIsSNRaXJXRecvRGd3fv/hq3/021/8rb/9WSRJinrrs0pspcJsK7i2x3uniVhJrdWm +gltl+VaKMQDnLV/zzrcsfPf6upp2NOBAP/prfM9aOxr6UbnO6jwq01XXqqxfQgjpkVTp4PTBmXzP +vwKO60Val+3T6hRFSAOA46zLz17+/H08Eqoq16+prI0rWiKeTUR4p+ILNBeNvqxdK7EVPlBTVnyO +QjkM5WXXgxBCpkQEcyyQSYS04a/0eZ0VXPxrK8pdCvLOkOaCLqKwmUXLweYHVjxeV6ZLjjkl7crI ++tHYFlyN/gS47hghhIyRMtExWr+F8qLQ5su6soYloixdxmQqMwVy7YymAgy0E9xiWZ3QZnUkj6xu +Nsb8MW14DsgFuKysqpwQQsaKRHzzZUUBLv5tIrz5cdjMDVeJr9QCLo5rp3QlwEULuKwMkAttmWVc +NR6J+7kowoCdABfrlL0mhJCxkxZel4lQUwHOPzcJro013NYqHjzoqkgbAQY2L6bE2i0eqxLYvGVs +M99bFOJiGWAWXFsBLkIBJoRMDY1tES6rl/9rKqsTYKCd8LYR5rLzFt/TTmkrwIBMhE1CW3Q964q6 +xfOZ5nmbzvkW3dGoeF5GUcAJIWQK5KfsyjCJbv65jQCXCWBTYZZaw2V1Bt2DtgsBBupFWDrHK7V6 +q+Z5paJbtHIpwISQQyNF/TRfUwE2lVWJcV9WcZ0wD0ZXAgxUizByx5rM8dZZvSg5pg3PgXoBLr6u +E1eKLyFkikhEyEaAi3+rxNZUXla3L6t4ULoUYGBbhKsE1naOt2j1SpYbSYKuKMCEkEOlTozKxDf/ +2laAi69thReQiWyVMI+CrgUY2LxApjneJv2VCTIM5Sh5XjfnWyXAptfSY4QQMlbq5oC7EOAqQS7W +24U1PBr6EGBg+002iWguCme+7zYBV1VzvlVWLwWYELJvVM0Blwlu8XWd5Wsqa2sNA80yaY2KvgQY +ePSGm1q9NnO+KBwvup1NAgxsC29TK5gCTAiZImUuaKn4Zs/LXkuFuKqsq6VLo2NXwtHE6i1zK0vL +UPLXxvI1XR9TWdN9lQkhZEgSmL2MRcpc0UWBzZ5XCXJTMW5qDY+WPi3gPJJfH7ZWr437WRuOAfUC +bHptghYwIWSKpJDdv2wFuPi3CwEG7K3hUbMrAQYeXZAqS1e6vlciusXnZa+BatGVfDlH/SuLEEJK +kAhVnfu5rsxGgPPPbaxhYCJWb55dCnBG8YNqsr4XDZ6XvQaqBdj0ushkPnBCCMlRd++qEt/8axsB +NpVJxVh6bBIM7To1Catbcaxs/td0rFhW9hqQCW7VtfJqjhNCyBhJao73KcCmYxI39OSFN2MsorHL +oCuJAJvKqq7VEJ4EQghpS4py8aoT33xZnQAX/3bphp4sYxHgjKaiayO4ZfO7UsE1lVOACSFTpMwC +rhJbU1lfApx/vjfCmzE24cgubJ9BV2VCa+t2zo+tyVpnQggZmnwUdJWo1QnyLgV4bxibAGcUhRgN +n2v0J8B5GIRFCJkiGvYbMpjK2giwqaxMjPeKsQpwRv7C561ibXierwPDX5syGI5XQQEmhEyRLG1j +FXVzxHWBWW2DsvaWsc0BS5AGXdkKcPF58ZxVjP2HDCGEmLCNgjaVNxHg4t+DEd08UxQOk1VcfA3D +37qy4vMiVcdoARNCpoh0K8KqY1XuZ1NZlQAfFFO0gMuosorL6hTLTcfK6uXhOmBCyBQpW4Zk45Zu +K8AHyxQt4DKKH2ofAlxWxxTcRQghYyctvJaIoo37uayMYL8EuIjpQ+9KgItk6TQJIWRKFAVYgq0A +kxL2WYBNlH05bLJemeAcMCFkitjOv5YJLmnAoQlwGW2/VBRgQsgUkSxDIj1BAe4GCjAhZIpQfAeE +gUPdwOtICJkiFGBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYRD77/nAAAAoUlEQVQQQgghhBBCCCGE +EEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBC +CCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGE/P/twQEJAAAAgKD/r/sRKgAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOwFUhhubebd6QAAAAAASUVORK5CYII= +" + 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-09-20-ocp/assets/slidesB.svg b/doc/talks/2023-09-20-ocp/assets/slidesB.svg new file mode 100644 index 00000000..c0a6e97c --- /dev/null +++ b/doc/talks/2023-09-20-ocp/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,iVBORw0KGgoAAAANSUhEUgAAATAAAAEqCAYAAACStgwOAAAOv3pUWHRSYXcgcHJvZmlsZSB0eXBl IGV4aWYAAHjarZprduM6DoT/cxWzBL4JLofPc2YHs/z5QNmOncTd6dvXTixbligSKFQVlJj1v/9u 8x8eMaVsYiqSa86WR6yx+sYbsdejnVdn43k9j3B/5173G0683nq24TpSH5Kvrbvvv51w3zo9Lz0N JOP2RX/9osZr6+XTQP42M52Rvp+3geptoOCvL9xtgHYty+Yq5XkJfV3b2/lXGPg1+hLlddpfPhei NxPXCd6v4ILl1Yd4TSDorzOh8abyyhcc6EI+eyyvKdxnQkC+i5N9mpX5nBX7Jiu7PWL0kpSQryMM O16DmR/bb/e79Gn/bUBzQvyMk/GAw8t+qe7Lcu6/e08xe69rdS1mQppvi7ov8bzjwE7Iwzkt8yz8 Jt6X86w8xYDeQcqnHbbzHK46T1q2i2665rZbZzvcYIrRL1/Yej9IlO6TUHz1I1hDnqI+3faF7M0g 5G+Q3sBe/5iLO9et53LDCReejiO9YzDHGd7oy7/xfDvQ3gp5504wr3pkXl6Lgmlo5vSVo0iI23cc pRPg+/PzQ/MayGA6YRYW2Gy/hujJ3bClOAon0YEDE9ur1lyZtwEIEddOTMYFMmCzC8llZ4v3xTni KOSnMZBobXRS4FLyk1n6GEImOeL12pxT3DnWJ3/thrNIRKKYCqmhvMhVhNjAT4kChloKCbJLOZUk qaaWQ4455ZxLVvJrJZRYUsmlFCm1NAkSJUmWImKkSqu+Bsgx1VxLlVpra1y0MXLj7MYBrXXfQ489 9dxLl157G8BnxJFGHmWIGXW06WeY8MTMs0yZdbblFlBacaWVV1my6mobqO2w404777Jl190eWXPm SuuX58+z5u5Z8ydTemB5ZI1TS7kP4ZROkuaMjPnoyHjRDABorzmz4mL0RlOnObPVUxXJM8ukyZlO M0YG43I+bffI3UfmXvJmYvyrvPl75oym7t/InNHUvcnc17x9k7WpFDxsMCdDWoYaVBsoPw5qXvhB k75sK8fDoclbCdMK81Xp40tzf/O32x8NVCus0lrZzLfEGdbZwQQru9jB3mHmXi5v6Y4DJfcEDMbi M6Gpw6fsepI9hoRA5EpfWQB9nr6P2LPvhVzM0UYzLUK6dQRfd/S+E9++9GrweRrEsqS8V85tZtlt ZQ3KXC3NVRkEePpWxx6tGAlrxFJYwe6BLG+/Nho9spthp+7crLnblHWa6E3xFAlZ7LP1CcprmlBS tcnETQLW1rqJycWkNuKfbM2fnDAI7ozUa2+ZSDw+MolmstiwfNPA3MKCZbkHhrys3feK3pWg36SZ +gb1lIaTXJRv+3RluGS2yyWlbWeIheqYvZHQbQvZqn2V6NbIfawmJ4rqZTaOpablU+enzZBX9SkZ H1aOxH10gp5ynxrnRu647EJHmX8hwzOMR4Ik7+wDR/ZdYPwV7KrbtCnSBmDxnZoeRewqEllIWjNa 2QnmqE/ZOckJEyp4LSHzpqb+eHsbKBN8YAYAidX++Ejg2QEpo1UU8xBsRNmrt142NKgTLHNv76zp 9VTNapM4AbFox0et4SZDhT6vzzuSlLhHqjOFEfJ2k7PAKxfbJshso9zTs5QcoKrOdKTmkfLqcXb4 LkVZidDhCoA73NspmsXJlE1oIHt7Lc/5Ujf3tFARMBy9AZl7pAepkjWg4vnIDrMU813dROrXbsoz ogGKa5D4u6356YEBKdmIzF6rtjLPR3YfXtJd1NqW1p7q4KMKWnlXOAjc50I0tzcMy1qhqefUlOfU jBl6Q/OId7M7h7QorV6WGxv4NDOXl75QGIoGDRmOA9XhIgWFMlG71su7AnuqL3MrsNqyMJXdZh8W mmOBzCr00VsV6T6noZKvJjD1zhsSP9cueXbI2rtqmJjTCAiRGb7buryHrFFHyDBDjAIcYusJAW1Q JZIMsKXF47txcABQYvJmIn/h90n7bVLN5zTeMntP9JekPpPbldZLKMyzUnyb17hizBQcdp/WNwft P0YNqYd7wrbmyzB8OQmrIxeKJQqnFFwAtpZusW9JBcmSNCma2mtMACFS2rs2uj9Ho9I95W3CIE8O 88bIzCxQj7mTl5mH5hVXAFEMyLClQp1idaLaz04HlDUQnRq1TQbIpnj3ZBiNGsYExOi6h/SCIGtM BhIrC2Z1RQ7pLKbV90U/EagWaMOUEHSRg5VsBhbWAlOkPe0Sane7ouwQR0eNwF6ecJ8vNe3mqAKi wjJ6mMnQKHoYCf9HSXSU1qXWUZbSi3p1y0E9tulQ/65crTaRkZOX3fmOipHasYDGYx64/sLZ+U23 thbJKj5c4LUdu3BsFSq25Bm6bZ5+yzdiVGghCK42jn0GLovXIDVbIw4feYkd3wjcLzXPLb+XYfN7 fVZBflFoPn7I8923mP1On1/U+Uxobik0l6WRkEYa2AGfp1wctsjcKaNVlR3SJiBP8Mx+jLjOrQbA CZUoaduZFnqzkoINq4RztVB4DOCIXBDLSCrrprbxu/P0tFLx1JYBmFMO0EihSg6KMskoqsIAMK1K bpuflaLVAOSp5p+G+wWfTzHLcb8F4xR8oNFd2/s598XLHg4NPe1Q0SjiEJZweWah2ChgV66xCzzV xSVSLTDnMpQgHjJ7dftrdlKCTeibDnGsBDhp+hUIQ2kXCU2pyYWUCLsBftzlAbcB3e0TuNkst7+C u8taKnc7uokhJtCECPIAnzQ1QZldi9SrUQadRSAEDzPPSf8BboAMpACBzNhCqfQaWhcaymN4BMZF zw2SGpWyuhqD8nMj89m/mJ8amIbrk+Vo0HsITm8uwEiBWOcKVYZpjuqQSToeHB4H+V3huobnRxyW atsu64KYEgivriUaKw8wcwPCFc9QxKSw18D95FI/0Jspo/Sgygu94L0UtzbxXfsZihcSzQcUU3Ib +3ox5bsG5y2Dmt9R6HsGvcbeDvdnLw/5dMElPZ66hgT9C73mMCgd7DlBH6x+7ASZ0CF1jy/DZ69F xwRnqf1Yc9ATD1vbJNiCeODtG7VfwRarZu30xThFlkdrlYljXBTDtNOTNRqwi15ds0Vmhl7nO3pd KVtKAPW78NcxJUQItjYNHNtSAk1wX46r2krTD425fJY74/hFa9k9DTBXhbMZjN7+RF8ZTzHJ1OGq EUmuE0dncnDRXaWddzR1tmiHseDQCrrW9nB8p+/PamjtiAqizpdFCbXsEjLeAioFh1QtlcrV3TEb on4Xp0MREKlN4pMzNJTQR86pemwY1Y0XCu8NjKMgGHCDxnWAwtwgGjdNw1IfjN0QBs09NHosWjBK iG7WgdPqChaBWOLbzrgQGjp4vTefLlpiak4t2g56iwT8W9LIVMcINbC+Q3Uu+a6aB3CV6jrVagKq SGc2hL4h8MSZdr1pMpsHk5Em3Wp1UaHwnteusHcKjGYgQq0BfK7GgsgadZkxUgBNE+3p3MSTUpCg CqDeiYZzJyH8LZKiPSxumQmGoJVFM8oc9zDxVjJRto8/AcwdLw+0bG2CtlnaZ81FAbUyILmr7bp2 6J19KIggLAKDBZy5qC9gXg6VmFvjjT67ydJYyuoealE7XSj+tQibo+Gi/LHlKaEG9mANa6MmD4Hq OAu9cKgrbAwhU4aPGh4TwbhXFVZhqDnJtFIWgEY6Y76PaFaSsbWMEcxUP7G4CbBnPNC6VBIcPVRy jXTQh+M4+OO7O/4ahDxAlHRHpFbDZ/u97KCJ2PEaHFIJc3zIRV1jjbY4bDmFlKBRRVFBtwHZDU9f SDEY6MsjTegcDYODSbE3pBD5jIIy6l+EuD4VXLA5qgQp2MIqo7YiUZO91FKKmQPPy8gFJh+CakSs chzgqvt1StSRwFBtVULaCwUqvklK1990kFdEEfiYhnxGX6cDRwPd3OoURBpoTlCqm7em+5e8xNa8 w9sTP12Ie0HYA3J3wOlA16Cdc6r6oo5+VBdoKejnODD6AsGiIG3o3UBLnPcIfQWc8syRZQTn8jZQ x5GIgN5AUAFnRObc4WblukaTT7IP2c0H2Tn6i4wkQT/KdTCd+aC6L/iLd/yl+itpvJTR/FNppEoO ijA6eu91mDuKdhHBSuh9waZ5RNiQE/KIEkLluZVIADSN1QmNkbpTOKbRiE8AonciOv0uPlB7Bp+P PeMQrGcDnxKP+1I04fPgsun9wACjsdg9ZxNscm7xLjgbZXMLjsUQqttKtSyM3dB71UAVpQRx1Sl1 UzHp3MRRbdeoKzfrjVAE1vzprcIJc5+u07KuF4GkpGnRrxb53LpY27WckF5YkB3Xx/dj6x1zbC7a j1uAeOneKiWjt3WrVWgpBKnQzcDnFlOqttuo6VW2KZSUVeTDNzW2NgwMGHzVu6Oi45fejlnihNP8 XGiA7C8qoYBuAkOHnakH6IjxZykGN6PTobC5OoTrAhYHosYzi1qajLFbR2RS/CQynSLKtHDLZ51R L9hTt7pmnnlhQiL+OS3CykUFU1mFlOexP2MCRHQ84pVI88hkmpSHoJlwv96VxFrqXzHQVG0fGtJ5 yTSu6ztjYH546+NJyVgUdYf2qtKoqBQVDDO1W0R4MD9be83r/se14/uRi65MnffEPwNwmnnXC7oG UrplNdSKFrkl8HQeE+evZI+pbAl/1Y8cD9CAnGG9jgEAkkS6DuBjwiNw9L+Q9xoYEqqNYNDcsiAX KjNGVUNqapykYUYo6pdCsda4v7qv/rE176vnz4rH6JuU/bHNypF4Ixoyep4cM2j2MNUIc9mOkUB2 wKqETJQ3oXZDL68EkKuBlCfl0fPwrkd6F0KHGNMQBb2LRNGopxjAHJLOOFIuB2WFsWeM5aF13bSm 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-09-20-ocp/talk.pdf b/doc/talks/2023-09-20-ocp/talk.pdf Binary files differnew file mode 100644 index 00000000..f7b96ef9 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/talk.pdf diff --git a/doc/talks/2023-09-20-ocp/talk.tex b/doc/talks/2023-09-20-ocp/talk.tex new file mode 100644 index 00000000..21ce54b0 --- /dev/null +++ b/doc/talks/2023-09-20-ocp/talk.tex @@ -0,0 +1,1008 @@ +\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} +\date{OCamlPro, 2023-09-20} + +\begin{document} + +\begin{frame} + \centering + \includegraphics[width=.3\linewidth]{../../sticker/Garage.png} + \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/neptune.jpg} + \end{center} + } + \only<3>{ + \begin{center} + \includegraphics[width=.8\linewidth]{assets/atuin.jpg} + \end{center} + } + \only<6>{ + \begin{center} + \includegraphics[width=.8\linewidth]{assets/inframap_jdll2023.pdf} + \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{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{Operating big Garage clusters} + +\begin{frame} + \frametitle{Operating Garage} + \begin{center} + \only<1-2>{ + \includegraphics[width=.9\linewidth]{assets/scr_garage_status.png} + \\\vspace{1em} + \visible<2>{\includegraphics[width=.85\linewidth]{assets/scr_garage_status_broken.png}} + } + \end{center} +\end{frame} + +\begin{frame} + \frametitle{Garage's architecture} + \begin{center} + \only<1>{\includegraphics[width=.45\linewidth]{assets/garage.drawio.pdf}}% + \only<2>{\includegraphics[width=.6\linewidth]{assets/garage_sync.drawio.pdf}}% + \end{center} +\end{frame} + +\begin{frame} + \frametitle{Digging deeper} + \begin{center} + \only<1>{\includegraphics[width=.9\linewidth]{assets/scr_garage_stats.png}} + \only<2>{\includegraphics[width=.6\linewidth]{assets/scr_garage_worker_list.png}} + \only<3>{\includegraphics[width=.6\linewidth]{assets/scr_garage_worker_get.png}} + \end{center} +\end{frame} + +\begin{frame} + \frametitle{Potential limitations and bottlenecks} + \begin{itemize} + \item Global: + \begin{itemize} + \item Max. $\sim$100 nodes per cluster (excluding gateways) + \end{itemize} + \vspace{1em} + \item Metadata: + \begin{itemize} + \item One big bucket = bottleneck, object list on 3 nodes only + \end{itemize} + \vspace{1em} + \item Block manager: + \begin{itemize} + \item Lots of small files on disk + \item Processing the resync queue can be slow + \item Multi-HDD support not yet released (soon!) + \end{itemize} + \end{itemize} +\end{frame} + +\begin{frame} + \frametitle{Deployment advice for very large clusters} + \begin{itemize} + \item Metadata storage: + \begin{itemize} + \item ZFS mirror (x2) on fast NVMe + \item Use LMDB storage engine + \end{itemize} + \vspace{.5em} + \item Data block storage: + \begin{itemize} + \item Wait for v0.9 with multi-HDD support + \item XFS on individual drives + \item Increase block size (1MB $\to$ 10MB, requires more RAM and good networking) + \item Tune \texttt{resync-tranquility} and \texttt{resync-worker-count} dynamically + \end{itemize} + \vspace{.5em} + \item Other : + \begin{itemize} + \item Split data over several buckets + \item Use less than 100 storage nodes + \item Use gateway nodes + \end{itemize} + \vspace{.5em} + \end{itemize} + Current deployments: $< 10$ TB, we don't have much experience with more +\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}}% + \end{center} + \visible<2->{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 : @@ -48,6 +48,10 @@ pkgsSrc = nixpkgs; cargo2nixOverlay = cargo2nix.overlays.default; release = false; - }).workspaceShell { packages = [ pkgs.rustfmt ]; }; + }).workspaceShell { packages = with pkgs; [ + rustfmt + clang + mold + ]; }; }); } diff --git a/nix/compile.nix b/nix/compile.nix index c2f557da..efd88bbf 100644 --- a/nix/compile.nix +++ b/nix/compile.nix @@ -189,7 +189,7 @@ let rootFeatures = if features != null then features else - ([ "garage/bundled-libs" "garage/sled" "garage/k2v" ] ++ (if release then [ + ([ "garage/bundled-libs" "garage/sled" "garage/lmdb" "garage/k2v" ] ++ (if release then [ "garage/consul-discovery" "garage/kubernetes-discovery" "garage/metrics" diff --git a/script/dev-bucket.sh b/script/dev-bucket.sh index 9bcf5bda..708c2c43 100755 --- a/script/dev-bucket.sh +++ b/script/dev-bucket.sh @@ -9,11 +9,22 @@ GARAGE_RELEASE="${REPO_FOLDER}/target/release/" NIX_RELEASE="${REPO_FOLDER}/result/bin/" PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH" -garage -c /tmp/config.1.toml bucket create eprouvette -KEY_INFO=$(garage -c /tmp/config.1.toml key new --name opérateur) +if [ -z "$GARAGE_BIN" ]; then + GARAGE_BIN=$(which garage || exit 1) + echo -en "Found garage at: ${GARAGE_BIN}\n" +else + echo -en "Using garage binary at: ${GARAGE_BIN}\n" +fi + +$GARAGE_BIN -c /tmp/config.1.toml bucket create eprouvette +if [ "$GARAGE_08" = "1" ]; then + KEY_INFO=$($GARAGE_BIN -c /tmp/config.1.toml key new --name opérateur) +else + KEY_INFO=$($GARAGE_BIN -c /tmp/config.1.toml key create opérateur) +fi ACCESS_KEY=`echo $KEY_INFO|grep -Po 'GK[a-f0-9]+'` SECRET_KEY=`echo $KEY_INFO|grep -Po 'Secret key: [a-f0-9]+'|grep -Po '[a-f0-9]+$'` -garage -c /tmp/config.1.toml bucket allow eprouvette --read --write --owner --key $ACCESS_KEY +$GARAGE_BIN -c /tmp/config.1.toml bucket allow eprouvette --read --write --owner --key $ACCESS_KEY echo "$ACCESS_KEY $SECRET_KEY" > /tmp/garage.s3 echo "Bucket s3://eprouvette created. Credentials stored in /tmp/garage.s3." diff --git a/script/dev-cluster.sh b/script/dev-cluster.sh index c7fbe08d..6b39255a 100755 --- a/script/dev-cluster.sh +++ b/script/dev-cluster.sh @@ -11,11 +11,16 @@ PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH" FANCYCOLORS=("41m" "42m" "44m" "45m" "100m" "104m") export RUST_BACKTRACE=1 -export RUST_LOG=garage=info,garage_api=debug,netapp=trace +export RUST_LOG=garage=info,garage_api=debug MAIN_LABEL="\e[${FANCYCOLORS[0]}[main]\e[49m" -WHICH_GARAGE=$(which garage || exit 1) -echo -en "${MAIN_LABEL} Found garage at: ${WHICH_GARAGE}\n" +if [ -z "$GARAGE_BIN" ]; then + GARAGE_BIN=$(which garage || exit 1) + echo -en "${MAIN_LABEL} Found garage at: ${GARAGE_BIN}\n" +else + echo -en "${MAIN_LABEL} Using garage binary at: ${GARAGE_BIN}\n" +fi +$GARAGE_BIN --version NETWORK_SECRET="$(openssl rand -hex 32)" @@ -28,6 +33,7 @@ LABEL="\e[${FANCYCOLORS[$count]}[$count]\e[49m" cat > $CONF_PATH <<EOF block_size = 1048576 # objects are split in blocks of maximum this number of bytes metadata_dir = "/tmp/garage-meta-$count" +db_engine = "lmdb" data_dir = "/tmp/garage-data-$count" rpc_bind_addr = "0.0.0.0:$((3900+$count))" # the port other Garage nodes will use to talk to this node rpc_public_addr = "127.0.0.1:$((3900+$count))" @@ -51,7 +57,7 @@ EOF echo -en "$LABEL configuration written to $CONF_PATH\n" -(garage -c /tmp/config.$count.toml server 2>&1|while read r; do echo -en "$LABEL $r\n"; done) & +($GARAGE_BIN -c /tmp/config.$count.toml server 2>&1|while read r; do echo -en "$LABEL $r\n"; done) & done # >>>>>>>>>>>>>>>> END FOR LOOP ON NODES @@ -73,14 +79,14 @@ fi sleep 3 # Establish connections between nodes for count in $(seq 1 3); do - NODE=$(garage -c /tmp/config.$count.toml node id -q) + NODE=$($GARAGE_BIN -c /tmp/config.$count.toml node id -q) for count2 in $(seq 1 3); do - garage -c /tmp/config.$count2.toml node connect $NODE + $GARAGE_BIN -c /tmp/config.$count2.toml node connect $NODE done done RETRY=120 -until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do +until $GARAGE_BIN -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do (( RETRY-- )) if (( RETRY <= 0 )); then echo -en "${MAIN_LABEL} Garage did not start" diff --git a/script/dev-configure.sh b/script/dev-configure.sh index f0a7843d..0649cdbe 100755 --- a/script/dev-configure.sh +++ b/script/dev-configure.sh @@ -9,9 +9,17 @@ GARAGE_RELEASE="${REPO_FOLDER}/target/release/" NIX_RELEASE="${REPO_FOLDER}/result/bin/" PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH" +if [ -z "$GARAGE_BIN" ]; then + GARAGE_BIN=$(which garage || exit 1) + echo -en "Found garage at: ${GARAGE_BIN}\n" +else + echo -en "Using garage binary at: ${GARAGE_BIN}\n" +fi +$GARAGE_BIN --version + sleep 5 RETRY=120 -until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do +until $GARAGE_BIN -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do (( RETRY-- )) if (( RETRY <= 0 )); then echo "garage did not start in time, failing." @@ -21,11 +29,20 @@ until garage -c /tmp/config.1.toml status 2>&1|grep -q HEALTHY ; do sleep 1 done -garage -c /tmp/config.1.toml status \ - | grep 'NO ROLE' \ - | grep -Po '^[0-9a-f]+' \ - | while read id; do - garage -c /tmp/config.1.toml layout assign $id -z dc1 -c 1 - done +if [ "$GARAGE_08" = "1" ]; then + $GARAGE_BIN -c /tmp/config.1.toml status \ + | grep 'NO ROLE' \ + | grep -Po '^[0-9a-f]+' \ + | while read id; do + $GARAGE_BIN -c /tmp/config.1.toml layout assign $id -z dc1 -c 1 + done +else + $GARAGE_BIN -c /tmp/config.1.toml status \ + | grep 'NO ROLE' \ + | grep -Po '^[0-9a-f]+' \ + | while read id; do + $GARAGE_BIN -c /tmp/config.1.toml layout assign $id -z dc1 -c 1G + done +fi -garage -c /tmp/config.1.toml layout apply --version 1 +$GARAGE_BIN -c /tmp/config.1.toml layout apply --version 1 diff --git a/script/dev-env-aws.sh b/script/dev-env-aws.sh index 9436c2c7..808f9cf1 100644 --- a/script/dev-env-aws.sh +++ b/script/dev-env-aws.sh @@ -1,7 +1,7 @@ export AWS_ACCESS_KEY_ID=`cat /tmp/garage.s3 |cut -d' ' -f1` export AWS_SECRET_ACCESS_KEY=`cat /tmp/garage.s3 |cut -d' ' -f2` export AWS_DEFAULT_REGION='garage' - +# FUTUREWORK: set AWS_ENDPOINT_URL instead, once nixpkgs bumps awscli to >=2.13.0. function aws { command aws --endpoint-url http://127.0.0.1:3911 $@ ; } aws --version diff --git a/script/helm/garage/Chart.yaml b/script/helm/garage/Chart.yaml index 86f1239f..346e68ad 100644 --- a/script/helm/garage/Chart.yaml +++ b/script/helm/garage/Chart.yaml @@ -21,4 +21,4 @@ version: 0.4.1 # 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.8.2" +appVersion: "v0.9.0" diff --git a/script/jepsen.garage/.envrc b/script/jepsen.garage/.envrc new file mode 100644 index 00000000..1d953f4b --- /dev/null +++ b/script/jepsen.garage/.envrc @@ -0,0 +1 @@ +use nix diff --git a/script/jepsen.garage/.gitignore b/script/jepsen.garage/.gitignore new file mode 100644 index 00000000..31842a96 --- /dev/null +++ b/script/jepsen.garage/.gitignore @@ -0,0 +1,17 @@ +/target +/classes +/checkouts +profiles.clj +pom.xml +pom.xml.asc +*.jar +*.class +/.lein-* +/.nrepl-port +/.prepl-port +.hgignore +.hg/ +.direnv +/store +/store.* +.vagrant diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md new file mode 100644 index 00000000..50c7eb38 --- /dev/null +++ b/script/jepsen.garage/README.md @@ -0,0 +1,166 @@ +# jepsen.garage + +Jepsen checking of Garage consistency properties. + +## Usage + +Requirements: + +- vagrant +- VirtualBox, configured so that nodes can take an IP in a private network `192.168.56.0/24` (it's the default) +- a user that can create VirtualBox VMs +- leiningen +- gnuplot + +Set up VMs before running tests: + +``` +vagrant up +``` + +Run tests: see commands below. + + +## Results + +### Register linear, without timestamp patch + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 20 --workload reg1 --ops-per-key 100` + +Results without timestamp patch: + +- Fails with a simple clock-scramble nemesis (`--scenario c`). + Explanation: without the timestamp patch, nodes will create objects using their + local clock only as a timestamp, so the ordering will be all over the place if + clocks are scrambled. + +Results with timestamp patch (`--patch tsfix2`): + +- No failure with clock-scramble nemesis + +- Fails with clock-scramble nemesis + partition nemesis (`--scenario cp`). + +**This test is expected to fail.** +Indeed, S3 objects are not meant to behave like linearizable registers. +TODO explain using a counter-example + + +### Read-after-write CRDT register model + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload reg2 --ops-per-key 100` + +Results without timestamp patch: + +- Fails with a simple clock-scramble nemesis (`--scenario c`). + Explanation: old values are not overwritten correctly when their timestamps are in the future. + +Results with timestamp patch (`--patch tsfix2`): + +- No failures with clock-scramble nemesis + partition nemesis (`--scenario cp`). + This proves that `tsfix2` (PR#543) does improve consistency. + +- **Fails with layout reconfiguration nemesis** (`--scenario r`). + Example of a failed run: `garage reg2/20231024T120806.899+0200`. + This is the failure mode we are looking for and trying to fix for NLnet task 3. + +Results with NLnet task 3 code (commit 707442f5de, `--patch task3a`): + +- No failures with `--scenario r` (0 of 10 runs), `--scenario pr` (0 of 10 runs), + `--scenario cpr` (0 of 10 runs) and `--scenario dpr` (0 of 10 runs). + +- Same with `--patch task3c` (commit `0041b013`, the final version). + + +### Set, basic test (write some items, then read) + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 200 --concurrency 200 --workload set1 --ops-per-key 100` + +Results without NLnet task3 code (`--patch tsfix2`): + +- For now, no failures with clock-scramble nemesis + partition nemesis -> TODO long test run + +- Does not seem to fail with only the layout reconfiguation nemesis (<10 runs), although theoretically it could + +- **Fails with the partition + layout reconfiguration nemesis** (`--scenario pr`). + Example of a failed run: `garage set1/20231024T172214.488+0200` (1 failure in 4 runs). + This is the failure mode we are looking for and trying to fix for NLnet task 3. + +Results with NLnet task 3 code (commit 707442f5de, `--patch task3a`): + +- The tests are buggy and often result in an "unknown" validity status, which + is caused by some requests not returning results during network partitions or + other nemesis-induced broken cluster states. However, when the tests were + able to finish, there were no failures with scenarios `r`, `pr`, `cpr`, + `dpr`. + + +### Set, continuous test (interspersed reads and writes) + +Command: `lein run test --nodes-file nodes.vagrant --time-limit 60 --rate 100 --concurrency 100 --workload set2 --ops-per-key 100` + +Results without NLnet task3 code (`--patch tsfix2`): + +- No failures with clock-scramble nemesis + db nemesis + partition nemesis (`--scenario cdp`) (0 failures in 10 runs). + +- **Fails with just layout reconfiguration nemesis** (`--scenario r`). + Example of a failed run: `garage set2/20231025T141940.198+0200` (10 failures in 10 runs). + This is the failure mode we are looking for and trying to fix for NLnet task 3. + +Results with NLnet task3 code (commit 707442f5de, `--patch task3a`): + +- No failures with `--scenario r` (0 of 10 runs), `--scenario pr` (0 of 10 runs), + `--scenario cpr` (0 of 10 runs) and `--scenario dpr` (0 of 10 runs). + +- Same with `--patch task3c` (commit `0041b013`, the final version). + + +## NLnet task 3 final results + +- With code from task3 (`--patch task3c`): [reg2 and set2](results/Results-2023-12-13-task3c.png), [set1](results/Results-2023-12-14-task3-set1.png). +- Without (`--patch tsfix2`): [reg2 and set2](results/Results-2023-12-13-tsfix2.png), set1 TBD. + +## Investigating (and fixing) errors + +### Segfaults + +They are due to the download being interrupted in the middle (^C during first launch on clean VMs), the `garage` binary is truncated. +Add `:force?` to the `cached-wget!` call in `daemon.clj` to re-download the binary, +or restar the VMs to clear temporary files. + +### In `jepsen.garage`: prefix wierdness + +In `store/garage set1/20231019T163358.615+0200`: + +``` +INFO [2023-10-19 16:35:20,977] clojure-agent-send-off-pool-207 - jepsen.garage.set list results for prefix set20/ : (set13/0 set13/1 set13/10 set13/11 set13/12 set13/13 set13/14 set13/15 set13/16 set13/17 set13/18 set13/19 set13/2 set13/20 set13/21 set13/22 set13/23 set13/24 set13/25 set13/26 set13/27 set13/28 set13/29 set13/3 set13/30 set13/31 set13/32 set13/33 set13/34 set13/35 set13/36 set13/37 set13/38 set13/39 set13/4 set13/40 set13/41 set13/42 set13/43 set13/44 set13/45 set13/46 set13/47 set13/48 set13/49 set13/5 set13/50 set13/51 set13/52 set13/53 set13/54 set13/55 set13/56 set13/57 set13/58 set13/59 set13/6 set13/60 set13/61 set13/62 set13/63 set13/64 set13/65 set13/66 set13/67 set13/68 set13/69 set13/7 set13/70 set13/71 set13/72 set13/73 set13/74 set13/75 set13/76 set13/77 set13/78 set13/79 set13/8 set13/80 set13/81 set13/82 set13/83 set13/84 set13/85 set13/86 set13/87 set13/88 set13/89 set13/9 set13/90 set13/91 set13/92 set13/93 set13/94 set13/95 set13/96 set13/97 set13/98 set13/99) (node: http://192.168.56.25:3900 ) +``` + +After inspecting, the actual S3 call made was with prefix "set13/", so at least this is not an error in Garage itself but in the jepsen code. + +Finally found out that this was due to closures not correctly capturing their context in the list function in s3api.clj (wtf clojure?) +Not sure exactly where it came from but it seems to have been fixed by making list-inner a separate function and not a sub-function, +and passing all values that were previously in the context (creds and prefix) as additional arguments. + +### `reg2` test inconsistency, even with timestamp fix + +The reg2 test is our custom checker for CRDT read-after-write on individual object keys, acting as registers which can be updated. +The test fails without the timestamp fix, which is expected as the clock scrambler will prevent nodes from having a correct ordering of objects. + +With the timestamp fix (`--patch tsfix1`), the happenned-before relationship should at least be respected, meaning that when a PutObject call starts +after another PutObject call has ended, the second call should overwrite the value of the first call, and that value should not be +readable by future GetObject calls. +However, we observed inconsistencies even with the timestamp fix. + +The inconsistencies seemed to always happenned after writing a nil value, which translates to a DeleteObject call +instead of a PutObject. By removing the possibility of writing nil values, therefore only doing +PutObject calls, the issue disappears. There is therefore an issue to fix in DeleteObject. + +The issue in DeleteObject seems to have been fixed by commit `c82d91c6bccf307186332b6c5c6fc0b128b1b2b1`, which can be used using `--patch tsfix2`. + + +## License + +Copyright © 2023 Alex Auvolat + +This program and the accompanying materials are made available under the +terms of the GNU Affero General Public License v3.0. diff --git a/script/jepsen.garage/Vagrantfile b/script/jepsen.garage/Vagrantfile new file mode 100644 index 00000000..b54c2426 --- /dev/null +++ b/script/jepsen.garage/Vagrantfile @@ -0,0 +1,40 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : +# + +def vm(config, hostname, ip) + config.vm.hostname = hostname + config.vm.network "private_network", ip: ip +end + +Vagrant.configure("2") do |config| + config.vm.box = "generic/debian10" + + config.vm.provider "virtualbox" do |vb| + vb.gui = false + vb.memory = "512" + vb.customize ["modifyvm", :id, "--vram=12"] + end + + config.vm.provision "shell", inline: <<-SHELL + echo "root:root" | chpasswd + mkdir -p /root/.ssh + echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJpaBZdYxHqMxhv2RExAOa7nkKhPBOHupMP3mYaZ73w9 lx@lindy" >> /root/.ssh/authorized_keys + SHELL + + config.vm.define "n1" do |config| vm(config, "n1", "192.168.56.21") end + config.vm.define "n2" do |config| vm(config, "n2", "192.168.56.22") end + config.vm.define "n3" do |config| vm(config, "n3", "192.168.56.23") end + config.vm.define "n4" do |config| vm(config, "n4", "192.168.56.24") end + config.vm.define "n5" do |config| vm(config, "n5", "192.168.56.25") end + config.vm.define "n6" do |config| vm(config, "n6", "192.168.56.26") end + config.vm.define "n7" do |config| vm(config, "n7", "192.168.56.27") end + + config.vm.define "n8" do |config| vm(config, "n8", "192.168.56.28") end + config.vm.define "n9" do |config| vm(config, "n9", "192.168.56.29") end + config.vm.define "n10" do |config| vm(config, "n10", "192.168.56.30") end + config.vm.define "n11" do |config| vm(config, "n11", "192.168.56.31") end + config.vm.define "n12" do |config| vm(config, "n12", "192.168.56.32") end + config.vm.define "n13" do |config| vm(config, "n13", "192.168.56.33") end + config.vm.define "n14" do |config| vm(config, "n14", "192.168.56.34") end +end diff --git a/script/jepsen.garage/all_tests_1.sh b/script/jepsen.garage/all_tests_1.sh new file mode 100755 index 00000000..b5397d13 --- /dev/null +++ b/script/jepsen.garage/all_tests_1.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +set -x + +#for ppatch in task3c task3a tsfix2; do +for ppatch in tsfix2; do + #for psc in c cp cdp r pr cpr dpr; do + for psc in cdp r pr cpr dpr; do + #for ptsk in reg2 set1 set2; do + for ptsk in set1; do + for irun in $(seq 10); do + lein run test --nodes-file nodes.vagrant \ + --time-limit 60 --rate 100 --concurrency 100 --ops-per-key 100 \ + --workload $ptsk --patch $ppatch --scenario $psc + done + done + done +done diff --git a/script/jepsen.garage/all_tests_2.sh b/script/jepsen.garage/all_tests_2.sh new file mode 100755 index 00000000..641643ed --- /dev/null +++ b/script/jepsen.garage/all_tests_2.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash + +set -x + +#for ppatch in task3c tsfix2; do +for ppatch in tsfix2; do + for psc in cdp r pr cpr dpr; do + for ptsk in set1; do + for irun in $(seq 10); do + lein run test --nodes-file nodes2.vagrant \ + --time-limit 60 --rate 100 --concurrency 100 --ops-per-key 100 \ + --workload $ptsk --patch $ppatch --scenario $psc + done + done + done +done diff --git a/script/jepsen.garage/jaeger.sh b/script/jepsen.garage/jaeger.sh new file mode 100644 index 00000000..7f67b61b --- /dev/null +++ b/script/jepsen.garage/jaeger.sh @@ -0,0 +1,13 @@ +docker stop jaeger +docker rm jaeger + +# UI is on localhost:16686 +# otel-grpc collector is on localhost:4317 +# otel-http collector is on localhost:4318 + +docker run -d --name jaeger \ + -e COLLECTOR_OTLP_ENABLED=true \ + -p 4317:4317 \ + -p 4318:4318 \ + -p 16686:16686 \ + jaegertracing/all-in-one:1.50 diff --git a/script/jepsen.garage/nodes.vagrant b/script/jepsen.garage/nodes.vagrant new file mode 100644 index 00000000..9e5694e6 --- /dev/null +++ b/script/jepsen.garage/nodes.vagrant @@ -0,0 +1,7 @@ +192.168.56.21 +192.168.56.22 +192.168.56.23 +192.168.56.24 +192.168.56.25 +192.168.56.26 +192.168.56.27 diff --git a/script/jepsen.garage/nodes2.vagrant b/script/jepsen.garage/nodes2.vagrant new file mode 100644 index 00000000..842bf276 --- /dev/null +++ b/script/jepsen.garage/nodes2.vagrant @@ -0,0 +1,7 @@ +192.168.56.28 +192.168.56.29 +192.168.56.30 +192.168.56.31 +192.168.56.32 +192.168.56.33 +192.168.56.34 diff --git a/script/jepsen.garage/project.clj b/script/jepsen.garage/project.clj new file mode 100644 index 00000000..59d45484 --- /dev/null +++ b/script/jepsen.garage/project.clj @@ -0,0 +1,10 @@ +(defproject jepsen.garage "0.1.0-SNAPSHOT" + :description "Jepsen testing for Garage" + :url "https://git.deuxfleurs.fr/Deuxfleurs/garage" + :license {:name "AGPLv3" + :url "https://www.gnu.org/licenses/agpl-3.0.en.html"} + :main jepsen.garage + :dependencies [[org.clojure/clojure "1.11.1"] + [jepsen "0.3.3-SNAPSHOT"] + [amazonica "0.3.163"]] + :repl-options {:init-ns jepsen.garage}) diff --git a/script/jepsen.garage/results/Results-2023-11-16.png b/script/jepsen.garage/results/Results-2023-11-16.png Binary files differnew file mode 100644 index 00000000..26dac833 --- /dev/null +++ b/script/jepsen.garage/results/Results-2023-11-16.png diff --git a/script/jepsen.garage/results/Results-2023-12-13-task3c.png b/script/jepsen.garage/results/Results-2023-12-13-task3c.png Binary files differnew file mode 100644 index 00000000..216043c3 --- /dev/null +++ b/script/jepsen.garage/results/Results-2023-12-13-task3c.png diff --git a/script/jepsen.garage/results/Results-2023-12-13-tsfix2.png b/script/jepsen.garage/results/Results-2023-12-13-tsfix2.png Binary files differnew file mode 100644 index 00000000..147d25e9 --- /dev/null +++ b/script/jepsen.garage/results/Results-2023-12-13-tsfix2.png diff --git a/script/jepsen.garage/results/Results-2023-12-14-task3-set1.png b/script/jepsen.garage/results/Results-2023-12-14-task3-set1.png Binary files differnew file mode 100644 index 00000000..dbff3a95 --- /dev/null +++ b/script/jepsen.garage/results/Results-2023-12-14-task3-set1.png diff --git a/script/jepsen.garage/shell.nix b/script/jepsen.garage/shell.nix new file mode 100644 index 00000000..01e4c845 --- /dev/null +++ b/script/jepsen.garage/shell.nix @@ -0,0 +1,18 @@ +{ pkgs ? import <nixpkgs> { + overlays = [ + (self: super: { + jdk = super.jdk11; + jre = super.jre11; + }) + ]; +} }: +pkgs.mkShell { + nativeBuildInputs = with pkgs; [ + leiningen + jdk + jna + vagrant + gnuplot + graphviz + ]; +} diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj new file mode 100644 index 00000000..446b81de --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage.clj @@ -0,0 +1,105 @@ +(ns jepsen.garage + (:require + [clojure.string :as str] + [jepsen + [checker :as checker] + [cli :as cli] + [generator :as gen] + [nemesis :as nemesis] + [tests :as tests]] + [jepsen.os.debian :as debian] + [jepsen.garage + [daemon :as grg] + [nemesis :as grgNemesis] + [reg :as reg] + [set :as set]])) + +(def workloads + "A map of workload names to functions that construct workloads, given opts." + {"reg1" reg/workload1 + "reg2" reg/workload2 + "set1" set/workload1 + "set2" set/workload2}) + +(def scenari + "A map of scenari to the associated nemesis" + {"c" grgNemesis/scenario-c + "cp" grgNemesis/scenario-cp + "r" grgNemesis/scenario-r + "pr" grgNemesis/scenario-pr + "cpr" grgNemesis/scenario-cpr + "cdp" grgNemesis/scenario-cdp + "dpr" grgNemesis/scenario-dpr}) + +(def patches + "A map of patch names to Garage builds" + {"default" "v0.9.0" + "tsfix1" "d146cdd5b66ca1d3ed65ce93ca42c6db22defc09" + "tsfix2" "c82d91c6bccf307186332b6c5c6fc0b128b1b2b1" + "task3a" "707442f5de416fdbed4681a33b739f0a787b7834" + "task3b" "431b28e0cfdc9cac6c649193cf602108a8b02997" + "task3c" "0041b013a473e3ae72f50209d8f79db75a72848b"}) + +(def cli-opts + "Additional command line options." + [["-p" "--patch NAME" "Garage patch to use" + :default "default" + :validate [patches (cli/one-of patches)]] + ["-s" "--scenario NAME" "Nemesis scenario to run" + :default "cp" + :validate [scenari (cli/one-of scenari)]] + ["-r" "--rate HZ" "Approximate number of requests per second, per thread." + :default 10 + :parse-fn read-string + :validate [#(and (number? %) (pos? %)) "Must be a positive number"]] + [nil "--ops-per-key NUM" "Maximum number of operations on any given key." + :default 100 + :parse-fn parse-long + :validate [pos? "Must be a positive integer."]] + ["-w" "--workload NAME" "Workload of test to run" + :default "reg1" + :validate [workloads (cli/one-of workloads)]]]) + +(defn garage-test + "Given an options map from the command line runner (e.g. :nodes, :ssh, + :concurrency, ...), constructs a test map." + [opts] + (let [garage-version (get patches (:patch opts)) + db (grg/db garage-version) + workload ((get workloads (:workload opts)) opts) + scenario ((get scenari (:scenario opts)) (assoc opts :db db))] + (merge tests/noop-test + opts + {:pure-generators true + :name (str "garage-" (name (:patch opts)) " " (name (:workload opts)) " " (name (:scenario opts))) + :os debian/os + :db db + :client (:client workload) + :generator (gen/phases + (->> + (:generator workload) + (gen/stagger (/ (:rate opts))) + (gen/nemesis (:generator scenario)) + (gen/time-limit (:time-limit opts))) + (gen/log "Healing cluster") + (gen/nemesis (:final-generator scenario)) + (gen/log "Waiting for recovery") + (gen/sleep 10) + (gen/log "Running final generator") + (gen/clients (:final-generator workload)) + (gen/log "Generators all done")) + :nemesis (:nemesis scenario) + :checker (checker/compose + {:perf (checker/perf (:perf scenario)) + :workload (:checker workload)}) + }))) + + +(defn -main + "Handles command line arguments. Can either run a test, or a web server for + browsing results." + [& args] + (cli/run! (merge (cli/single-test-cmd {:test-fn garage-test + :opt-spec cli-opts}) + (cli/serve-cmd)) + args)) diff --git a/script/jepsen.garage/src/jepsen/garage/daemon.clj b/script/jepsen.garage/src/jepsen/garage/daemon.clj new file mode 100644 index 00000000..d407dd29 --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/daemon.clj @@ -0,0 +1,152 @@ +(ns jepsen.garage.daemon + (:require [clojure.tools.logging :refer :all] + [jepsen [control :as c] + [core :as jepsen] + [db :as db]] + [jepsen.control.util :as cu])) + +; CONSTANTS -- HOW GARAGE IS SET UP + +(def base-dir "/opt/garage") +(def data-dir (str base-dir "/data")) +(def meta-dir (str base-dir "/meta")) +(def binary (str base-dir "/garage")) +(def logfile (str base-dir "/garage.log")) +(def pidfile (str base-dir "/garage.pid")) + +(def admin-token "icanhazadmin") +(def access-key-id "GK8bfb6a51286071c6c9cd8bc3") +(def secret-access-key "b0be95f71c1c6f16858a9edf395078b75c12ecb6b1c03385c4ae92076e4994a3") +(def bucket-name "jepsen") + +; THE GARAGE DB + +(defn install! + "Download and install Garage" + [node version] + (c/su + (c/trace + (info node "installing garage" version) + (c/exec :mkdir :-p base-dir) + (let [url (str "https://garagehq.deuxfleurs.fr/_releases/" version "/x86_64-unknown-linux-musl/garage") + cache (cu/cached-wget! url)] + (c/exec :cp cache binary)) + (c/exec :chmod :+x binary)))) + +(defn configure! + "Configure Garage" + [node] + (c/su + (c/trace + (cu/write-file! + (str "rpc_secret = \"0fffabe52542c2b89a56b2efb7dfd477e9dafb285c9025cbdf1de7ca21a6b372\"\n" + "rpc_bind_addr = \"0.0.0.0:3901\"\n" + "rpc_public_addr = \"" node ":3901\"\n" + "db_engine = \"lmdb\"\n" + "replication_mode = \"2\"\n" + "data_dir = \"" data-dir "\"\n" + "metadata_dir = \"" meta-dir "\"\n" + "[s3_api]\n" + "s3_region = \"us-east-1\"\n" + "api_bind_addr = \"0.0.0.0:3900\"\n" + "[k2v_api]\n" + "api_bind_addr = \"0.0.0.0:3902\"\n" + "[admin]\n" + "api_bind_addr = \"0.0.0.0:3903\"\n" + "admin_token = \"" admin-token "\"\n" + "trace_sink = \"http://192.168.56.1:4317\"\n") + "/etc/garage.toml")))) + +(defn connect-node! + "Connect a Garage node to the rest of the cluster" + [test node] + (c/trace + (let [node-id (c/exec binary :node :id :-q)] + (info node "node id:" node-id) + (c/on-many (:nodes test) + (c/exec binary :node :connect node-id))))) + +(defn configure-node! + "Configure a Garage node to be part of a cluster layout" + [test node] + (c/trace + (let [node-id (c/exec binary :node :id :-q)] + (c/on (jepsen/primary test) + (c/exec binary :layout :assign (subs node-id 0 16) :-c :1G :-z :dc1 :-t node))))) + +(defn finalize-config! + "Apply the layout and create a key/bucket pair in the cluster" + [node] + (c/trace + (c/exec binary :layout :apply :--version 1) + (info node "garage status:" (c/exec binary :status)) + (c/exec binary :key :import access-key-id secret-access-key :--yes) + (c/exec binary :bucket :create bucket-name) + (c/exec binary :bucket :allow :--read :--write bucket-name :--key access-key-id) + (info node "key info: " (c/exec binary :key :info access-key-id)))) + +(defn db + "Garage DB for a particular version" + [version] + (reify db/DB + (setup! [_ test node] + (install! node version) + (configure! node) + (cu/start-daemon! + {:logfile logfile + :pidfile pidfile + :chdir base-dir + :env {:RUST_LOG "garage=debug,garage_api=trace"}} + binary + :server) + (c/exec :sleep 3) + + (jepsen/synchronize test) + (connect-node! test node) + + (jepsen/synchronize test) + (configure-node! test node) + + (jepsen/synchronize test) + (when (= node (jepsen/primary test)) + (finalize-config! node))) + + (teardown! [_ test node] + (info node "tearing down garage" version) + (c/su + (cu/stop-daemon! binary pidfile) + (c/exec :rm :-rf logfile) + (c/exec :rm :-rf data-dir) + (c/exec :rm :-rf meta-dir))) + + db/Pause + (pause! [_ test node] + (cu/grepkill! :stop binary)) + (resume! [_ test node] + (cu/grepkill! :cont binary)) + + db/Kill + (kill! [_ test node] + (cu/stop-daemon! binary pidfile)) + (start! [_ test node] + (cu/start-daemon! + {:logfile logfile + :pidfile pidfile + :chdir base-dir + :env {:RUST_LOG "garage=debug,garage_api=trace"}} + binary + :server)) + + db/LogFiles + (log-files [_ test node] + [logfile]))) + +(defn creds + "Obtain Garage credentials for node" + [node] + {:access-key access-key-id + :secret-key secret-access-key + :endpoint (str "http://" node ":3900") + :bucket bucket-name + :client-config {:path-style-access-enabled true}}) + diff --git a/script/jepsen.garage/src/jepsen/garage/nemesis.clj b/script/jepsen.garage/src/jepsen/garage/nemesis.clj new file mode 100644 index 00000000..dfce0255 --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/nemesis.clj @@ -0,0 +1,142 @@ +(ns jepsen.garage.nemesis + (:require [clojure.tools.logging :refer :all] + [jepsen [control :as c] + [core :as jepsen] + [generator :as gen] + [nemesis :as nemesis]] + [jepsen.nemesis.combined :as combined] + [jepsen.garage.daemon :as grg] + [jepsen.control.util :as cu])) + +; ---- reconfiguration nemesis ---- + +(defn configure-present! + "Configure node to be active in new cluster layout" + [test nodes] + (info "configure-present!" nodes) + (let [node-ids (c/on-many nodes (c/exec grg/binary :node :id :-q)) + node-id-strs (map (fn [[_ v]] (subs v 0 16)) node-ids)] + (c/on + (jepsen/primary test) + (apply c/exec (concat [grg/binary :layout :assign :-c :1G] node-id-strs))))) + +(defn configure-absent! + "Configure nodes to be active in new cluster layout" + [test nodes] + (info "configure-absent!" nodes) + (let [node-ids (c/on-many nodes (c/exec grg/binary :node :id :-q)) + node-id-strs (map (fn [[_ v]] (subs v 0 16)) node-ids)] + (c/on + (jepsen/primary test) + (apply c/exec (concat [grg/binary :layout :assign :-g] node-id-strs))))) + +(defn finalize-config! + "Apply the proposed cluster layout" + [test] + (let [layout-show (c/on (jepsen/primary test) (c/exec grg/binary :layout :show)) + [_ layout-next-version] (re-find #"apply --version (\d+)\n" layout-show)] + (if layout-next-version + (do + (info "layout show: " layout-show "; next-version: " layout-next-version) + (c/on (jepsen/primary test) + (c/exec grg/binary :layout :apply :--version layout-next-version))) + (info "no layout changes to apply")))) + +(defn reconfigure-subset + "Reconfigure cluster with only a subset of nodes" + [cnt] + (reify nemesis/Nemesis + (setup! [this test] this) + + (invoke! [this test op] op + (case (:f op) + :start + (let [[keep-nodes remove-nodes] + (->> (:nodes test) + shuffle + (split-at cnt))] + (info "layout split: keep " keep-nodes ", remove " remove-nodes) + (configure-present! test keep-nodes) + (configure-absent! test remove-nodes) + (finalize-config! test) + (assoc op :value keep-nodes)) + :stop + (do + (info "layout un-split: all nodes=" (:nodes test)) + (configure-present! test (:nodes test)) + (finalize-config! test) + (assoc op :value (:nodes test))))) + + (teardown! [this test] this))) + +; ---- nemesis scenari ---- + +(defn nemesis-op + "A generator for a single nemesis operation" + [op] + (fn [_ _] {:type :info, :f op})) + +(defn reconfiguration-package + "Cluster reconfiguration nemesis package" + [opts] + {:generator (->> + (gen/mix [(nemesis-op :reconfigure-start) + (nemesis-op :reconfigure-stop)]) + (gen/stagger (:interval opts 5))) + :final-generator {:type :info, :f :reconfigure-stop} + :nemesis (nemesis/compose + {{:reconfigure-start :start + :reconfigure-stop :stop} (reconfigure-subset 3)}) + :perf #{{:name "reconfigure" + :start #{:reconfigure-start} + :stop #{:reconfigur-stop} + :color "#A197E9"}}}) + +(defn scenario-c + "Clock modifying scenario" + [opts] + (combined/clock-package {:db (:db opts), :interval 1, :faults #{:clock}})) + +(defn scenario-cp + "Clock modifying + partition scenario" + [opts] + (combined/compose-packages + [(combined/clock-package {:db (:db opts), :interval 1, :faults #{:clock}}) + (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}})])) + +(defn scenario-r + "Cluster reconfiguration scenario" + [opts] + (reconfiguration-package {:interval 1})) + +(defn scenario-pr + "Partition + cluster reconfiguration scenario" + [opts] + (combined/compose-packages + [(combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}}) + (reconfiguration-package {:interval 1})])) + +(defn scenario-cpr + "Clock scramble + partition + cluster reconfiguration scenario" + [opts] + (combined/compose-packages + [(combined/clock-package {:db (:db opts), :interval 1, :faults #{:clock}}) + (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}}) + (reconfiguration-package {:interval 1})])) + +(defn scenario-cdp + "Clock modifying + db + partition scenario" + [opts] + (combined/compose-packages + [(combined/clock-package {:db (:db opts), :interval 1, :faults #{:clock}}) + (combined/db-package {:db (:db opts), :interval 1, :faults #{:db :pause :kill}}) + (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}})])) + +(defn scenario-dpr + "Db + partition + cluster reconfiguration scenario" + [opts] + (combined/compose-packages + [(combined/db-package {:db (:db opts), :interval 1, :faults #{:db :pause :kill}}) + (combined/partition-package {:db (:db opts), :interval 1, :faults #{:partition}}) + (reconfiguration-package {:interval 1})])) + diff --git a/script/jepsen.garage/src/jepsen/garage/reg.clj b/script/jepsen.garage/src/jepsen/garage/reg.clj new file mode 100644 index 00000000..39708c0b --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/reg.clj @@ -0,0 +1,143 @@ +(ns jepsen.garage.reg + (:require [clojure.tools.logging :refer :all] + [clojure.string :as str] + [clojure.set :as set] + [jepsen [checker :as checker] + [cli :as cli] + [client :as client] + [control :as c] + [db :as db] + [generator :as gen] + [independent :as independent] + [nemesis :as nemesis] + [util :as util] + [tests :as tests]] + [jepsen.checker.timeline :as timeline] + [jepsen.control.util :as cu] + [jepsen.os.debian :as debian] + [jepsen.garage.daemon :as grg] + [jepsen.garage.s3api :as s3] + [knossos.model :as model] + [slingshot.slingshot :refer [try+]])) + +(defn op-get [_ _] {:type :invoke, :f :read, :value nil}) +(defn op-put [_ _] {:type :invoke, :f :write, :value (str (rand-int 99))}) +(defn op-del [_ _] {:type :invoke, :f :write, :value nil}) + +(defrecord RegClient [creds] + client/Client + (open! [this test node] + (assoc this :creds (grg/creds node))) + (setup! [this test]) + (invoke! [this test op] + (try+ + (let [[k v] (:value op)] + (case (:f op) + :read + (util/timeout + 10000 + (assoc op :type :fail, :error ::timeout) + (let [value (s3/get (:creds this) k)] + (assoc op :type :ok, :value (independent/tuple k value)))) + :write + (util/timeout + 10000 + (assoc op :type :info, :error ::timeout) + (do + (s3/put (:creds this) k v) + (assoc op :type :ok))))) + (catch (re-find #"Unavailable" (.getMessage %)) ex + (assoc op :type :info, :error ::unavailable)) + (catch (re-find #"Broken pipe" (.getMessage %)) ex + (assoc op :type :info, :error ::broken-pipe)) + (catch (re-find #"Connection refused" (.getMessage %)) ex + (assoc op :type :info, :error ::connection-refused)))) + (teardown! [this test]) + (close! [this test])) + +(defn reg-read-after-write + "Read-after-Write checker for register operations" + [] + (reify checker/Checker + (check [this test history opts] + (let [init {:put-values {-1 nil} + :put-done #{-1} + :put-in-progress {} + :read-can-contain {} + :bad-reads #{}} + final (reduce + (fn [state op] + (let [current-values (set/union + (set (map (fn [idx] (get (:put-values state) idx)) (:put-done state))) + (set (map (fn [[_ [idx _]]] (get (:put-values state) idx)) (:put-in-progress state)))) + read-can-contain (reduce + (fn [rcc [idx v]] (assoc rcc idx (set/union current-values v))) + {} (:read-can-contain state))] + (info "--------") + (info "state: " state) + (info "current-values: " current-values) + (info "read-can-contain: " read-can-contain) + (info "op: " op) + (case [(:type op) (:f op)] + ([:invoke :write]) + (assoc state + :read-can-contain read-can-contain + :put-values (assoc (:put-values state) (:index op) (:value op)) + :put-in-progress (assoc (:put-in-progress state) (:process op) [(:index op) (:put-done state)])) + ([:ok :write]) + (let [[index overwrites] (get (:put-in-progress state) (:process op))] + (assoc state + :read-can-contain read-can-contain + :put-in-progress (dissoc (:put-in-progress state) (:process op)) + :put-done + (conj + (set/difference (:put-done state) overwrites) + index))) + ([:invoke :read]) + (assoc state + :read-can-contain (assoc read-can-contain (:process op) current-values)) + ([:ok :read]) + (let [this-read-can-contain (get read-can-contain (:process op)) + bad-reads (if (contains? this-read-can-contain (:value op)) + (:bad-reads state) + (conj (:bad-reads state) [(:process op) (:index op) (:value op) this-read-can-contain]))] + (info "this-read-can-contain: " this-read-can-contain) + (assoc state + :read-can-contain (dissoc read-can-contain (:process op)) + :bad-reads bad-reads)) + state))) + init history) + valid? (empty? (:bad-reads final))] + (assoc final :valid? valid?))))) + +(defn workload-common + "Common parts of workload" + [opts] + {:client (RegClient. nil) + :generator (independent/concurrent-generator + 10 + (range) + (fn [k] + (->> + (gen/mix [op-get op-put op-del]) + (gen/limit (:ops-per-key opts)))))}) + +(defn workload1 + "Tests linearizable reads and writes" + [opts] + (assoc (workload-common opts) + :checker (independent/checker + (checker/compose + {:linear (checker/linearizable + {:model (model/register) + :algorithm :linear}) + :timeline (timeline/html)})))) + +(defn workload2 + "Tests CRDT reads and writes" + [opts] + (assoc (workload-common opts) + :checker (independent/checker + (checker/compose + {:reg-read-after-write (reg-read-after-write) + :timeline (timeline/html)})))) diff --git a/script/jepsen.garage/src/jepsen/garage/s3api.clj b/script/jepsen.garage/src/jepsen/garage/s3api.clj new file mode 100644 index 00000000..531e0157 --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/s3api.clj @@ -0,0 +1,48 @@ +(ns jepsen.garage.s3api + (:require [clojure.tools.logging :refer :all] + [jepsen [control :as c]] + [amazonica.aws.s3 :as s3] + [slingshot.slingshot :refer [try+]])) + +; GARAGE S3 HELPER FUNCTIONS + +(defn get + "Helper for GetObject" + [creds k] + (try+ + (-> (s3/get-object creds (:bucket creds) k) + :input-stream + slurp) + (catch (re-find #"Key not found" (.getMessage %)) ex + nil))) + +(defn put + "Helper for PutObject or DeleteObject (is a delete if value is nil)" + [creds k v] + (if (= v nil) + (s3/delete-object creds + :bucket-name (:bucket creds) + :key k) + (let [some-bytes (.getBytes v "UTF-8") + bytes-stream (java.io.ByteArrayInputStream. some-bytes)] + (s3/put-object creds + :bucket-name (:bucket creds) + :key k + :input-stream bytes-stream + :metadata {:content-length (count some-bytes)})))) + +(defn list-inner [creds prefix ct accum] + (let [list-result (s3/list-objects-v2 creds + {:bucket-name (:bucket creds) + :prefix prefix + :continuation-token ct}) + new-object-summaries (:object-summaries list-result) + new-objects (map (fn [d] (:key d)) new-object-summaries) + objects (concat new-objects accum)] + (if (:truncated? list-result) + (list-inner creds prefix (:next-continuation-token list-result) objects) + objects))) +(defn list + "Helper for ListObjects -- just lists everything in the bucket" + [creds prefix] + (list-inner creds prefix nil [])) diff --git a/script/jepsen.garage/src/jepsen/garage/set.clj b/script/jepsen.garage/src/jepsen/garage/set.clj new file mode 100644 index 00000000..2c7a2ccd --- /dev/null +++ b/script/jepsen.garage/src/jepsen/garage/set.clj @@ -0,0 +1,135 @@ +(ns jepsen.garage.set + (:require [clojure.tools.logging :refer :all] + [clojure.string :as str] + [clojure.set :as set] + [jepsen [checker :as checker] + [cli :as cli] + [client :as client] + [control :as c] + [checker :as checker] + [db :as db] + [generator :as gen] + [independent :as independent] + [nemesis :as nemesis] + [util :as util] + [tests :as tests]] + [jepsen.checker.timeline :as timeline] + [jepsen.control.util :as cu] + [jepsen.os.debian :as debian] + [jepsen.garage.daemon :as grg] + [jepsen.garage.s3api :as s3] + [knossos.model :as model] + [slingshot.slingshot :refer [try+]])) + +(defn op-add-rand100 [_ _] {:type :invoke, :f :add, :value (rand-int 100)}) +(defn op-read [_ _] {:type :invoke, :f :read, :value nil}) + +(defrecord SetClient [creds] + client/Client + (open! [this test node] + (assoc this :creds (grg/creds node))) + (setup! [this test]) + (invoke! [this test op] + (try+ + (let [[k v] (:value op) + prefix (str "set" k "/")] + (case (:f op) + :add + (util/timeout + 10000 + (assoc op :type :info, :error ::timeout) + (do + (s3/put (:creds this) (str prefix v) "present") + (assoc op :type :ok))) + :read + (util/timeout + 10000 + (assoc op :type :fail, :error ::timeout) + (do + (let [items (s3/list (:creds this) prefix)] + (let [items-stripped (map (fn [o] + (assert (str/starts-with? o prefix)) + (str/replace-first o prefix "")) items) + items-set (set (map parse-long items-stripped))] + (assoc op :type :ok, :value (independent/tuple k items-set)))))))) + (catch (re-find #"Unavailable" (.getMessage %)) ex + (assoc op :type :info, :error ::unavailable)) + (catch (re-find #"Broken pipe" (.getMessage %)) ex + (assoc op :type :info, :error ::broken-pipe)) + (catch (re-find #"Connection refused" (.getMessage %)) ex + (assoc op :type :info, :error ::connection-refused)))) + (teardown! [this test]) + (close! [this test])) + +(defn set-read-after-write + "Read-after-Write checker for set operations" + [] + (reify checker/Checker + (check [this test history opts] + (let [init {:add-started #{} + :add-done #{} + :read-must-contain {} + :missed #{} + :unexpected #{}} + final (reduce + (fn [state op] + (case [(:type op) (:f op)] + ([:invoke :add]) + (assoc state :add-started (conj (:add-started state) (:value op))) + ([:ok :add]) + (assoc state :add-done (conj (:add-done state) (:value op))) + ([:invoke :read]) + (assoc-in state [:read-must-contain (:process op)] (:add-done state)) + ([:ok :read]) + (let [read-must-contain (get (:read-must-contain state) (:process op)) + new-missed (set/difference read-must-contain (:value op)) + new-unexpected (set/difference (:value op) (:add-started state))] + (assoc state + :read-must-contain (dissoc (:read-must-contain state) (:process op)) + :missed (set/union (:missed state) new-missed), + :unexpected (set/union (:unexpected state) new-unexpected))) + state)) + init history) + valid? (and (empty? (:missed final)) (empty? (:unexpected final)))] + (assoc final :valid? valid?))))) + +(defn workload1 + "Tests insertions and deletions" + [opts] + {:client (SetClient. nil) + :checker (independent/checker + (checker/compose + {:set (checker/set) + :timeline (timeline/html)})) + :generator (independent/concurrent-generator + 10 + (range 100) + (fn [k] + (->> (range) + (map (fn [x] {:type :invoke, :f :add, :value x})) + (gen/limit (:ops-per-key opts))))) + :final-generator (independent/concurrent-generator + 10 + (range 100) + (fn [k] + (gen/phases + (gen/once op-read) + (gen/sleep 5))))}) + +(defn workload2 + "Tests insertions and deletions" + [opts] + {:client (SetClient. nil) + :checker (independent/checker + (checker/compose + {:set-read-after-write (set-read-after-write) + ; :set-full (checker/set-full {:linearizable? false}) + :timeline (timeline/html)})) + :generator (independent/concurrent-generator + 10 + (range) + (fn [k] + (->> (gen/mix [op-add-rand100 op-read]) + (gen/limit (:ops-per-key opts)))))}) + + diff --git a/script/jepsen.garage/test/jepsen/garage_test.clj b/script/jepsen.garage/test/jepsen/garage_test.clj new file mode 100644 index 00000000..055392a1 --- /dev/null +++ b/script/jepsen.garage/test/jepsen/garage_test.clj @@ -0,0 +1,7 @@ +(ns jepsen.garage-test + (:require [clojure.test :refer :all] + [jepsen.garage :refer :all])) + +(deftest a-test + (testing "FIXME, I fail." + (is (= 0 1)))) diff --git a/script/test-renumbering.sh b/script/test-renumbering.sh new file mode 100644 index 00000000..0b1bd320 --- /dev/null +++ b/script/test-renumbering.sh @@ -0,0 +1,138 @@ +#!/usr/bin/env bash + +: ' + This script tests part renumbering on an S3 remote (here configured for Minio). + + On Minio: + + The results confirm that if I upload parts with number 1, 4, 5 and 6, + they are renumbered to 1, 2, 3 and 4 after CompleteMultipartUpload. + Thus, specifying partNumber=4 on a GetObject/HeadObject should return + information on the part I originally uploaded with part number + + On S3: not tested + + Sample output (on Minio): + + f07e1404cc527d494242824ded3a616b part1 + 78974cd4d0f622eb3426ea7cd22f5a1c part4 + f9cc379f8baa61645558d9ba7e6351fa part5 + 1bd2383eebbac1f8e7143575ba5b1f4a part6 + Upload ID: 6838b813-d0ca-400b-9d28-ec8b2b5cd004 + PART 1 ETag: "f07e1404cc527d494242824ded3a616b" + PART 4 ETag: "78974cd4d0f622eb3426ea7cd22f5a1c" + PART 5 ETag: "f9cc379f8baa61645558d9ba7e6351fa" + PART 6 ETag: "1bd2383eebbac1f8e7143575ba5b1f4a" + ======================================== LIST ==== + { + "Parts": [ + { + "PartNumber": 1, + "LastModified": "2023-04-25T10:21:54.350000+00:00", + "ETag": "\"f07e1404cc527d494242824ded3a616b\"", + "Size": 20971520 + }, + { + "PartNumber": 4, + "LastModified": "2023-04-25T10:21:54.350000+00:00", + "ETag": "\"78974cd4d0f622eb3426ea7cd22f5a1c\"", + "Size": 20971520 + }, + { + "PartNumber": 5, + "LastModified": "2023-04-25T10:21:54.350000+00:00", + "ETag": "\"f9cc379f8baa61645558d9ba7e6351fa\"", + "Size": 20971520 + }, + { + "PartNumber": 6, + "LastModified": "2023-04-25T10:21:54.350000+00:00", + "ETag": "\"1bd2383eebbac1f8e7143575ba5b1f4a\"", + "Size": 20971520 + } + ], + "ChecksumAlgorithm": "", + "Initiator": { + "ID": "02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4", + "DisplayName": "02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4" + }, + "Owner": { + "DisplayName": "02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4", + "ID": "02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4" + }, + "StorageClass": "STANDARD" + } + ======================================== COMPLETE ==== + { + "Location": "http://localhost:9000/test/upload", + "Bucket": "test", + "Key": "upload", + "ETag": "\"8e817c8ccd442f9a79c77b58fe808c43-4\"" + } + ======================================== LIST ==== + + An error occurred (NoSuchUpload) when calling the ListParts operation: The specified multipart upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed. + ======================================== GET PART 4 ==== + { + "AcceptRanges": "bytes", + "LastModified": "2023-04-25T10:21:59+00:00", + "ContentLength": 20971520, + "ETag": "\"8e817c8ccd442f9a79c77b58fe808c43-4\"", + "ContentRange": "bytes 62914560-83886079/83886080", + "ContentType": "binary/octet-stream", + "Metadata": {}, + "PartsCount": 4 + } + 1bd2383eebbac1f8e7143575ba5b1f4a get-part4 + + + Conclusions: + + - Parts are indeed renumbered with consecutive numbers + - ListParts only applies to multipart uploads in progress, + it cannot be used once the multipart upload has been completed +' + +export AWS_ACCESS_KEY_ID=1D8Pk2k4oQSoh1BU +export AWS_SECRET_ACCESS_KEY=4B46SR8U7FUgY0raB8Zuxg1NLyLTvbNV + +function aws { command aws --endpoint-url http://localhost:9000 $@ ; } + +aws --version + +aws s3 mb s3://test + +for NUM in 1 4 5 6; do + dd if=/dev/urandom of=part$NUM bs=1M count=10 +done +md5sum part* + +UPLOAD=$(aws s3api create-multipart-upload --bucket test --key 'upload' | jq -r ".UploadId") +echo "Upload ID: $UPLOAD" + +PARTS="" + +for NUM in 1 4 5 6; do + ETAG=$(aws s3api upload-part --bucket test --key 'upload' --part-number $NUM \ + --body "part$NUM" --upload-id "$UPLOAD" | jq -r ".ETag") + echo "PART $NUM ETag: $ETAG" + if [ -n "$PARTS" ]; then + PARTS="$PARTS," + fi + PARTS="$PARTS {\"ETag\":$ETAG,\"PartNumber\":$NUM}" +done + +echo "======================================== LIST ====" +aws s3api list-parts --bucket test --key upload --upload-id "$UPLOAD" | jq + +echo "======================================== COMPLETE ====" +echo "{\"Parts\":[$PARTS]}" > mpu +aws s3api complete-multipart-upload --multipart-upload file://mpu \ + --bucket test --key 'upload' --upload-id "$UPLOAD" + +echo "======================================== LIST ====" +aws s3api list-parts --bucket test --key upload --upload-id "$UPLOAD" | jq + +echo "======================================== GET PART 4 ====" +aws s3api get-object --bucket test --key upload --part-number 4 get-part4 +md5sum get-part4 diff --git a/script/test-skip-part.sh b/script/test-skip-part.sh new file mode 100644 index 00000000..20ae017d --- /dev/null +++ b/script/test-skip-part.sh @@ -0,0 +1,103 @@ +#!/usr/bin/env bash + +: ' + This script tests whether uploaded parts can be skipped in a + CompleteMultipartUpoad + + On Minio: yes, parts can be skipped + + On S3: not tested + + Sample output (on Minio): + + f23911bcd1230f5ebe8887cbf5bc396e part1 + a2657143167eaf647c40473e78a091dc part4 + 72f72c02c5163bc81024b28ac818c5e0 part5 + e29cf500d20498218904b8df8806caa2 part6 + Upload ID: e8fe7b83-9800-46fb-ae90-9d7ccd42fe76 + PART 1 ETag: "f23911bcd1230f5ebe8887cbf5bc396e" + PART 4 ETag: "a2657143167eaf647c40473e78a091dc" + PART 5 ETag: "72f72c02c5163bc81024b28ac818c5e0" + PART 6 ETag: "e29cf500d20498218904b8df8806caa2" + ======================================== COMPLETE ==== + { + "Location": "http://localhost:9000/test/upload", + "Bucket": "test", + "Key": "upload", + "ETag": "\"48246e44d4b38bdc2f3c10ee25b1af17-3\"" + } + ======================================== GET FULL ==== + { + "AcceptRanges": "bytes", + "LastModified": "2023-04-25T10:54:35+00:00", + "ContentLength": 31457280, + "ETag": "\"48246e44d4b38bdc2f3c10ee25b1af17-3\"", + "ContentType": "binary/octet-stream", + "Metadata": {} + } + 97fb904da7ad310699a6afab0eb6e061 get-full + 97fb904da7ad310699a6afab0eb6e061 - + ======================================== GET PART 3 ==== + { + "AcceptRanges": "bytes", + "LastModified": "2023-04-25T10:54:35+00:00", + "ContentLength": 10485760, + "ETag": "\"48246e44d4b38bdc2f3c10ee25b1af17-3\"", + "ContentRange": "bytes 20971520-31457279/31457280", + "ContentType": "binary/octet-stream", + "Metadata": {}, + "PartsCount": 3 + } + e29cf500d20498218904b8df8806caa2 get-part3 + + Conclusions: + + - Skipping a part in a CompleteMultipartUpoad call is OK + - The part is simply not included in the stored object + - Sequential part renumbering counts only non-skipped parts +' + +export AWS_ACCESS_KEY_ID=1D8Pk2k4oQSoh1BU +export AWS_SECRET_ACCESS_KEY=4B46SR8U7FUgY0raB8Zuxg1NLyLTvbNV + +function aws { command aws --endpoint-url http://localhost:9000 $@ ; } + +aws --version + +aws s3 mb s3://test + +for NUM in 1 4 5 6; do + dd if=/dev/urandom of=part$NUM bs=1M count=10 +done +md5sum part* + +UPLOAD=$(aws s3api create-multipart-upload --bucket test --key 'upload' | jq -r ".UploadId") +echo "Upload ID: $UPLOAD" + +PARTS="" + +for NUM in 1 4 5 6; do + ETAG=$(aws s3api upload-part --bucket test --key 'upload' --part-number $NUM \ + --body "part$NUM" --upload-id "$UPLOAD" | jq -r ".ETag") + echo "PART $NUM ETag: $ETAG" + if [ "$NUM" != "5" ]; then + if [ -n "$PARTS" ]; then + PARTS="$PARTS," + fi + PARTS="$PARTS {\"ETag\":$ETAG,\"PartNumber\":$NUM}" + fi +done + +echo "======================================== COMPLETE ====" +echo "{\"Parts\":[$PARTS]}" > mpu +aws s3api complete-multipart-upload --multipart-upload file://mpu \ + --bucket test --key 'upload' --upload-id "$UPLOAD" + +echo "======================================== GET FULL ====" +aws s3api get-object --bucket test --key upload get-full +md5sum get-full +cat part1 part4 part6 | md5sum + +echo "======================================== GET PART 3 ====" +aws s3api get-object --bucket test --key upload --part-number 3 get-part3 +md5sum get-part3 diff --git a/script/test-smoke.sh b/script/test-smoke.sh index eababf38..6965c0f3 100755 --- a/script/test-smoke.sh +++ b/script/test-smoke.sh @@ -31,6 +31,11 @@ dd if=/dev/urandom of=/tmp/garage.1.rnd bs=1k count=2 # No multipart, inline sto dd if=/dev/urandom of=/tmp/garage.2.rnd bs=1M count=5 # No multipart but file will be chunked dd if=/dev/urandom of=/tmp/garage.3.rnd bs=1M count=10 # by default, AWS starts using multipart at 8MB +dd if=/dev/urandom of=/tmp/garage.part1.rnd bs=1M count=5 +dd if=/dev/urandom of=/tmp/garage.part2.rnd bs=1M count=5 +dd if=/dev/urandom of=/tmp/garage.part3.rnd bs=1M count=5 +dd if=/dev/urandom of=/tmp/garage.part4.rnd bs=1M count=5 + # data of lower entropy, to test compression dd if=/dev/urandom bs=1k count=2 | base64 -w0 > /tmp/garage.1.b64 dd if=/dev/urandom bs=1M count=5 | base64 -w0 > /tmp/garage.2.b64 @@ -40,7 +45,7 @@ echo "🧪 S3 API testing..." # AWS if [ -z "$SKIP_AWS" ]; then - echo "🛠️ Testing with awscli" + echo "🛠️ Testing with awscli (aws s3)" source ${SCRIPT_FOLDER}/dev-env-aws.sh aws s3 ls for idx in {1..3}.{rnd,b64}; do @@ -51,8 +56,36 @@ if [ -z "$SKIP_AWS" ]; then rm /tmp/garage.$idx.dl aws s3 rm "s3://eprouvette/&+-é\"/garage.$idx.aws" done + + echo "🛠️ Testing multipart uploads with awscli (aws s3api)" + UPLOAD=$(aws s3api create-multipart-upload --bucket eprouvette --key 'upload' | jq -r ".UploadId") + echo "Upload ID: $UPLOAD" + ETAG3=$(aws s3api upload-part --bucket eprouvette --key 'upload' \ + --part-number 3 --body "/tmp/garage.part1.rnd" --upload-id "$UPLOAD" \ + | jq -r ".ETag") + ETAG2=$(aws s3api upload-part --bucket eprouvette --key 'upload' \ + --part-number 2 --body "/tmp/garage.part2.rnd" --upload-id "$UPLOAD" \ + | jq -r ".ETag") + ETAG3=$(aws s3api upload-part --bucket eprouvette --key 'upload' \ + --part-number 3 --body "/tmp/garage.part3.rnd" --upload-id "$UPLOAD" \ + | jq -r ".ETag") + ETAG6=$(aws s3api upload-part --bucket eprouvette --key 'upload' \ + --part-number 6 --body "/tmp/garage.part4.rnd" --upload-id "$UPLOAD" \ + | jq -r ".ETag") + MPU="{\"Parts\":[{\"PartNumber\":2,\"ETag\":$ETAG2}, {\"PartNumber\":3,\"ETag\":$ETAG3}, {\"PartNumber\":6,\"ETag\":$ETAG6}]}" + echo $MPU > /tmp/garage.mpu.json + aws s3api complete-multipart-upload --multipart-upload file:///tmp/garage.mpu.json \ + --bucket eprouvette --key 'upload' --upload-id "$UPLOAD" + aws s3api get-object --bucket eprouvette --key upload /tmp/garage.mpu.get + if [ "$(md5sum /tmp/garage.mpu.get | cut -d ' ' -f 1)" != "$(cat /tmp/garage.part{2,3,4}.rnd | md5sum | cut -d ' ' -f 1)" ]; then + echo "Invalid multipart upload" + exit 1 + fi fi +echo "OK!!" +exit 0 + # S3CMD if [ -z "$SKIP_S3CMD" ]; then echo "🛠️ Testing with s3cmd" @@ -141,6 +174,7 @@ rm eprouvette/winscp EOF fi +rm /tmp/garage.part{1..4}.rnd rm /tmp/garage.{1..3}.{rnd,b64} echo "🏁 Teardown" diff --git a/script/test-upgrade.sh b/script/test-upgrade.sh new file mode 100755 index 00000000..dc25e7c6 --- /dev/null +++ b/script/test-upgrade.sh @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +set -ex + +export LC_ALL=C.UTF-8 +export LANG=C.UTF-8 +SCRIPT_FOLDER="`dirname \"$0\"`" +REPO_FOLDER="${SCRIPT_FOLDER}/../" +GARAGE_DEBUG="${REPO_FOLDER}/target/debug/" +GARAGE_RELEASE="${REPO_FOLDER}/target/release/" +NIX_RELEASE="${REPO_FOLDER}/result/bin/:${REPO_FOLDER}/result-bin/bin/" +PATH="${GARAGE_DEBUG}:${GARAGE_RELEASE}:${NIX_RELEASE}:$PATH" + +OLD_VERSION="$1" +ARCH="$2" + + +echo "Downloading old garage binary..." +curl https://garagehq.deuxfleurs.fr/_releases/$OLD_VERSION/$ARCH/garage > /tmp/old_garage +chmod +x /tmp/old_garage + +echo "============= insert data into old version cluster =================" + +export GARAGE_BIN=/tmp/old_garage +if echo $OLD_VERSION | grep 'v0\.8\.'; then + echo "Detected Garage v0.8.x" + export GARAGE_08=1 +fi + +echo "⏳ Setup cluster using old version" +$GARAGE_BIN --version +${SCRIPT_FOLDER}/dev-clean.sh +${SCRIPT_FOLDER}/dev-cluster.sh > /tmp/garage.log 2>&1 & +sleep 6 +${SCRIPT_FOLDER}/dev-configure.sh +${SCRIPT_FOLDER}/dev-bucket.sh + +echo "🛠️ Inserting data in old cluster" +source ${SCRIPT_FOLDER}/dev-env-rclone.sh +rclone copy "${SCRIPT_FOLDER}/../.git/" garage:eprouvette/test_dotgit --stats=1s --stats-log-level=NOTICE --stats-one-line + +echo "🏁 Stopping old cluster" +killall -INT old_garage +sleep 2 +killall -9 old_garage || true + +echo "🏁 Removing old garage version" +rm -rv $GARAGE_BIN +export -n GARAGE_BIN +export -n GARAGE_08 + +echo "================ read data from new cluster ===================" + +echo "⏳ Setup cluster using new version" +pwd +ls +export GARAGE_BIN=$(which garage) +$GARAGE_BIN --version +${SCRIPT_FOLDER}/dev-cluster.sh >> /tmp/garage.log 2>&1 & +sleep 3 + +echo "🛠️ Retrieving data from old cluster" +rclone copy garage:eprouvette/test_dotgit /tmp/test_dotgit --stats=1s --stats-log-level=NOTICE --stats-one-line --fast-list + +if ! diff <(find "${SCRIPT_FOLDER}/../.git" -type f | xargs md5sum | cut -d ' ' -f 1 | sort) <(find /tmp/test_dotgit -type f | xargs md5sum | cut -d ' ' -f 1 | sort); then + echo "TEST FAILURE: directories are different" + exit 1 +fi +rm -r /tmp/test_dotgit + +echo "🏁 Teardown" +rm -rf /tmp/garage-{data,meta}-* +rm -rf /tmp/config.*.toml + +echo "✅ Success" @@ -15,16 +15,18 @@ 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 + nativeBuildInputs = with pkgs; [ + #rustPlatform.rust.rustc + rustPlatform.rust.cargo + clang + mold + #clippy + rustfmt + #perl + #protobuf + #pkg-config + #openssl + file #cargo2nix.packages.x86_64-linux.cargo2nix ]; }; diff --git a/src/api/Cargo.toml b/src/api/Cargo.toml index 3d6b527e..e8cbc1c8 100644 --- a/src/api/Cargo.toml +++ b/src/api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_api" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>"] edition = "2018" license = "AGPL-3.0" @@ -28,7 +28,7 @@ crypto-common = "0.1" err-derive = "0.3" hex = "0.4" hmac = "0.12" -idna = "0.3" +idna = "0.4" tracing = "0.1" md-5 = "0.10" nom = "7.1" @@ -45,6 +45,7 @@ http = "0.2" httpdate = "1.0" http-range = "0.1" hyper = { version = "0.14", features = ["server", "http1", "runtime", "tcp", "stream"] } +hyperlocal = { version = "0.8.0", default-features = false, features = ["server"] } multer = "2.0" percent-encoding = "2.1.0" roxmltree = "0.18" diff --git a/src/api/admin/api_server.rs b/src/api/admin/api_server.rs index b0dfdfb7..0ce3ca0d 100644 --- a/src/api/admin/api_server.rs +++ b/src/api/admin/api_server.rs @@ -1,5 +1,4 @@ use std::collections::HashMap; -use std::net::SocketAddr; use std::sync::Arc; use async_trait::async_trait; @@ -18,6 +17,7 @@ use prometheus::{Encoder, TextEncoder}; use garage_model::garage::Garage; use garage_rpc::system::ClusterHealthStatus; use garage_util::error::Error as GarageError; +use garage_util::socket_address::UnixOrTCPSocketAddress; use crate::generic_server::*; @@ -25,7 +25,9 @@ use crate::admin::bucket::*; use crate::admin::cluster::*; use crate::admin::error::*; use crate::admin::key::*; -use crate::admin::router::{Authorization, Endpoint}; +use crate::admin::router_v0; +use crate::admin::router_v1::{Authorization, Endpoint}; +use crate::helpers::host_to_bucket; pub struct AdminApiServer { garage: Arc<Garage>, @@ -60,12 +62,12 @@ impl AdminApiServer { pub async fn run( self, - bind_addr: SocketAddr, + bind_addr: UnixOrTCPSocketAddress, shutdown_signal: impl Future<Output = ()>, ) -> Result<(), GarageError> { let region = self.garage.config.s3_api.s3_region.clone(); ApiServer::new(region, self) - .run_server(bind_addr, shutdown_signal) + .run_server(bind_addr, Some(0o220), shutdown_signal) .await } @@ -78,10 +80,7 @@ impl AdminApiServer { .body(Body::empty())?) } - async fn handle_check_website_enabled( - &self, - req: Request<Body>, - ) -> Result<Response<Body>, Error> { + async fn handle_check_domain(&self, req: Request<Body>) -> Result<Response<Body>, Error> { let query_params: HashMap<String, String> = req .uri() .query() @@ -102,12 +101,56 @@ impl AdminApiServer { .get("domain") .ok_or_internal_error("Could not parse domain query string")?; - let bucket_id = self + if self.check_domain(domain).await? { + Ok(Response::builder() + .status(StatusCode::OK) + .body(Body::from(format!( + "Domain '{domain}' is managed by Garage" + )))?) + } else { + Err(Error::bad_request(format!( + "Domain '{domain}' is not managed by Garage" + ))) + } + } + + async fn check_domain(&self, domain: &str) -> Result<bool, Error> { + // Resolve bucket from domain name, inferring if the website must be activated for the + // domain to be valid. + let (bucket_name, must_check_website) = if let Some(bname) = self + .garage + .config + .s3_api + .root_domain + .as_ref() + .and_then(|rd| host_to_bucket(domain, rd)) + { + (bname.to_string(), false) + } else if let Some(bname) = self + .garage + .config + .s3_web + .as_ref() + .and_then(|sw| host_to_bucket(domain, sw.root_domain.as_str())) + { + (bname.to_string(), true) + } else { + (domain.to_string(), true) + }; + + let bucket_id = match self .garage .bucket_helper() - .resolve_global_bucket_name(domain) + .resolve_global_bucket_name(&bucket_name) .await? - .ok_or(HelperError::NoSuchBucket(domain.to_string()))?; + { + Some(bucket_id) => bucket_id, + None => return Ok(false), + }; + + if !must_check_website { + return Ok(true); + } let bucket = self .garage @@ -119,16 +162,8 @@ impl AdminApiServer { 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" - ))), + Some(_v) => Ok(true), + None => Ok(false), } } @@ -147,7 +182,7 @@ impl AdminApiServer { ), }; let status_str = format!( - "{}\nConsult the full health check API endpoint at /v0/health for more details\n", + "{}\nConsult the full health check API endpoint at /v1/health for more details\n", status_str ); @@ -195,7 +230,12 @@ impl ApiHandler for AdminApiServer { type Error = Error; fn parse_endpoint(&self, req: &Request<Body>) -> Result<Endpoint, Error> { - Endpoint::from_request(req) + if req.uri().path().starts_with("/v0/") { + let endpoint_v0 = router_v0::Endpoint::from_request(req)?; + Endpoint::from_v0(endpoint_v0) + } else { + Endpoint::from_request(req) + } } async fn handle( @@ -229,7 +269,7 @@ impl ApiHandler for AdminApiServer { match endpoint { Endpoint::Options => self.handle_options(&req), - Endpoint::CheckWebsiteEnabled => self.handle_check_website_enabled(req).await, + Endpoint::CheckDomain => self.handle_check_domain(req).await, Endpoint::Health => self.handle_health(), Endpoint::Metrics => self.handle_metrics(), Endpoint::GetClusterStatus => handle_get_cluster_status(&self.garage).await, @@ -242,8 +282,13 @@ impl ApiHandler for AdminApiServer { Endpoint::RevertClusterLayout => handle_revert_cluster_layout(&self.garage, req).await, // Keys Endpoint::ListKeys => handle_list_keys(&self.garage).await, - Endpoint::GetKeyInfo { id, search } => { - handle_get_key_info(&self.garage, id, search).await + Endpoint::GetKeyInfo { + id, + search, + show_secret_key, + } => { + let show_secret_key = show_secret_key.map(|x| x == "true").unwrap_or(false); + handle_get_key_info(&self.garage, id, search, show_secret_key).await } Endpoint::CreateKey => handle_create_key(&self.garage, req).await, Endpoint::ImportKey => handle_import_key(&self.garage, req).await, diff --git a/src/api/admin/bucket.rs b/src/api/admin/bucket.rs index f0a4a9e7..17f46c30 100644 --- a/src/api/admin/bucket.rs +++ b/src/api/admin/bucket.rs @@ -14,6 +14,7 @@ use garage_model::bucket_alias_table::*; use garage_model::bucket_table::*; use garage_model::garage::Garage; use garage_model::permission::*; +use garage_model::s3::mpu_table; use garage_model::s3::object_table::*; use crate::admin::error::*; @@ -124,6 +125,14 @@ async fn bucket_info_results( .map(|x| x.filtered_values(&garage.system.ring.borrow())) .unwrap_or_default(); + let mpu_counters = garage + .mpu_counter_table + .table + .get(&bucket_id, &EmptyKey) + .await? + .map(|x| x.filtered_values(&garage.system.ring.borrow())) + .unwrap_or_default(); + let mut relevant_keys = HashMap::new(); for (k, _) in bucket .state @@ -208,12 +217,12 @@ async fn bucket_info_results( } }) .collect::<Vec<_>>(), - objects: counters.get(OBJECTS).cloned().unwrap_or_default(), - bytes: counters.get(BYTES).cloned().unwrap_or_default(), - unfinished_uploads: counters - .get(UNFINISHED_UPLOADS) - .cloned() - .unwrap_or_default(), + objects: *counters.get(OBJECTS).unwrap_or(&0), + bytes: *counters.get(BYTES).unwrap_or(&0), + unfinished_uploads: *counters.get(UNFINISHED_UPLOADS).unwrap_or(&0), + unfinished_multipart_uploads: *mpu_counters.get(mpu_table::UPLOADS).unwrap_or(&0), + unfinished_multipart_upload_parts: *mpu_counters.get(mpu_table::PARTS).unwrap_or(&0), + unfinished_multipart_upload_bytes: *mpu_counters.get(mpu_table::BYTES).unwrap_or(&0), quotas: ApiBucketQuotas { max_size: quotas.max_size, max_objects: quotas.max_objects, @@ -235,6 +244,9 @@ struct GetBucketInfoResult { objects: i64, bytes: i64, unfinished_uploads: i64, + unfinished_multipart_uploads: i64, + unfinished_multipart_upload_parts: i64, + unfinished_multipart_upload_bytes: i64, quotas: ApiBucketQuotas, } diff --git a/src/api/admin/cluster.rs b/src/api/admin/cluster.rs index 98bf2b5a..c8107b82 100644 --- a/src/api/admin/cluster.rs +++ b/src/api/admin/cluster.rs @@ -1,14 +1,13 @@ -use std::collections::HashMap; use std::net::SocketAddr; use std::sync::Arc; -use hyper::{Body, Request, Response, StatusCode}; +use hyper::{Body, Request, Response}; use serde::{Deserialize, Serialize}; use garage_util::crdt::*; use garage_util::data::*; -use garage_rpc::layout::*; +use garage_rpc::layout; use garage_model::garage::Garage; @@ -26,26 +25,37 @@ pub async fn handle_get_cluster_status(garage: &Arc<Garage>) -> Result<Response< .system .get_known_nodes() .into_iter() - .map(|i| { - ( - hex::encode(i.id), - KnownNodeResp { - addr: i.addr, - is_up: i.is_up, - last_seen_secs_ago: i.last_seen_secs_ago, - hostname: i.status.hostname, - }, - ) + .map(|i| KnownNodeResp { + id: hex::encode(i.id), + addr: i.addr, + is_up: i.is_up, + last_seen_secs_ago: i.last_seen_secs_ago, + hostname: i.status.hostname, }) .collect(), - layout: get_cluster_layout(garage), + layout: format_cluster_layout(&garage.system.get_cluster_layout()), }; Ok(json_ok_response(&res)?) } pub async fn handle_get_cluster_health(garage: &Arc<Garage>) -> Result<Response<Body>, Error> { + use garage_rpc::system::ClusterHealthStatus; let health = garage.system.health(); + let health = ClusterHealth { + status: match health.status { + ClusterHealthStatus::Healthy => "healthy", + ClusterHealthStatus::Degraded => "degraded", + ClusterHealthStatus::Unavailable => "unavailable", + }, + known_nodes: health.known_nodes, + connected_nodes: health.connected_nodes, + storage_nodes: health.storage_nodes, + storage_nodes_ok: health.storage_nodes_ok, + partitions: health.partitions, + partitions_quorum: health.partitions_quorum, + partitions_all_ok: health.partitions_all_ok, + }; Ok(json_ok_response(&health)?) } @@ -74,33 +84,68 @@ pub async fn handle_connect_cluster_nodes( } pub async fn handle_get_cluster_layout(garage: &Arc<Garage>) -> Result<Response<Body>, Error> { - let res = get_cluster_layout(garage); + let res = format_cluster_layout(&garage.system.get_cluster_layout()); Ok(json_ok_response(&res)?) } -fn get_cluster_layout(garage: &Arc<Garage>) -> GetClusterLayoutResponse { - let layout = garage.system.get_cluster_layout(); +fn format_cluster_layout(layout: &layout::ClusterLayout) -> GetClusterLayoutResponse { + let roles = layout + .roles + .items() + .iter() + .filter_map(|(k, _, v)| v.0.clone().map(|x| (k, x))) + .map(|(k, v)| NodeRoleResp { + id: hex::encode(k), + zone: v.zone.clone(), + capacity: v.capacity, + tags: v.tags.clone(), + }) + .collect::<Vec<_>>(); + + let staged_role_changes = layout + .staging_roles + .items() + .iter() + .filter(|(k, _, v)| layout.roles.get(k) != Some(v)) + .map(|(k, _, v)| match &v.0 { + None => NodeRoleChange { + id: hex::encode(k), + action: NodeRoleChangeEnum::Remove { remove: true }, + }, + Some(r) => NodeRoleChange { + id: hex::encode(k), + action: NodeRoleChangeEnum::Update { + zone: r.zone.clone(), + capacity: r.capacity, + tags: r.tags.clone(), + }, + }, + }) + .collect::<Vec<_>>(); GetClusterLayoutResponse { version: layout.version, - roles: layout - .roles - .items() - .iter() - .filter(|(_, _, v)| v.0.is_some()) - .map(|(k, _, v)| (hex::encode(k), v.0.clone())) - .collect(), - staged_role_changes: layout - .staging - .items() - .iter() - .filter(|(k, _, v)| layout.roles.get(k) != Some(v)) - .map(|(k, _, v)| (hex::encode(k), v.0.clone())) - .collect(), + roles, + staged_role_changes, } } +// ---- + +#[derive(Debug, Clone, Copy, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ClusterHealth { + status: &'static str, + known_nodes: usize, + connected_nodes: usize, + storage_nodes: usize, + storage_nodes_ok: usize, + partitions: usize, + partitions_quorum: usize, + partitions_all_ok: usize, +} + #[derive(Serialize)] #[serde(rename_all = "camelCase")] struct GetClusterStatusResponse { @@ -109,11 +154,19 @@ struct GetClusterStatusResponse { garage_features: Option<&'static [&'static str]>, rust_version: &'static str, db_engine: String, - known_nodes: HashMap<String, KnownNodeResp>, + known_nodes: Vec<KnownNodeResp>, + layout: GetClusterLayoutResponse, +} + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] +struct ApplyClusterLayoutResponse { + message: Vec<String>, layout: GetClusterLayoutResponse, } #[derive(Serialize)] +#[serde(rename_all = "camelCase")] struct ConnectClusterNodesResponse { success: bool, error: Option<String>, @@ -123,18 +176,31 @@ struct ConnectClusterNodesResponse { #[serde(rename_all = "camelCase")] struct GetClusterLayoutResponse { version: u64, - roles: HashMap<String, Option<NodeRole>>, - staged_role_changes: HashMap<String, Option<NodeRole>>, + roles: Vec<NodeRoleResp>, + staged_role_changes: Vec<NodeRoleChange>, } #[derive(Serialize)] +#[serde(rename_all = "camelCase")] +struct NodeRoleResp { + id: String, + zone: String, + capacity: Option<u64>, + tags: Vec<String>, +} + +#[derive(Serialize)] +#[serde(rename_all = "camelCase")] struct KnownNodeResp { + id: String, addr: SocketAddr, is_up: bool, last_seen_secs_ago: Option<u64>, hostname: String, } +// ---- update functions ---- + pub async fn handle_update_cluster_layout( garage: &Arc<Garage>, req: Request<Body>, @@ -144,22 +210,35 @@ pub async fn handle_update_cluster_layout( let mut layout = garage.system.get_cluster_layout(); let mut roles = layout.roles.clone(); - roles.merge(&layout.staging); + roles.merge(&layout.staging_roles); - for (node, role) in updates { - let node = hex::decode(node).ok_or_bad_request("Invalid node identifier")?; + for change in updates { + let node = hex::decode(&change.id).ok_or_bad_request("Invalid node identifier")?; let node = Uuid::try_from(&node).ok_or_bad_request("Invalid node identifier")?; + let new_role = match change.action { + NodeRoleChangeEnum::Remove { remove: true } => None, + NodeRoleChangeEnum::Update { + zone, + capacity, + tags, + } => Some(layout::NodeRole { + zone, + capacity, + tags, + }), + _ => return Err(Error::bad_request("Invalid layout change")), + }; + layout - .staging - .merge(&roles.update_mutator(node, NodeRoleV(role))); + .staging_roles + .merge(&roles.update_mutator(node, layout::NodeRoleV(new_role))); } garage.system.update_cluster_layout(&layout).await?; - Ok(Response::builder() - .status(StatusCode::NO_CONTENT) - .body(Body::empty())?) + let res = format_cluster_layout(&layout); + Ok(json_ok_response(&res)?) } pub async fn handle_apply_cluster_layout( @@ -169,12 +248,15 @@ pub async fn handle_apply_cluster_layout( let param = parse_json_body::<ApplyRevertLayoutRequest>(req).await?; let layout = garage.system.get_cluster_layout(); - let layout = layout.apply_staged_changes(Some(param.version))?; + let (layout, msg) = layout.apply_staged_changes(Some(param.version))?; + garage.system.update_cluster_layout(&layout).await?; - Ok(Response::builder() - .status(StatusCode::NO_CONTENT) - .body(Body::empty())?) + let res = ApplyClusterLayoutResponse { + message: msg, + layout: format_cluster_layout(&layout), + }; + Ok(json_ok_response(&res)?) } pub async fn handle_revert_cluster_layout( @@ -187,14 +269,39 @@ pub async fn handle_revert_cluster_layout( let layout = layout.revert_staged_changes(Some(param.version))?; garage.system.update_cluster_layout(&layout).await?; - Ok(Response::builder() - .status(StatusCode::NO_CONTENT) - .body(Body::empty())?) + let res = format_cluster_layout(&layout); + Ok(json_ok_response(&res)?) } -type UpdateClusterLayoutRequest = HashMap<String, Option<NodeRole>>; +// ---- + +type UpdateClusterLayoutRequest = Vec<NodeRoleChange>; #[derive(Deserialize)] +#[serde(rename_all = "camelCase")] struct ApplyRevertLayoutRequest { version: u64, } + +// ---- + +#[derive(Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +struct NodeRoleChange { + id: String, + #[serde(flatten)] + action: NodeRoleChangeEnum, +} + +#[derive(Serialize, Deserialize)] +#[serde(untagged)] +enum NodeRoleChangeEnum { + #[serde(rename_all = "camelCase")] + Remove { remove: bool }, + #[serde(rename_all = "camelCase")] + Update { + zone: String, + capacity: Option<u64>, + tags: Vec<String>, + }, +} diff --git a/src/api/admin/key.rs b/src/api/admin/key.rs index d74ca361..8d1c6890 100644 --- a/src/api/admin/key.rs +++ b/src/api/admin/key.rs @@ -10,7 +10,7 @@ use garage_model::garage::Garage; use garage_model::key_table::*; use crate::admin::error::*; -use crate::helpers::{json_ok_response, parse_json_body}; +use crate::helpers::{is_default, json_ok_response, parse_json_body}; pub async fn handle_list_keys(garage: &Arc<Garage>) -> Result<Response<Body>, Error> { let res = garage @@ -34,6 +34,7 @@ pub async fn handle_list_keys(garage: &Arc<Garage>) -> Result<Response<Body>, Er } #[derive(Serialize)] +#[serde(rename_all = "camelCase")] struct ListKeyResultItem { id: String, name: String, @@ -43,6 +44,7 @@ pub async fn handle_get_key_info( garage: &Arc<Garage>, id: Option<String>, search: Option<String>, + show_secret_key: bool, ) -> Result<Response<Body>, Error> { let key = if let Some(id) = id { garage.key_helper().get_existing_key(&id).await? @@ -55,7 +57,7 @@ pub async fn handle_get_key_info( unreachable!(); }; - key_info_results(garage, key).await + key_info_results(garage, key, show_secret_key).await } pub async fn handle_create_key( @@ -64,15 +66,16 @@ pub async fn handle_create_key( ) -> Result<Response<Body>, Error> { let req = parse_json_body::<CreateKeyRequest>(req).await?; - let key = Key::new(&req.name); + let key = Key::new(req.name.as_deref().unwrap_or("Unnamed key")); garage.key_table.insert(&key).await?; - key_info_results(garage, key).await + key_info_results(garage, key, true).await } #[derive(Deserialize)] +#[serde(rename_all = "camelCase")] struct CreateKeyRequest { - name: String, + name: Option<String>, } pub async fn handle_import_key( @@ -86,10 +89,15 @@ pub async fn handle_import_key( return Err(Error::KeyAlreadyExists(req.access_key_id.to_string())); } - let imported_key = Key::import(&req.access_key_id, &req.secret_access_key, &req.name); + let imported_key = Key::import( + &req.access_key_id, + &req.secret_access_key, + req.name.as_deref().unwrap_or("Imported key"), + ) + .ok_or_bad_request("Invalid key format")?; garage.key_table.insert(&imported_key).await?; - key_info_results(garage, imported_key).await + key_info_results(garage, imported_key, false).await } #[derive(Deserialize)] @@ -97,7 +105,7 @@ pub async fn handle_import_key( struct ImportKeyRequest { access_key_id: String, secret_access_key: String, - name: String, + name: Option<String>, } pub async fn handle_update_key( @@ -127,10 +135,11 @@ pub async fn handle_update_key( garage.key_table.insert(&key).await?; - key_info_results(garage, key).await + key_info_results(garage, key, false).await } #[derive(Deserialize)] +#[serde(rename_all = "camelCase")] struct UpdateKeyRequest { name: Option<String>, allow: Option<KeyPerm>, @@ -149,7 +158,11 @@ pub async fn handle_delete_key(garage: &Arc<Garage>, id: String) -> Result<Respo .body(Body::empty())?) } -async fn key_info_results(garage: &Arc<Garage>, key: Key) -> Result<Response<Body>, Error> { +async fn key_info_results( + garage: &Arc<Garage>, + key: Key, + show_secret: bool, +) -> Result<Response<Body>, Error> { let mut relevant_buckets = HashMap::new(); let key_state = key.state.as_option().unwrap(); @@ -178,7 +191,11 @@ async fn key_info_results(garage: &Arc<Garage>, key: Key) -> Result<Response<Bod let res = GetKeyInfoResult { name: key_state.name.get().clone(), access_key_id: key.key_id.clone(), - secret_access_key: key_state.secret_key.clone(), + secret_access_key: if show_secret { + Some(key_state.secret_key.clone()) + } else { + None + }, permissions: KeyPerm { create_bucket: *key_state.allow_create_bucket.get(), }, @@ -224,7 +241,8 @@ async fn key_info_results(garage: &Arc<Garage>, key: Key) -> Result<Response<Bod struct GetKeyInfoResult { name: String, access_key_id: String, - secret_access_key: String, + #[serde(skip_serializing_if = "is_default")] + secret_access_key: Option<String>, permissions: KeyPerm, buckets: Vec<KeyInfoBucketResult>, } @@ -246,6 +264,7 @@ struct KeyInfoBucketResult { } #[derive(Serialize, Deserialize, Default)] +#[serde(rename_all = "camelCase")] pub(crate) struct ApiBucketKeyPerm { #[serde(default)] pub(crate) read: bool, diff --git a/src/api/admin/mod.rs b/src/api/admin/mod.rs index c4857c10..43a8c59c 100644 --- a/src/api/admin/mod.rs +++ b/src/api/admin/mod.rs @@ -1,6 +1,7 @@ pub mod api_server; mod error; -mod router; +mod router_v0; +mod router_v1; mod bucket; mod cluster; diff --git a/src/api/admin/router.rs b/src/api/admin/router_v0.rs index 0dcb1546..68676445 100644 --- a/src/api/admin/router.rs +++ b/src/api/admin/router_v0.rs @@ -5,19 +5,13 @@ use hyper::{Method, Request}; use crate::admin::error::*; use crate::router_macros::*; -pub enum Authorization { - None, - MetricsToken, - AdminToken, -} - router_match! {@func /// List of all Admin API endpoints. #[derive(Debug, Clone, PartialEq, Eq)] pub enum Endpoint { Options, - CheckWebsiteEnabled, + CheckDomain, Health, Metrics, GetClusterStatus, @@ -92,7 +86,7 @@ impl Endpoint { let res = router_match!(@gen_path_parser (req.method(), path, query) [ OPTIONS _ => Options, - GET "/check" => CheckWebsiteEnabled, + GET "/check" => CheckDomain, GET "/health" => Health, GET "/metrics" => Metrics, GET "/v0/status" => GetClusterStatus, @@ -134,15 +128,6 @@ impl Endpoint { Ok(res) } - /// Get the kind of authorization which is required to perform the operation. - pub fn authorization_type(&self) -> Authorization { - match self { - Self::Health => Authorization::None, - Self::CheckWebsiteEnabled => Authorization::None, - Self::Metrics => Authorization::MetricsToken, - _ => Authorization::AdminToken, - } - } } generateQueryParameters! { diff --git a/src/api/admin/router_v1.rs b/src/api/admin/router_v1.rs new file mode 100644 index 00000000..cc5ff2ec --- /dev/null +++ b/src/api/admin/router_v1.rs @@ -0,0 +1,235 @@ +use std::borrow::Cow; + +use hyper::{Method, Request}; + +use crate::admin::error::*; +use crate::admin::router_v0; +use crate::router_macros::*; + +pub enum Authorization { + None, + MetricsToken, + AdminToken, +} + +router_match! {@func + +/// List of all Admin API endpoints. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum Endpoint { + Options, + CheckDomain, + Health, + Metrics, + GetClusterStatus, + GetClusterHealth, + ConnectClusterNodes, + // Layout + GetClusterLayout, + UpdateClusterLayout, + ApplyClusterLayout, + RevertClusterLayout, + // Keys + ListKeys, + CreateKey, + ImportKey, + GetKeyInfo { + id: Option<String>, + search: Option<String>, + show_secret_key: Option<String>, + }, + DeleteKey { + id: String, + }, + UpdateKey { + id: String, + }, + // Buckets + ListBuckets, + CreateBucket, + GetBucketInfo { + id: Option<String>, + global_alias: Option<String>, + }, + DeleteBucket { + id: String, + }, + UpdateBucket { + id: String, + }, + // Bucket-Key Permissions + BucketAllowKey, + BucketDenyKey, + // Bucket aliases + GlobalAliasBucket { + id: String, + alias: String, + }, + GlobalUnaliasBucket { + id: String, + alias: String, + }, + LocalAliasBucket { + id: String, + access_key_id: String, + alias: String, + }, + LocalUnaliasBucket { + id: String, + access_key_id: String, + alias: String, + }, +}} + +impl Endpoint { + /// Determine which S3 endpoint a request is for using the request, and a bucket which was + /// possibly extracted from the Host header. + /// Returns Self plus bucket name, if endpoint is not Endpoint::ListBuckets + pub fn from_request<T>(req: &Request<T>) -> Result<Self, Error> { + let uri = req.uri(); + let path = uri.path(); + let query = uri.query(); + + let mut query = QueryParameters::from_query(query.unwrap_or_default())?; + + let res = router_match!(@gen_path_parser (req.method(), path, query) [ + OPTIONS _ => Options, + GET "/check" => CheckDomain, + GET "/health" => Health, + GET "/metrics" => Metrics, + GET "/v1/status" => GetClusterStatus, + GET "/v1/health" => GetClusterHealth, + POST "/v1/connect" => ConnectClusterNodes, + // Layout endpoints + GET "/v1/layout" => GetClusterLayout, + POST "/v1/layout" => UpdateClusterLayout, + POST "/v1/layout/apply" => ApplyClusterLayout, + POST "/v1/layout/revert" => RevertClusterLayout, + // API key endpoints + GET "/v1/key" if id => GetKeyInfo (query_opt::id, query_opt::search, query_opt::show_secret_key), + GET "/v1/key" if search => GetKeyInfo (query_opt::id, query_opt::search, query_opt::show_secret_key), + POST "/v1/key" if id => UpdateKey (query::id), + POST "/v1/key" => CreateKey, + POST "/v1/key/import" => ImportKey, + DELETE "/v1/key" if id => DeleteKey (query::id), + GET "/v1/key" => ListKeys, + // Bucket endpoints + GET "/v1/bucket" if id => GetBucketInfo (query_opt::id, query_opt::global_alias), + GET "/v1/bucket" if global_alias => GetBucketInfo (query_opt::id, query_opt::global_alias), + GET "/v1/bucket" => ListBuckets, + POST "/v1/bucket" => CreateBucket, + DELETE "/v1/bucket" if id => DeleteBucket (query::id), + PUT "/v1/bucket" if id => UpdateBucket (query::id), + // Bucket-key permissions + POST "/v1/bucket/allow" => BucketAllowKey, + POST "/v1/bucket/deny" => BucketDenyKey, + // Bucket aliases + PUT "/v1/bucket/alias/global" => GlobalAliasBucket (query::id, query::alias), + DELETE "/v1/bucket/alias/global" => GlobalUnaliasBucket (query::id, query::alias), + PUT "/v1/bucket/alias/local" => LocalAliasBucket (query::id, query::access_key_id, query::alias), + DELETE "/v1/bucket/alias/local" => LocalUnaliasBucket (query::id, query::access_key_id, query::alias), + ]); + + if let Some(message) = query.nonempty_message() { + debug!("Unused query parameter: {}", message) + } + + Ok(res) + } + /// Some endpoints work exactly the same in their v1/ version as they did in their v0/ version. + /// For these endpoints, we can convert a v0/ call to its equivalent as if it was made using + /// its v1/ URL. + pub fn from_v0(v0_endpoint: router_v0::Endpoint) -> Result<Self, Error> { + match v0_endpoint { + // Cluster endpoints + router_v0::Endpoint::ConnectClusterNodes => Ok(Self::ConnectClusterNodes), + // - GetClusterStatus: response format changed + // - GetClusterHealth: response format changed + + // Layout endpoints + router_v0::Endpoint::RevertClusterLayout => Ok(Self::RevertClusterLayout), + // - GetClusterLayout: response format changed + // - UpdateClusterLayout: query format changed + // - ApplyCusterLayout: response format changed + + // Key endpoints + router_v0::Endpoint::ListKeys => Ok(Self::ListKeys), + router_v0::Endpoint::CreateKey => Ok(Self::CreateKey), + router_v0::Endpoint::GetKeyInfo { id, search } => Ok(Self::GetKeyInfo { + id, + search, + show_secret_key: Some("true".into()), + }), + router_v0::Endpoint::DeleteKey { id } => Ok(Self::DeleteKey { id }), + // - UpdateKey: response format changed (secret key no longer returned) + + // Bucket endpoints + router_v0::Endpoint::GetBucketInfo { id, global_alias } => { + Ok(Self::GetBucketInfo { id, global_alias }) + } + router_v0::Endpoint::ListBuckets => Ok(Self::ListBuckets), + router_v0::Endpoint::CreateBucket => Ok(Self::CreateBucket), + router_v0::Endpoint::DeleteBucket { id } => Ok(Self::DeleteBucket { id }), + router_v0::Endpoint::UpdateBucket { id } => Ok(Self::UpdateBucket { id }), + + // Bucket-key permissions + router_v0::Endpoint::BucketAllowKey => Ok(Self::BucketAllowKey), + router_v0::Endpoint::BucketDenyKey => Ok(Self::BucketDenyKey), + + // Bucket alias endpoints + router_v0::Endpoint::GlobalAliasBucket { id, alias } => { + Ok(Self::GlobalAliasBucket { id, alias }) + } + router_v0::Endpoint::GlobalUnaliasBucket { id, alias } => { + Ok(Self::GlobalUnaliasBucket { id, alias }) + } + router_v0::Endpoint::LocalAliasBucket { + id, + access_key_id, + alias, + } => Ok(Self::LocalAliasBucket { + id, + access_key_id, + alias, + }), + router_v0::Endpoint::LocalUnaliasBucket { + id, + access_key_id, + alias, + } => Ok(Self::LocalUnaliasBucket { + id, + access_key_id, + alias, + }), + + // For endpoints that have different body content syntax, issue + // deprecation warning + _ => Err(Error::bad_request(format!( + "v0/ endpoint is no longer supported: {}", + v0_endpoint.name() + ))), + } + } + /// Get the kind of authorization which is required to perform the operation. + pub fn authorization_type(&self) -> Authorization { + match self { + Self::Health => Authorization::None, + Self::CheckDomain => Authorization::None, + Self::Metrics => Authorization::MetricsToken, + _ => Authorization::AdminToken, + } + } +} + +generateQueryParameters! { + keywords: [], + fields: [ + "format" => format, + "id" => id, + "search" => search, + "globalAlias" => global_alias, + "alias" => alias, + "accessKeyId" => access_key_id, + "showSecretKey" => show_secret_key + ] +} diff --git a/src/api/generic_server.rs b/src/api/generic_server.rs index 757b85ec..fa346f48 100644 --- a/src/api/generic_server.rs +++ b/src/api/generic_server.rs @@ -1,4 +1,5 @@ -use std::net::SocketAddr; +use std::fs::{self, Permissions}; +use std::os::unix::fs::PermissionsExt; use std::sync::Arc; use async_trait::async_trait; @@ -11,6 +12,10 @@ use hyper::service::{make_service_fn, service_fn}; use hyper::{Body, Request, Response, Server}; use hyper::{HeaderMap, StatusCode}; +use hyperlocal::UnixServerExt; + +use tokio::net::UnixStream; + use opentelemetry::{ global, metrics::{Counter, ValueRecorder}, @@ -21,6 +26,7 @@ use opentelemetry::{ use garage_util::error::Error as GarageError; use garage_util::forwarded_headers; use garage_util::metrics::{gen_trace_id, RecordDuration}; +use garage_util::socket_address::UnixOrTCPSocketAddress; pub(crate) trait ApiEndpoint: Send + Sync + 'static { fn name(&self) -> &'static str; @@ -91,10 +97,11 @@ impl<A: ApiHandler> ApiServer<A> { pub async fn run_server( self: Arc<Self>, - bind_addr: SocketAddr, + bind_addr: UnixOrTCPSocketAddress, + unix_bind_addr_mode: Option<u32>, shutdown_signal: impl Future<Output = ()>, ) -> Result<(), GarageError> { - let service = make_service_fn(|conn: &AddrStream| { + let tcp_service = make_service_fn(|conn: &AddrStream| { let this = self.clone(); let client_addr = conn.remote_addr(); @@ -102,28 +109,63 @@ impl<A: ApiHandler> ApiServer<A> { Ok::<_, GarageError>(service_fn(move |req: Request<Body>| { let this = this.clone(); - this.handler(req, client_addr) + this.handler(req, client_addr.to_string()) })) } }); - let server = Server::bind(&bind_addr).serve(service); + let unix_service = make_service_fn(|_: &UnixStream| { + let this = self.clone(); + + let path = bind_addr.to_string(); + async move { + Ok::<_, GarageError>(service_fn(move |req: Request<Body>| { + let this = this.clone(); + + this.handler(req, path.clone()) + })) + } + }); - let graceful = server.with_graceful_shutdown(shutdown_signal); info!( - "{} API server listening on http://{}", + "{} API server listening on {}", A::API_NAME_DISPLAY, bind_addr ); - graceful.await?; + match bind_addr { + UnixOrTCPSocketAddress::TCPSocket(addr) => { + Server::bind(&addr) + .serve(tcp_service) + .with_graceful_shutdown(shutdown_signal) + .await? + } + UnixOrTCPSocketAddress::UnixSocket(ref path) => { + if path.exists() { + fs::remove_file(path)? + } + + let bound = Server::bind_unix(path)?; + + fs::set_permissions( + path, + Permissions::from_mode(unix_bind_addr_mode.unwrap_or(0o222)), + )?; + + bound + .serve(unix_service) + .with_graceful_shutdown(shutdown_signal) + .await?; + } + }; + Ok(()) } async fn handler( self: Arc<Self>, req: Request<Body>, - addr: SocketAddr, + addr: String, ) -> Result<Response<Body>, GarageError> { let uri = req.uri().clone(); diff --git a/src/api/helpers.rs b/src/api/helpers.rs index 642dbc42..1d55ebd5 100644 --- a/src/api/helpers.rs +++ b/src/api/helpers.rs @@ -152,6 +152,10 @@ pub fn json_ok_response<T: Serialize>(res: &T) -> Result<Response<Body>, Error> .body(Body::from(resp_json))?) } +pub fn is_default<T: Default + PartialEq>(v: &T) -> bool { + *v == T::default() +} + #[cfg(test)] mod tests { use super::*; diff --git a/src/api/k2v/api_server.rs b/src/api/k2v/api_server.rs index bb85b2e7..3a032aba 100644 --- a/src/api/k2v/api_server.rs +++ b/src/api/k2v/api_server.rs @@ -1,4 +1,3 @@ -use std::net::SocketAddr; use std::sync::Arc; use async_trait::async_trait; @@ -9,6 +8,7 @@ use hyper::{Body, Method, Request, Response}; use opentelemetry::{trace::SpanRef, KeyValue}; use garage_util::error::Error as GarageError; +use garage_util::socket_address::UnixOrTCPSocketAddress; use garage_model::garage::Garage; @@ -37,12 +37,12 @@ pub(crate) struct K2VApiEndpoint { impl K2VApiServer { pub async fn run( garage: Arc<Garage>, - bind_addr: SocketAddr, + bind_addr: UnixOrTCPSocketAddress, s3_region: String, shutdown_signal: impl Future<Output = ()>, ) -> Result<(), GarageError> { ApiServer::new(s3_region, K2VApiServer { garage }) - .run_server(bind_addr, shutdown_signal) + .run_server(bind_addr, None, shutdown_signal) .await } } diff --git a/src/api/router_macros.rs b/src/api/router_macros.rs index 07b5570c..cfecbc92 100644 --- a/src/api/router_macros.rs +++ b/src/api/router_macros.rs @@ -26,6 +26,7 @@ macro_rules! router_match { $($meth:ident $path:pat $(if $required:ident)? => $api:ident $(($($conv:ident :: $param:ident),*))?,)* ]) => {{ { + #[allow(unused_parens)] match ($method, $reqpath) { $( (&Method::$meth, $path) if true $(&& $query.$required.is_some())? => Endpoint::$api { @@ -128,12 +129,6 @@ macro_rules! router_match { } } }; - (@if ($($cond:tt)+) then ($($then:tt)*) else ($($else:tt)*)) => { - $($then)* - }; - (@if () then ($($then:tt)*) else ($($else:tt)*)) => { - $($else)* - }; } /// This macro is used to generate part of the code in this module. It must be called only one, and diff --git a/src/api/s3/api_server.rs b/src/api/s3/api_server.rs index 27837297..887839dd 100644 --- a/src/api/s3/api_server.rs +++ b/src/api/s3/api_server.rs @@ -1,4 +1,3 @@ -use std::net::SocketAddr; use std::sync::Arc; use async_trait::async_trait; @@ -10,6 +9,7 @@ use hyper::{Body, Request, Response}; use opentelemetry::{trace::SpanRef, KeyValue}; use garage_util::error::Error as GarageError; +use garage_util::socket_address::UnixOrTCPSocketAddress; use garage_model::garage::Garage; use garage_model::key_table::Key; @@ -26,7 +26,9 @@ use crate::s3::copy::*; use crate::s3::cors::*; use crate::s3::delete::*; use crate::s3::get::*; +use crate::s3::lifecycle::*; use crate::s3::list::*; +use crate::s3::multipart::*; use crate::s3::post_object::handle_post_object; use crate::s3::put::*; use crate::s3::router::Endpoint; @@ -44,12 +46,12 @@ pub(crate) struct S3ApiEndpoint { impl S3ApiServer { pub async fn run( garage: Arc<Garage>, - addr: SocketAddr, + addr: UnixOrTCPSocketAddress, s3_region: String, shutdown_signal: impl Future<Output = ()>, ) -> Result<(), GarageError> { ApiServer::new(s3_region, S3ApiServer { garage }) - .run_server(addr, shutdown_signal) + .run_server(addr, None, shutdown_signal) .await } @@ -256,7 +258,7 @@ impl ApiHandler for S3ApiServer { bucket_name, bucket_id, delimiter: delimiter.map(|d| d.to_string()), - page_size: max_keys.map(|p| p.clamp(1, 1000)).unwrap_or(1000), + page_size: max_keys.unwrap_or(1000).clamp(1, 1000), prefix: prefix.unwrap_or_default(), urlencode_resp: encoding_type.map(|e| e == "url").unwrap_or(false), }, @@ -286,7 +288,7 @@ impl ApiHandler for S3ApiServer { bucket_name, bucket_id, delimiter: delimiter.map(|d| d.to_string()), - page_size: max_keys.map(|p| p.clamp(1, 1000)).unwrap_or(1000), + page_size: max_keys.unwrap_or(1000).clamp(1, 1000), urlencode_resp: encoding_type.map(|e| e == "url").unwrap_or(false), prefix: prefix.unwrap_or_default(), }, @@ -319,7 +321,7 @@ impl ApiHandler for S3ApiServer { bucket_name, bucket_id, delimiter: delimiter.map(|d| d.to_string()), - page_size: max_uploads.map(|p| p.clamp(1, 1000)).unwrap_or(1000), + page_size: max_uploads.unwrap_or(1000).clamp(1, 1000), prefix: prefix.unwrap_or_default(), urlencode_resp: encoding_type.map(|e| e == "url").unwrap_or(false), }, @@ -342,8 +344,8 @@ impl ApiHandler for S3ApiServer { bucket_id, key, upload_id, - part_number_marker: part_number_marker.map(|p| p.clamp(1, 10000)), - max_parts: max_parts.map(|p| p.clamp(1, 1000)).unwrap_or(1000), + part_number_marker: part_number_marker.map(|p| p.min(10000)), + max_parts: max_parts.unwrap_or(1000).clamp(1, 1000), }, ) .await @@ -353,14 +355,21 @@ impl ApiHandler for S3ApiServer { } Endpoint::GetBucketWebsite {} => handle_get_website(&bucket).await, Endpoint::PutBucketWebsite {} => { - handle_put_website(garage, bucket_id, req, content_sha256).await + handle_put_website(garage, bucket.clone(), req, content_sha256).await } - Endpoint::DeleteBucketWebsite {} => handle_delete_website(garage, bucket_id).await, + Endpoint::DeleteBucketWebsite {} => handle_delete_website(garage, bucket.clone()).await, Endpoint::GetBucketCors {} => handle_get_cors(&bucket).await, Endpoint::PutBucketCors {} => { - handle_put_cors(garage, bucket_id, req, content_sha256).await + handle_put_cors(garage, bucket.clone(), req, content_sha256).await + } + Endpoint::DeleteBucketCors {} => handle_delete_cors(garage, bucket.clone()).await, + Endpoint::GetBucketLifecycleConfiguration {} => handle_get_lifecycle(&bucket).await, + Endpoint::PutBucketLifecycleConfiguration {} => { + handle_put_lifecycle(garage, bucket.clone(), req, content_sha256).await + } + Endpoint::DeleteBucketLifecycle {} => { + handle_delete_lifecycle(garage, bucket.clone()).await } - Endpoint::DeleteBucketCors {} => handle_delete_cors(garage, bucket_id).await, endpoint => Err(Error::NotImplemented(endpoint.name().to_owned())), }; diff --git a/src/api/s3/copy.rs b/src/api/s3/copy.rs index 7eb6459d..68b4f0c9 100644 --- a/src/api/s3/copy.rs +++ b/src/api/s3/copy.rs @@ -2,7 +2,7 @@ use std::pin::Pin; use std::sync::Arc; use std::time::{Duration, SystemTime, UNIX_EPOCH}; -use futures::{stream, stream::Stream, StreamExt, TryFutureExt}; +use futures::{stream, stream::Stream, StreamExt}; use md5::{Digest as Md5Digest, Md5}; use bytes::Bytes; @@ -18,12 +18,14 @@ use garage_util::time::*; use garage_model::garage::Garage; use garage_model::key_table::Key; use garage_model::s3::block_ref_table::*; +use garage_model::s3::mpu_table::*; use garage_model::s3::object_table::*; use garage_model::s3::version_table::*; use crate::helpers::parse_bucket_key; use crate::s3::error::*; -use crate::s3::put::{decode_upload_id, get_headers}; +use crate::s3::multipart; +use crate::s3::put::get_headers; use crate::s3::xml::{self as s3_xml, xmlns_tag}; pub async fn handle_copy( @@ -92,7 +94,10 @@ pub async fn handle_copy( let tmp_dest_object_version = ObjectVersion { uuid: new_uuid, timestamp: new_timestamp, - state: ObjectVersionState::Uploading(new_meta.headers.clone()), + state: ObjectVersionState::Uploading { + headers: new_meta.headers.clone(), + multipart: false, + }, }; let tmp_dest_object = Object::new( dest_bucket_id, @@ -105,8 +110,14 @@ pub async fn handle_copy( // this means that the BlockRef entries linked to this version cannot be // marked as deleted (they are marked as deleted only if the Version // doesn't exist or is marked as deleted). - let mut dest_version = - Version::new(new_uuid, dest_bucket_id, dest_key.to_string(), false); + let mut dest_version = Version::new( + new_uuid, + VersionBacklink::Object { + bucket_id: dest_bucket_id, + key: dest_key.to_string(), + }, + false, + ); garage.version_table.insert(&dest_version).await?; // Fill in block list for version and insert block refs @@ -179,17 +190,13 @@ pub async fn handle_upload_part_copy( ) -> Result<Response<Body>, Error> { let copy_precondition = CopyPreconditionHeaders::parse(req)?; - let dest_version_uuid = decode_upload_id(upload_id)?; + let dest_upload_id = multipart::decode_upload_id(upload_id)?; let dest_key = dest_key.to_string(); - let (source_object, dest_object) = futures::try_join!( + let (source_object, (_, _, mut dest_mpu)) = futures::try_join!( get_copy_source(&garage, api_key, req), - garage - .object_table - .get(&dest_bucket_id, &dest_key) - .map_err(Error::from), + multipart::get_upload(&garage, &dest_bucket_id, &dest_key, &dest_upload_id) )?; - let dest_object = dest_object.ok_or(Error::NoSuchKey)?; let (source_object_version, source_version_data, source_version_meta) = extract_source_info(&source_object)?; @@ -217,15 +224,6 @@ pub async fn handle_upload_part_copy( }, }; - // Check destination version is indeed in uploading state - if !dest_object - .versions() - .iter() - .any(|v| v.uuid == dest_version_uuid && v.is_uploading()) - { - return Err(Error::NoSuchUpload); - } - // Check source version is not inlined match source_version_data { ObjectVersionData::DeleteMarker => unreachable!(), @@ -242,23 +240,11 @@ pub async fn handle_upload_part_copy( // Fetch source versin with its block list, // and destination version to check part hasn't yet been uploaded - let (source_version, dest_version) = futures::try_join!( - garage - .version_table - .get(&source_object_version.uuid, &EmptyKey), - garage.version_table.get(&dest_version_uuid, &EmptyKey), - )?; - let source_version = source_version.ok_or(Error::NoSuchKey)?; - - // Check this part number hasn't yet been uploaded - if let Some(dv) = dest_version { - if dv.has_part_number(part_number) { - return Err(Error::bad_request(format!( - "Part number {} has already been uploaded", - part_number - ))); - } - } + let source_version = garage + .version_table + .get(&source_object_version.uuid, &EmptyKey) + .await? + .ok_or(Error::NoSuchKey)?; // We want to reuse blocks from the source version as much as possible. // However, we still need to get the data from these blocks @@ -299,6 +285,33 @@ pub async fn handle_upload_part_copy( current_offset = block_end; } + // Calculate the identity of destination part: timestamp, version id + let dest_version_id = gen_uuid(); + let dest_mpu_part_key = MpuPartKey { + part_number, + timestamp: dest_mpu.next_timestamp(part_number), + }; + + // Create the uploaded part + dest_mpu.parts.clear(); + dest_mpu.parts.put( + dest_mpu_part_key, + MpuPart { + version: dest_version_id, + etag: None, + size: None, + }, + ); + garage.mpu_table.insert(&dest_mpu).await?; + + let mut dest_version = Version::new( + dest_version_id, + VersionBacklink::MultipartUpload { + upload_id: dest_upload_id, + }, + false, + ); + // Now, actually copy the blocks let mut md5hasher = Md5::new(); @@ -348,8 +361,8 @@ pub async fn handle_upload_part_copy( let must_upload = existing_block_hash.is_none(); let final_hash = existing_block_hash.unwrap_or_else(|| blake2sum(&data[..])); - let mut version = Version::new(dest_version_uuid, dest_bucket_id, dest_key.clone(), false); - version.blocks.put( + dest_version.blocks.clear(); + dest_version.blocks.put( VersionBlockKey { part_number, offset: current_offset, @@ -363,7 +376,7 @@ pub async fn handle_upload_part_copy( let block_ref = BlockRef { block: final_hash, - version: dest_version_uuid, + version: dest_version_id, deleted: false.into(), }; @@ -378,23 +391,33 @@ pub async fn handle_upload_part_copy( Ok(()) } }, - // Thing 2: we need to insert the block in the version - garage.version_table.insert(&version), - // Thing 3: we need to add a block reference - garage.block_ref_table.insert(&block_ref), + async { + // Thing 2: we need to insert the block in the version + garage.version_table.insert(&dest_version).await?; + // Thing 3: we need to add a block reference + garage.block_ref_table.insert(&block_ref).await + }, // Thing 4: we need to prefetch the next block defragmenter.next(), )?; - next_block = res.3; + next_block = res.2; } + assert_eq!(current_offset, source_range.length); + let data_md5sum = md5hasher.finalize(); let etag = hex::encode(data_md5sum); // Put the part's ETag in the Versiontable - let mut version = Version::new(dest_version_uuid, dest_bucket_id, dest_key.clone(), false); - version.parts_etags.put(part_number, etag.clone()); - garage.version_table.insert(&version).await?; + dest_mpu.parts.put( + dest_mpu_part_key, + MpuPart { + version: dest_version_id, + etag: Some(etag.clone()), + size: Some(current_offset), + }, + ); + garage.mpu_table.insert(&dest_mpu).await?; // LGTM let resp_xml = s3_xml::to_xml_with_header(&CopyPartResult { diff --git a/src/api/s3/cors.rs b/src/api/s3/cors.rs index c7273464..49097ad1 100644 --- a/src/api/s3/cors.rs +++ b/src/api/s3/cors.rs @@ -44,14 +44,11 @@ pub async fn handle_get_cors(bucket: &Bucket) -> Result<Response<Body>, Error> { pub async fn handle_delete_cors( garage: Arc<Garage>, - bucket_id: Uuid, + mut bucket: Bucket, ) -> Result<Response<Body>, Error> { - let mut bucket = garage - .bucket_helper() - .get_existing_bucket(bucket_id) - .await?; - - let param = bucket.params_mut().unwrap(); + let param = bucket + .params_mut() + .ok_or_internal_error("Bucket should not be deleted at this point")?; param.cors_config.update(None); garage.bucket_table.insert(&bucket).await?; @@ -63,7 +60,7 @@ pub async fn handle_delete_cors( pub async fn handle_put_cors( garage: Arc<Garage>, - bucket_id: Uuid, + mut bucket: Bucket, req: Request<Body>, content_sha256: Option<Hash>, ) -> Result<Response<Body>, Error> { @@ -73,12 +70,9 @@ pub async fn handle_put_cors( verify_signed_content(content_sha256, &body[..])?; } - let mut bucket = garage - .bucket_helper() - .get_existing_bucket(bucket_id) - .await?; - - let param = bucket.params_mut().unwrap(); + let param = bucket + .params_mut() + .ok_or_internal_error("Bucket should not be deleted at this point")?; let conf: CorsConfiguration = from_reader(&body as &[u8])?; conf.validate()?; diff --git a/src/api/s3/delete.rs b/src/api/s3/delete.rs index b337155f..1c491eac 100644 --- a/src/api/s3/delete.rs +++ b/src/api/s3/delete.rs @@ -3,12 +3,12 @@ use std::sync::Arc; use hyper::{Body, Request, Response, StatusCode}; use garage_util::data::*; -use garage_util::time::*; use garage_model::garage::Garage; use garage_model::s3::object_table::*; use crate::s3::error::*; +use crate::s3::put::next_timestamp; use crate::s3::xml as s3_xml; use crate::signature::verify_signed_content; @@ -23,40 +23,36 @@ async fn handle_delete_internal( .await? .ok_or(Error::NoSuchKey)?; // No need to delete - let interesting_versions = object.versions().iter().filter(|v| { - !matches!( - v.state, - ObjectVersionState::Aborted - | ObjectVersionState::Complete(ObjectVersionData::DeleteMarker) - ) - }); - - let mut version_to_delete = None; - let mut timestamp = now_msec(); - for v in interesting_versions { - if v.timestamp + 1 > timestamp || version_to_delete.is_none() { - version_to_delete = Some(v.uuid); + let del_timestamp = next_timestamp(Some(&object)); + let del_uuid = gen_uuid(); + + let deleted_version = object + .versions() + .iter() + .rev() + .find(|v| !matches!(&v.state, ObjectVersionState::Aborted)) + .or_else(|| object.versions().iter().rev().next()); + let deleted_version = match deleted_version { + Some(dv) => dv.uuid, + None => { + warn!("Object has no versions: {:?}", object); + Uuid::from([0u8; 32]) } - timestamp = std::cmp::max(timestamp, v.timestamp + 1); - } - - let deleted_version = version_to_delete.ok_or(Error::NoSuchKey)?; - - let version_uuid = gen_uuid(); + }; let object = Object::new( bucket_id, key.into(), vec![ObjectVersion { - uuid: version_uuid, - timestamp, + uuid: del_uuid, + timestamp: del_timestamp, state: ObjectVersionState::Complete(ObjectVersionData::DeleteMarker), }], ); garage.object_table.insert(&object).await?; - Ok((deleted_version, version_uuid)) + Ok((deleted_version, del_uuid)) } pub async fn handle_delete( diff --git a/src/api/s3/get.rs b/src/api/s3/get.rs index cde7b461..5e682726 100644 --- a/src/api/s3/get.rs +++ b/src/api/s3/get.rs @@ -149,7 +149,6 @@ pub async fn handle_head( let (part_offset, part_end) = calculate_part_bounds(&version, pn).ok_or(Error::InvalidPart)?; - let n_parts = version.parts_etags.items().len(); Ok(object_headers(object_version, version_meta) .header(CONTENT_LENGTH, format!("{}", part_end - part_offset)) @@ -162,7 +161,7 @@ pub async fn handle_head( version_meta.size ), ) - .header(X_AMZ_MP_PARTS_COUNT, format!("{}", n_parts)) + .header(X_AMZ_MP_PARTS_COUNT, format!("{}", version.n_parts()?)) .status(StatusCode::PARTIAL_CONTENT) .body(Body::empty())?) } @@ -376,7 +375,6 @@ async fn handle_get_part( let (begin, end) = calculate_part_bounds(&version, part_number).ok_or(Error::InvalidPart)?; - let n_parts = version.parts_etags.items().len(); let body = body_from_blocks_range(garage, version.blocks.items(), begin, end); @@ -386,7 +384,7 @@ async fn handle_get_part( CONTENT_RANGE, format!("bytes {}-{}/{}", begin, end - 1, version_meta.size), ) - .header(X_AMZ_MP_PARTS_COUNT, format!("{}", n_parts)) + .header(X_AMZ_MP_PARTS_COUNT, format!("{}", version.n_parts()?)) .body(body)?) } _ => unreachable!(), diff --git a/src/api/s3/lifecycle.rs b/src/api/s3/lifecycle.rs new file mode 100644 index 00000000..1e7d6755 --- /dev/null +++ b/src/api/s3/lifecycle.rs @@ -0,0 +1,401 @@ +use quick_xml::de::from_reader; +use std::sync::Arc; + +use hyper::{Body, Request, Response, StatusCode}; + +use serde::{Deserialize, Serialize}; + +use crate::s3::error::*; +use crate::s3::xml::{to_xml_with_header, xmlns_tag, IntValue, Value}; +use crate::signature::verify_signed_content; + +use garage_model::bucket_table::{ + parse_lifecycle_date, Bucket, LifecycleExpiration as GarageLifecycleExpiration, + LifecycleFilter as GarageLifecycleFilter, LifecycleRule as GarageLifecycleRule, +}; +use garage_model::garage::Garage; +use garage_util::data::*; + +pub async fn handle_get_lifecycle(bucket: &Bucket) -> Result<Response<Body>, Error> { + let param = bucket + .params() + .ok_or_internal_error("Bucket should not be deleted at this point")?; + + if let Some(lifecycle) = param.lifecycle_config.get() { + let wc = LifecycleConfiguration::from_garage_lifecycle_config(lifecycle); + let xml = to_xml_with_header(&wc)?; + Ok(Response::builder() + .status(StatusCode::OK) + .header(http::header::CONTENT_TYPE, "application/xml") + .body(Body::from(xml))?) + } else { + Ok(Response::builder() + .status(StatusCode::NO_CONTENT) + .body(Body::empty())?) + } +} + +pub async fn handle_delete_lifecycle( + garage: Arc<Garage>, + mut bucket: Bucket, +) -> Result<Response<Body>, Error> { + let param = bucket + .params_mut() + .ok_or_internal_error("Bucket should not be deleted at this point")?; + + param.lifecycle_config.update(None); + garage.bucket_table.insert(&bucket).await?; + + Ok(Response::builder() + .status(StatusCode::NO_CONTENT) + .body(Body::empty())?) +} + +pub async fn handle_put_lifecycle( + garage: Arc<Garage>, + mut bucket: Bucket, + req: Request<Body>, + content_sha256: Option<Hash>, +) -> Result<Response<Body>, Error> { + let body = hyper::body::to_bytes(req.into_body()).await?; + + if let Some(content_sha256) = content_sha256 { + verify_signed_content(content_sha256, &body[..])?; + } + + let param = bucket + .params_mut() + .ok_or_internal_error("Bucket should not be deleted at this point")?; + + let conf: LifecycleConfiguration = from_reader(&body as &[u8])?; + let config = conf + .validate_into_garage_lifecycle_config() + .ok_or_bad_request("Invalid lifecycle configuration")?; + + param.lifecycle_config.update(Some(config)); + garage.bucket_table.insert(&bucket).await?; + + Ok(Response::builder() + .status(StatusCode::OK) + .body(Body::empty())?) +} + +// ---- SERIALIZATION AND DESERIALIZATION TO/FROM S3 XML ---- + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] +pub struct LifecycleConfiguration { + #[serde(serialize_with = "xmlns_tag", skip_deserializing)] + pub xmlns: (), + #[serde(rename = "Rule")] + pub lifecycle_rules: Vec<LifecycleRule>, +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] +pub struct LifecycleRule { + #[serde(rename = "ID")] + pub id: Option<Value>, + #[serde(rename = "Status")] + pub status: Value, + #[serde(rename = "Filter", default)] + pub filter: Option<Filter>, + #[serde(rename = "Expiration", default)] + pub expiration: Option<Expiration>, + #[serde(rename = "AbortIncompleteMultipartUpload", default)] + pub abort_incomplete_mpu: Option<AbortIncompleteMpu>, +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Default)] +pub struct Filter { + #[serde(rename = "And")] + pub and: Option<Box<Filter>>, + #[serde(rename = "Prefix")] + pub prefix: Option<Value>, + #[serde(rename = "ObjectSizeGreaterThan")] + pub size_gt: Option<IntValue>, + #[serde(rename = "ObjectSizeLessThan")] + pub size_lt: Option<IntValue>, +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] +pub struct Expiration { + #[serde(rename = "Days")] + pub days: Option<IntValue>, + #[serde(rename = "Date")] + pub at_date: Option<Value>, +} + +#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)] +pub struct AbortIncompleteMpu { + #[serde(rename = "DaysAfterInitiation")] + pub days: IntValue, +} + +impl LifecycleConfiguration { + pub fn validate_into_garage_lifecycle_config( + self, + ) -> Result<Vec<GarageLifecycleRule>, &'static str> { + let mut ret = vec![]; + for rule in self.lifecycle_rules { + ret.push(rule.validate_into_garage_lifecycle_rule()?); + } + Ok(ret) + } + + pub fn from_garage_lifecycle_config(config: &[GarageLifecycleRule]) -> Self { + Self { + xmlns: (), + lifecycle_rules: config + .iter() + .map(LifecycleRule::from_garage_lifecycle_rule) + .collect(), + } + } +} + +impl LifecycleRule { + pub fn validate_into_garage_lifecycle_rule(self) -> Result<GarageLifecycleRule, &'static str> { + let enabled = match self.status.0.as_str() { + "Enabled" => true, + "Disabled" => false, + _ => return Err("invalid value for <Status>"), + }; + + let filter = self + .filter + .map(Filter::validate_into_garage_lifecycle_filter) + .transpose()? + .unwrap_or_default(); + + let abort_incomplete_mpu_days = self.abort_incomplete_mpu.map(|x| x.days.0 as usize); + + let expiration = self + .expiration + .map(Expiration::validate_into_garage_lifecycle_expiration) + .transpose()?; + + Ok(GarageLifecycleRule { + id: self.id.map(|x| x.0), + enabled, + filter, + abort_incomplete_mpu_days, + expiration, + }) + } + + pub fn from_garage_lifecycle_rule(rule: &GarageLifecycleRule) -> Self { + Self { + id: rule.id.as_deref().map(Value::from), + status: if rule.enabled { + Value::from("Enabled") + } else { + Value::from("Disabled") + }, + filter: Filter::from_garage_lifecycle_filter(&rule.filter), + abort_incomplete_mpu: rule + .abort_incomplete_mpu_days + .map(|days| AbortIncompleteMpu { + days: IntValue(days as i64), + }), + expiration: rule + .expiration + .as_ref() + .map(Expiration::from_garage_lifecycle_expiration), + } + } +} + +impl Filter { + pub fn count(&self) -> i32 { + fn count<T>(x: &Option<T>) -> i32 { + x.as_ref().map(|_| 1).unwrap_or(0) + } + count(&self.prefix) + count(&self.size_gt) + count(&self.size_lt) + } + + pub fn validate_into_garage_lifecycle_filter( + self, + ) -> Result<GarageLifecycleFilter, &'static str> { + if self.count() > 0 && self.and.is_some() { + Err("Filter tag cannot contain both <And> and another condition") + } else if let Some(and) = self.and { + if and.and.is_some() { + return Err("Nested <And> tags"); + } + Ok(and.internal_into_garage_lifecycle_filter()) + } else if self.count() > 1 { + Err("Multiple Filter conditions must be wrapped in an <And> tag") + } else { + Ok(self.internal_into_garage_lifecycle_filter()) + } + } + + fn internal_into_garage_lifecycle_filter(self) -> GarageLifecycleFilter { + GarageLifecycleFilter { + prefix: self.prefix.map(|x| x.0), + size_gt: self.size_gt.map(|x| x.0 as u64), + size_lt: self.size_lt.map(|x| x.0 as u64), + } + } + + pub fn from_garage_lifecycle_filter(rule: &GarageLifecycleFilter) -> Option<Self> { + let filter = Filter { + and: None, + prefix: rule.prefix.as_deref().map(Value::from), + size_gt: rule.size_gt.map(|x| IntValue(x as i64)), + size_lt: rule.size_lt.map(|x| IntValue(x as i64)), + }; + match filter.count() { + 0 => None, + 1 => Some(filter), + _ => Some(Filter { + and: Some(Box::new(filter)), + ..Default::default() + }), + } + } +} + +impl Expiration { + pub fn validate_into_garage_lifecycle_expiration( + self, + ) -> Result<GarageLifecycleExpiration, &'static str> { + match (self.days, self.at_date) { + (Some(_), Some(_)) => Err("cannot have both <Days> and <Date> in <Expiration>"), + (None, None) => Err("<Expiration> must contain either <Days> or <Date>"), + (Some(days), None) => Ok(GarageLifecycleExpiration::AfterDays(days.0 as usize)), + (None, Some(date)) => { + parse_lifecycle_date(&date.0)?; + Ok(GarageLifecycleExpiration::AtDate(date.0)) + } + } + } + + pub fn from_garage_lifecycle_expiration(exp: &GarageLifecycleExpiration) -> Self { + match exp { + GarageLifecycleExpiration::AfterDays(days) => Expiration { + days: Some(IntValue(*days as i64)), + at_date: None, + }, + GarageLifecycleExpiration::AtDate(date) => Expiration { + days: None, + at_date: Some(Value(date.to_string())), + }, + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + use quick_xml::de::from_str; + + #[test] + fn test_deserialize_lifecycle_config() -> Result<(), Error> { + let message = r#"<?xml version="1.0" encoding="UTF-8"?> +<LifecycleConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> + <Rule> + <ID>id1</ID> + <Status>Enabled</Status> + <Filter> + <Prefix>documents/</Prefix> + </Filter> + <AbortIncompleteMultipartUpload> + <DaysAfterInitiation>7</DaysAfterInitiation> + </AbortIncompleteMultipartUpload> + </Rule> + <Rule> + <ID>id2</ID> + <Status>Enabled</Status> + <Filter> + <And> + <Prefix>logs/</Prefix> + <ObjectSizeGreaterThan>1000000</ObjectSizeGreaterThan> + </And> + </Filter> + <Expiration> + <Days>365</Days> + </Expiration> + </Rule> +</LifecycleConfiguration>"#; + let conf: LifecycleConfiguration = from_str(message).unwrap(); + let ref_value = LifecycleConfiguration { + xmlns: (), + lifecycle_rules: vec![ + LifecycleRule { + id: Some("id1".into()), + status: "Enabled".into(), + filter: Some(Filter { + prefix: Some("documents/".into()), + ..Default::default() + }), + expiration: None, + abort_incomplete_mpu: Some(AbortIncompleteMpu { days: IntValue(7) }), + }, + LifecycleRule { + id: Some("id2".into()), + status: "Enabled".into(), + filter: Some(Filter { + and: Some(Box::new(Filter { + prefix: Some("logs/".into()), + size_gt: Some(IntValue(1000000)), + ..Default::default() + })), + ..Default::default() + }), + expiration: Some(Expiration { + days: Some(IntValue(365)), + at_date: None, + }), + abort_incomplete_mpu: None, + }, + ], + }; + assert_eq! { + ref_value, + conf + }; + + let message2 = to_xml_with_header(&ref_value)?; + + let cleanup = |c: &str| c.replace(char::is_whitespace, ""); + assert_eq!(cleanup(message), cleanup(&message2)); + + // Check validation + let validated = ref_value + .validate_into_garage_lifecycle_config() + .ok_or_bad_request("invalid xml config")?; + + let ref_config = vec![ + GarageLifecycleRule { + id: Some("id1".into()), + enabled: true, + filter: GarageLifecycleFilter { + prefix: Some("documents/".into()), + ..Default::default() + }, + expiration: None, + abort_incomplete_mpu_days: Some(7), + }, + GarageLifecycleRule { + id: Some("id2".into()), + enabled: true, + filter: GarageLifecycleFilter { + prefix: Some("logs/".into()), + size_gt: Some(1000000), + ..Default::default() + }, + expiration: Some(GarageLifecycleExpiration::AfterDays(365)), + abort_incomplete_mpu_days: None, + }, + ]; + assert_eq!(validated, ref_config); + + let message3 = to_xml_with_header(&LifecycleConfiguration::from_garage_lifecycle_config( + &validated, + ))?; + assert_eq!(cleanup(message), cleanup(&message3)); + + Ok(()) + } +} diff --git a/src/api/s3/list.rs b/src/api/s3/list.rs index 5cb0d65a..1b9e8cd5 100644 --- a/src/api/s3/list.rs +++ b/src/api/s3/list.rs @@ -1,4 +1,3 @@ -use std::cmp::Ordering; use std::collections::{BTreeMap, BTreeSet}; use std::iter::{Iterator, Peekable}; use std::sync::Arc; @@ -11,15 +10,15 @@ use garage_util::error::Error as GarageError; use garage_util::time::*; use garage_model::garage::Garage; +use garage_model::s3::mpu_table::*; use garage_model::s3::object_table::*; -use garage_model::s3::version_table::Version; -use garage_table::{EmptyKey, EnumerationOrder}; +use garage_table::EnumerationOrder; use crate::encoding::*; use crate::helpers::key_after_prefix; use crate::s3::error::*; -use crate::s3::put as s3_put; +use crate::s3::multipart as s3_multipart; use crate::s3::xml as s3_xml; const DUMMY_NAME: &str = "Dummy Key"; @@ -176,7 +175,9 @@ pub async fn handle_list_multipart_upload( t.get_range( &bucket, key, - Some(ObjectFilter::IsUploading), + Some(ObjectFilter::IsUploading { + check_multipart: Some(true), + }), count, EnumerationOrder::Forward, ) @@ -272,24 +273,26 @@ pub async fn handle_list_parts( ) -> Result<Response<Body>, Error> { debug!("ListParts {:?}", query); - let upload_id = s3_put::decode_upload_id(&query.upload_id)?; + let upload_id = s3_multipart::decode_upload_id(&query.upload_id)?; - let (object, version) = futures::try_join!( - garage.object_table.get(&query.bucket_id, &query.key), - garage.version_table.get(&upload_id, &EmptyKey), - )?; + let (_, _, mpu) = + s3_multipart::get_upload(&garage, &query.bucket_id, &query.key, &upload_id).await?; - let (info, next) = fetch_part_info(query, object, version, upload_id)?; + let (info, next) = fetch_part_info(query, &mpu)?; let result = s3_xml::ListPartsResult { xmlns: (), + + // Query parameters bucket: s3_xml::Value(query.bucket_name.to_string()), key: s3_xml::Value(query.key.to_string()), upload_id: s3_xml::Value(query.upload_id.to_string()), part_number_marker: query.part_number_marker.map(|e| s3_xml::IntValue(e as i64)), - next_part_number_marker: next.map(|e| s3_xml::IntValue(e as i64)), max_parts: s3_xml::IntValue(query.max_parts as i64), - is_truncated: s3_xml::Value(next.map(|_| "true").unwrap_or("false").to_string()), + + // Result values + next_part_number_marker: next.map(|e| s3_xml::IntValue(e as i64)), + is_truncated: s3_xml::Value(format!("{}", next.is_some())), parts: info .iter() .map(|part| s3_xml::PartItem { @@ -299,6 +302,8 @@ pub async fn handle_list_parts( size: s3_xml::IntValue(part.size as i64), }) .collect(), + + // Dummy result values (unsupported features) initiator: s3_xml::Initiator { display_name: s3_xml::Value(DUMMY_NAME.to_string()), id: s3_xml::Value(DUMMY_KEY.to_string()), @@ -335,8 +340,8 @@ struct UploadInfo { } #[derive(Debug, PartialEq)] -struct PartInfo { - etag: String, +struct PartInfo<'a> { + etag: &'a str, timestamp: u64, part_number: u64, size: u64, @@ -421,8 +426,10 @@ where // Drop the first key if needed // Only AfterKey requires it according to the S3 spec and our implem. match (&cursor, iter.peek()) { - (RangeBegin::AfterKey { key }, Some(object)) if &object.key == key => iter.next(), - (_, _) => None, + (RangeBegin::AfterKey { key }, Some(object)) if &object.key == key => { + iter.next(); + } + _ => (), }; while let Some(object) = iter.peek() { @@ -431,16 +438,22 @@ where return Ok(None); } - cursor = match acc.extract(query, &cursor, &mut iter) { - ExtractionResult::Extracted { key } => RangeBegin::AfterKey { key }, + match acc.extract(query, &cursor, &mut iter) { + ExtractionResult::Extracted { key } => { + cursor = RangeBegin::AfterKey { key }; + } ExtractionResult::SkipTo { key, fallback_key } => { - RangeBegin::IncludingKey { key, fallback_key } + cursor = RangeBegin::IncludingKey { key, fallback_key }; } ExtractionResult::FilledAtUpload { key, upload } => { - return Ok(Some(RangeBegin::AfterUpload { key, upload })) + return Ok(Some(RangeBegin::AfterUpload { key, upload })); + } + ExtractionResult::Filled => { + return Ok(Some(cursor)); + } + ExtractionResult::NoMore => { + return Ok(None); } - ExtractionResult::Filled => return Ok(Some(cursor)), - ExtractionResult::NoMore => return Ok(None), }; } @@ -456,107 +469,51 @@ where } } -fn fetch_part_info( +fn fetch_part_info<'a>( query: &ListPartsQuery, - object: Option<Object>, - version: Option<Version>, - upload_id: Uuid, -) -> Result<(Vec<PartInfo>, Option<u64>), Error> { - // Check results - let object = object.ok_or(Error::NoSuchKey)?; - - let obj_version = object - .versions() - .iter() - .find(|v| v.uuid == upload_id && v.is_uploading()) - .ok_or(Error::NoSuchUpload)?; - - let version = version.ok_or(Error::NoSuchKey)?; - - // Cut the beginning of our 2 vectors if required - let (etags, blocks) = match &query.part_number_marker { - Some(marker) => { - let next = marker + 1; - - let part_idx = into_ok_or_err( - version - .parts_etags - .items() - .binary_search_by(|(part_num, _)| part_num.cmp(&next)), - ); - let parts = &version.parts_etags.items()[part_idx..]; - - let block_idx = into_ok_or_err( - version - .blocks - .items() - .binary_search_by(|(vkey, _)| vkey.part_number.cmp(&next)), - ); - let blocks = &version.blocks.items()[block_idx..]; - - (parts, blocks) - } - None => (version.parts_etags.items(), version.blocks.items()), - }; - - // Use the block vector to compute a (part_number, size) vector - let mut size = Vec::<(u64, u64)>::new(); - blocks.iter().for_each(|(key, val)| { - let mut new_size = val.size; - match size.pop() { - Some((part_number, size)) if part_number == key.part_number => new_size += size, - Some(v) => size.push(v), - None => (), - } - size.push((key.part_number, new_size)) - }); - - // Merge the etag vector and size vector to build a PartInfo vector - let max_parts = query.max_parts as usize; - let (mut etag_iter, mut size_iter) = (etags.iter().peekable(), size.iter().peekable()); - - let mut info = Vec::<PartInfo>::with_capacity(max_parts); - - while info.len() < max_parts { - match (etag_iter.peek(), size_iter.peek()) { - (Some((ep, etag)), Some((sp, size))) => match ep.cmp(sp) { - Ordering::Less => { - debug!("ETag information ignored due to missing corresponding block information. Query: {:?}", query); - etag_iter.next(); - } - Ordering::Equal => { - info.push(PartInfo { - etag: etag.to_string(), - timestamp: obj_version.timestamp, - part_number: *ep, - size: *size, - }); - etag_iter.next(); - size_iter.next(); + mpu: &'a MultipartUpload, +) -> Result<(Vec<PartInfo<'a>>, Option<u64>), Error> { + assert!((1..=1000).contains(&query.max_parts)); // see s3/api_server.rs + + // Parse multipart upload part list, removing parts not yet finished + // and failed part uploads that were overwritten + let mut parts: Vec<PartInfo<'a>> = Vec::with_capacity(mpu.parts.items().len()); + for (pk, p) in mpu.parts.items().iter() { + if let (Some(etag), Some(size)) = (&p.etag, p.size) { + let part_info = PartInfo { + part_number: pk.part_number, + timestamp: pk.timestamp, + etag, + size, + }; + match parts.last_mut() { + Some(lastpart) if lastpart.part_number == pk.part_number => { + *lastpart = part_info; } - Ordering::Greater => { - debug!("Block information ignored due to missing corresponding ETag information. Query: {:?}", query); - size_iter.next(); + _ => { + parts.push(part_info); } - }, - (None, None) => return Ok((info, None)), - _ => { - debug!( - "Additional block or ETag information ignored. Query: {:?}", - query - ); - return Ok((info, None)); } } } - match info.last() { - Some(part_info) => { - let pagination = Some(part_info.part_number); - Ok((info, pagination)) - } - None => Ok((info, None)), + // Cut the beginning if we have a marker + if let Some(marker) = &query.part_number_marker { + let next = marker + 1; + let part_idx = parts + .binary_search_by(|part| part.part_number.cmp(&next)) + .unwrap_or_else(|x| x); + parts = parts.split_off(part_idx); + } + + // Cut the end if we have too many parts + if parts.len() > query.max_parts as usize { + parts.truncate(query.max_parts as usize); + let pagination = Some(parts.last().unwrap().part_number); + return Ok((parts, pagination)); } + + Ok((parts, None)) } /* @@ -570,8 +527,8 @@ fn fetch_part_info( /// This key can be the prefix in the base case, or intermediate /// points in the dataset if we are continuing a previous listing. impl ListObjectsQuery { - fn build_accumulator(&self) -> Accumulator<String, ObjectInfo> { - Accumulator::<String, ObjectInfo>::new(self.common.page_size) + fn build_accumulator(&self) -> ObjectAccumulator { + ObjectAccumulator::new(self.common.page_size) } fn begin(&self) -> Result<RangeBegin, Error> { @@ -580,9 +537,10 @@ impl ListObjectsQuery { // In V2 mode, the continuation token is defined as an opaque // string in the spec, so we can do whatever we want with it. // In our case, it is defined as either [ or ] (for include + // or exclude), followed by a base64-encoded string // representing the key to start with. - (Some(token), _) => match &token[..1] { - "[" => Ok(RangeBegin::IncludingKey { + (Some(token), _) => match &token.get(..1) { + Some("[") => Ok(RangeBegin::IncludingKey { key: String::from_utf8( BASE64_STANDARD .decode(token[1..].as_bytes()) @@ -590,7 +548,7 @@ impl ListObjectsQuery { )?, fallback_key: None, }), - "]" => Ok(RangeBegin::AfterKey { + Some("]") => Ok(RangeBegin::AfterKey { key: String::from_utf8( BASE64_STANDARD .decode(token[1..].as_bytes()) @@ -631,8 +589,8 @@ impl ListObjectsQuery { } impl ListMultipartUploadsQuery { - fn build_accumulator(&self) -> Accumulator<Uuid, UploadInfo> { - Accumulator::<Uuid, UploadInfo>::new(self.common.page_size) + fn build_accumulator(&self) -> UploadAccumulator { + UploadAccumulator::new(self.common.page_size) } fn begin(&self) -> Result<RangeBegin, Error> { @@ -651,7 +609,7 @@ impl ListMultipartUploadsQuery { }), uuid => Ok(RangeBegin::AfterUpload { key: key_marker.to_string(), - upload: s3_put::decode_upload_id(uuid)?, + upload: s3_multipart::decode_upload_id(uuid)?, }), }, @@ -716,6 +674,7 @@ impl<K: std::cmp::Ord, V> Accumulator<K, V> { Some(p) => p, None => return None, }; + assert!(pfx.starts_with(&query.prefix)); // Try to register this prefix // If not possible, we can return early @@ -726,8 +685,11 @@ impl<K: std::cmp::Ord, V> Accumulator<K, V> { // We consume the whole common prefix from the iterator let mut last_pfx_key = &object.key; loop { - last_pfx_key = match objects.peek() { - Some(o) if o.key.starts_with(pfx) => &o.key, + match objects.peek() { + Some(o) if o.key.starts_with(pfx) => { + last_pfx_key = &o.key; + objects.next(); + } Some(_) => { return Some(ExtractionResult::Extracted { key: last_pfx_key.to_owned(), @@ -743,8 +705,6 @@ impl<K: std::cmp::Ord, V> Accumulator<K, V> { } } }; - - objects.next(); } } @@ -759,12 +719,11 @@ impl<K: std::cmp::Ord, V> Accumulator<K, V> { } // Otherwise, we need to check if we can add it - match self.is_full() { - true => false, - false => { - self.common_prefixes.insert(key); - true - } + if self.is_full() { + false + } else { + self.common_prefixes.insert(key); + true } } @@ -772,12 +731,11 @@ impl<K: std::cmp::Ord, V> Accumulator<K, V> { // It is impossible to add twice a key, this is an error assert!(!self.keys.contains_key(&key)); - match self.is_full() { - true => false, - false => { - self.keys.insert(key, value); - true - } + if self.is_full() { + false + } else { + self.keys.insert(key, value); + true } } } @@ -794,6 +752,7 @@ impl ExtractAccumulator for ObjectAccumulator { } let object = objects.next().expect("This iterator can not be empty as it is checked earlier in the code. This is a logic bug, please report it."); + assert!(object.key.starts_with(&query.prefix)); let version = match object.versions().iter().find(|x| x.is_data()) { Some(v) => v, @@ -843,7 +802,7 @@ impl ExtractAccumulator for UploadAccumulator { let mut uploads_for_key = object .versions() .iter() - .filter(|x| x.is_uploading()) + .filter(|x| x.is_uploading(Some(true))) .collect::<Vec<&ObjectVersion>>(); // S3 logic requires lexicographically sorted upload ids. @@ -918,14 +877,6 @@ impl ExtractAccumulator for UploadAccumulator { * Utility functions */ -/// This is a stub for Result::into_ok_or_err that is not yet in Rust stable -fn into_ok_or_err<T>(r: Result<T, T>) -> T { - match r { - Ok(r) => r, - Err(r) => r, - } -} - /// Returns the common prefix of the object given the query prefix and delimiter fn common_prefix<'a>(object: &'a Object, query: &ListQueryCommon) -> Option<&'a str> { match &query.delimiter { @@ -951,7 +902,6 @@ fn uriencode_maybe(s: &str, yes: bool) -> s3_xml::Value { #[cfg(test)] mod tests { use super::*; - use garage_model::s3::version_table::*; use garage_util::*; use std::iter::FromIterator; @@ -991,10 +941,13 @@ mod tests { ObjectVersion { uuid: Uuid::from(uuid), timestamp: TS, - state: ObjectVersionState::Uploading(ObjectVersionHeaders { - content_type: "text/plain".to_string(), - other: BTreeMap::<String, String>::new(), - }), + state: ObjectVersionState::Uploading { + multipart: true, + headers: ObjectVersionHeaders { + content_type: "text/plain".to_string(), + other: BTreeMap::<String, String>::new(), + }, + }, } } @@ -1169,83 +1122,77 @@ mod tests { Ok(()) } - fn version() -> Version { + fn mpu() -> MultipartUpload { let uuid = Uuid::from([0x08; 32]); - let blocks = vec![ + let parts = vec![ ( - VersionBlockKey { + MpuPartKey { part_number: 1, - offset: 1, + timestamp: TS, }, - VersionBlock { - hash: uuid, - size: 3, + MpuPart { + version: uuid, + size: Some(3), + etag: Some("etag1".into()), }, ), ( - VersionBlockKey { - part_number: 1, - offset: 2, + MpuPartKey { + part_number: 2, + timestamp: TS, }, - VersionBlock { - hash: uuid, - size: 2, + MpuPart { + version: uuid, + size: None, + etag: None, }, ), ( - VersionBlockKey { - part_number: 2, - offset: 1, + MpuPartKey { + part_number: 3, + timestamp: TS, }, - VersionBlock { - hash: uuid, - size: 8, + MpuPart { + version: uuid, + size: Some(10), + etag: Some("etag2".into()), }, ), ( - VersionBlockKey { + MpuPartKey { part_number: 5, - offset: 1, + timestamp: TS, }, - VersionBlock { - hash: uuid, - size: 7, + MpuPart { + version: uuid, + size: Some(7), + etag: Some("etag3".into()), }, ), ( - VersionBlockKey { + MpuPartKey { part_number: 8, - offset: 1, + timestamp: TS, }, - VersionBlock { - hash: uuid, - size: 5, + MpuPart { + version: uuid, + size: Some(5), + etag: Some("etag4".into()), }, ), ]; - let etags = vec![ - (1, "etag1".to_string()), - (3, "etag2".to_string()), - (5, "etag3".to_string()), - (8, "etag4".to_string()), - (9, "etag5".to_string()), - ]; - Version { - bucket_id: uuid, - key: "a".to_string(), - uuid, + MultipartUpload { + upload_id: uuid, + timestamp: TS, deleted: false.into(), - blocks: crdt::Map::<VersionBlockKey, VersionBlock>::from_iter(blocks), - parts_etags: crdt::Map::<u64, String>::from_iter(etags), + parts: crdt::Map::<MpuPartKey, MpuPart>::from_iter(parts), + bucket_id: uuid, + key: "a".into(), } } - fn obj() -> Object { - Object::new(bucket(), "d".to_string(), vec![objup_version([0x08; 32])]) - } - #[test] fn test_fetch_part_info() -> Result<(), Error> { let uuid = Uuid::from([0x08; 32]); @@ -1258,82 +1205,85 @@ mod tests { max_parts: 2, }; - assert!( - fetch_part_info(&query, None, None, uuid).is_err(), - "No object and version should fail" - ); - assert!( - fetch_part_info(&query, Some(obj()), None, uuid).is_err(), - "No version should faild" - ); - assert!( - fetch_part_info(&query, None, Some(version()), uuid).is_err(), - "No object should fail" - ); + let mpu = mpu(); // Start from the beginning but with limited size to trigger pagination - let (info, pagination) = fetch_part_info(&query, Some(obj()), Some(version()), uuid)?; - assert_eq!(pagination.unwrap(), 5); + let (info, pagination) = fetch_part_info(&query, &mpu)?; + assert_eq!(pagination.unwrap(), 3); assert_eq!( info, vec![ PartInfo { - etag: "etag1".to_string(), + etag: "etag1", timestamp: TS, part_number: 1, - size: 5 + size: 3 }, PartInfo { - etag: "etag3".to_string(), + etag: "etag2", timestamp: TS, - part_number: 5, - size: 7 + part_number: 3, + size: 10 }, ] ); // Use previous pagination to make a new request query.part_number_marker = Some(pagination.unwrap()); - let (info, pagination) = fetch_part_info(&query, Some(obj()), Some(version()), uuid)?; + let (info, pagination) = fetch_part_info(&query, &mpu)?; assert!(pagination.is_none()); assert_eq!( info, - vec![PartInfo { - etag: "etag4".to_string(), - timestamp: TS, - part_number: 8, - size: 5 - },] + vec![ + PartInfo { + etag: "etag3", + timestamp: TS, + part_number: 5, + size: 7 + }, + PartInfo { + etag: "etag4", + timestamp: TS, + part_number: 8, + size: 5 + }, + ] ); // Trying to access a part that is way larger than registered ones query.part_number_marker = Some(9999); - let (info, pagination) = fetch_part_info(&query, Some(obj()), Some(version()), uuid)?; + let (info, pagination) = fetch_part_info(&query, &mpu)?; assert!(pagination.is_none()); assert_eq!(info, vec![]); // Try without any limitation query.max_parts = 1000; query.part_number_marker = None; - let (info, pagination) = fetch_part_info(&query, Some(obj()), Some(version()), uuid)?; + let (info, pagination) = fetch_part_info(&query, &mpu)?; assert!(pagination.is_none()); assert_eq!( info, vec![ PartInfo { - etag: "etag1".to_string(), + etag: "etag1", timestamp: TS, part_number: 1, - size: 5 + size: 3 + }, + PartInfo { + etag: "etag2", + timestamp: TS, + part_number: 3, + size: 10 }, PartInfo { - etag: "etag3".to_string(), + etag: "etag3", timestamp: TS, part_number: 5, size: 7 }, PartInfo { - etag: "etag4".to_string(), + etag: "etag4", timestamp: TS, part_number: 8, size: 5 diff --git a/src/api/s3/mod.rs b/src/api/s3/mod.rs index 7b56d4d8..cbdb94ab 100644 --- a/src/api/s3/mod.rs +++ b/src/api/s3/mod.rs @@ -6,7 +6,9 @@ mod copy; pub mod cors; mod delete; pub mod get; +mod lifecycle; mod list; +mod multipart; mod post_object; mod put; mod website; diff --git a/src/api/s3/multipart.rs b/src/api/s3/multipart.rs new file mode 100644 index 00000000..6b786318 --- /dev/null +++ b/src/api/s3/multipart.rs @@ -0,0 +1,468 @@ +use std::collections::HashMap; +use std::sync::Arc; + +use futures::prelude::*; +use hyper::body::Body; +use hyper::{Request, Response}; +use md5::{Digest as Md5Digest, Md5}; + +use garage_table::*; +use garage_util::async_hash::*; +use garage_util::data::*; + +use garage_model::bucket_table::Bucket; +use garage_model::garage::Garage; +use garage_model::s3::block_ref_table::*; +use garage_model::s3::mpu_table::*; +use garage_model::s3::object_table::*; +use garage_model::s3::version_table::*; + +use crate::s3::error::*; +use crate::s3::put::*; +use crate::s3::xml as s3_xml; +use crate::signature::verify_signed_content; + +// ---- + +pub async fn handle_create_multipart_upload( + garage: Arc<Garage>, + req: &Request<Body>, + bucket_name: &str, + bucket_id: Uuid, + key: &String, +) -> Result<Response<Body>, Error> { + let existing_object = garage.object_table.get(&bucket_id, &key).await?; + + let upload_id = gen_uuid(); + let timestamp = next_timestamp(existing_object.as_ref()); + + let headers = get_headers(req.headers())?; + + // Create object in object table + let object_version = ObjectVersion { + uuid: upload_id, + timestamp, + state: ObjectVersionState::Uploading { + multipart: true, + headers, + }, + }; + let object = Object::new(bucket_id, key.to_string(), vec![object_version]); + garage.object_table.insert(&object).await?; + + // Create multipart upload in mpu table + // This multipart upload will hold references to uploaded parts + // (which are entries in the Version table) + let mpu = MultipartUpload::new(upload_id, timestamp, bucket_id, key.into(), false); + garage.mpu_table.insert(&mpu).await?; + + // Send success response + let result = s3_xml::InitiateMultipartUploadResult { + xmlns: (), + bucket: s3_xml::Value(bucket_name.to_string()), + key: s3_xml::Value(key.to_string()), + upload_id: s3_xml::Value(hex::encode(upload_id)), + }; + let xml = s3_xml::to_xml_with_header(&result)?; + + Ok(Response::new(Body::from(xml.into_bytes()))) +} + +pub async fn handle_put_part( + garage: Arc<Garage>, + req: Request<Body>, + bucket_id: Uuid, + key: &str, + part_number: u64, + upload_id: &str, + content_sha256: Option<Hash>, +) -> Result<Response<Body>, Error> { + let upload_id = decode_upload_id(upload_id)?; + + let content_md5 = match req.headers().get("content-md5") { + Some(x) => Some(x.to_str()?.to_string()), + None => None, + }; + + // Read first chuck, and at the same time try to get object to see if it exists + let key = key.to_string(); + + let body = req.into_body().map_err(Error::from); + let mut chunker = StreamChunker::new(body, garage.config.block_size); + + let ((_, _, mut mpu), first_block) = futures::try_join!( + get_upload(&garage, &bucket_id, &key, &upload_id), + chunker.next(), + )?; + + // Check object is valid and part can be accepted + let first_block = first_block.ok_or_bad_request("Empty body")?; + + // Calculate part identity: timestamp, version id + let version_uuid = gen_uuid(); + let mpu_part_key = MpuPartKey { + part_number, + timestamp: mpu.next_timestamp(part_number), + }; + + // 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(InterruptedCleanupInner { + garage: garage.clone(), + upload_id, + version_uuid, + })); + + // Create version and link version from MPU + mpu.parts.clear(); + mpu.parts.put( + mpu_part_key, + MpuPart { + version: version_uuid, + etag: None, + size: None, + }, + ); + garage.mpu_table.insert(&mpu).await?; + + let version = Version::new( + version_uuid, + VersionBacklink::MultipartUpload { upload_id }, + false, + ); + garage.version_table.insert(&version).await?; + + // Copy data to version + let first_block_hash = async_blake2sum(first_block.clone()).await; + + let (total_size, data_md5sum, data_sha256sum) = read_and_put_blocks( + &garage, + &version, + part_number, + first_block, + first_block_hash, + &mut chunker, + ) + .await?; + + // Verify that checksums map + ensure_checksum_matches( + data_md5sum.as_slice(), + data_sha256sum, + content_md5.as_deref(), + content_sha256, + )?; + + // Store part etag in version + let data_md5sum_hex = hex::encode(data_md5sum); + mpu.parts.put( + mpu_part_key, + MpuPart { + version: version_uuid, + etag: Some(data_md5sum_hex.clone()), + size: Some(total_size), + }, + ); + garage.mpu_table.insert(&mpu).await?; + + // We were not interrupted, everything went fine. + // We won't have to clean up on drop. + interrupted_cleanup.cancel(); + + let response = Response::builder() + .header("ETag", format!("\"{}\"", data_md5sum_hex)) + .body(Body::empty()) + .unwrap(); + Ok(response) +} + +struct InterruptedCleanup(Option<InterruptedCleanupInner>); +struct InterruptedCleanupInner { + garage: Arc<Garage>, + upload_id: Uuid, + version_uuid: Uuid, +} + +impl InterruptedCleanup { + fn cancel(&mut self) { + drop(self.0.take()); + } +} +impl Drop for InterruptedCleanup { + fn drop(&mut self) { + if let Some(info) = self.0.take() { + tokio::spawn(async move { + let version = Version::new( + info.version_uuid, + VersionBacklink::MultipartUpload { + upload_id: info.upload_id, + }, + true, + ); + if let Err(e) = info.garage.version_table.insert(&version).await { + warn!("Cannot cleanup after aborted UploadPart: {}", e); + } + }); + } + } +} + +pub async fn handle_complete_multipart_upload( + garage: Arc<Garage>, + req: Request<Body>, + bucket_name: &str, + bucket: &Bucket, + key: &str, + upload_id: &str, + content_sha256: Option<Hash>, +) -> Result<Response<Body>, Error> { + let body = hyper::body::to_bytes(req.into_body()).await?; + + if let Some(content_sha256) = content_sha256 { + verify_signed_content(content_sha256, &body[..])?; + } + + let body_xml = roxmltree::Document::parse(std::str::from_utf8(&body)?)?; + let body_list_of_parts = parse_complete_multipart_upload_body(&body_xml) + .ok_or_bad_request("Invalid CompleteMultipartUpload XML")?; + debug!( + "CompleteMultipartUpload list of parts: {:?}", + body_list_of_parts + ); + + let upload_id = decode_upload_id(upload_id)?; + + // Get object and multipart upload + let key = key.to_string(); + let (object, mut object_version, mpu) = + get_upload(&garage, &bucket.id, &key, &upload_id).await?; + + if mpu.parts.is_empty() { + return Err(Error::bad_request("No data was uploaded")); + } + + let headers = match object_version.state { + ObjectVersionState::Uploading { headers, .. } => headers, + _ => unreachable!(), + }; + + // Check that part numbers are an increasing sequence. + // (it doesn't need to start at 1 nor to be a continuous sequence, + // see discussion in #192) + if body_list_of_parts.is_empty() { + return Err(Error::EntityTooSmall); + } + if !body_list_of_parts + .iter() + .zip(body_list_of_parts.iter().skip(1)) + .all(|(p1, p2)| p1.part_number < p2.part_number) + { + return Err(Error::InvalidPartOrder); + } + + // Check that the list of parts they gave us corresponds to parts we have here + debug!("Parts stored in multipart upload: {:?}", mpu.parts.items()); + let mut have_parts = HashMap::new(); + for (pk, pv) in mpu.parts.items().iter() { + have_parts.insert(pk.part_number, pv); + } + let mut parts = vec![]; + for req_part in body_list_of_parts.iter() { + match have_parts.get(&req_part.part_number) { + Some(part) if part.etag.as_ref() == Some(&req_part.etag) && part.size.is_some() => { + parts.push(*part) + } + _ => return Err(Error::InvalidPart), + } + } + + let grg = &garage; + let parts_versions = futures::future::try_join_all(parts.iter().map(|p| async move { + grg.version_table + .get(&p.version, &EmptyKey) + .await? + .ok_or_internal_error("Part version missing from version table") + })) + .await?; + + // Create final version and block refs + let mut final_version = Version::new( + upload_id, + VersionBacklink::Object { + bucket_id: bucket.id, + key: key.to_string(), + }, + false, + ); + for (part_number, part_version) in parts_versions.iter().enumerate() { + if part_version.deleted.get() { + return Err(Error::InvalidPart); + } + for (vbk, vb) in part_version.blocks.items().iter() { + final_version.blocks.put( + VersionBlockKey { + part_number: (part_number + 1) as u64, + offset: vbk.offset, + }, + *vb, + ); + } + } + garage.version_table.insert(&final_version).await?; + + let block_refs = final_version.blocks.items().iter().map(|(_, b)| BlockRef { + block: b.hash, + version: upload_id, + deleted: false.into(), + }); + garage.block_ref_table.insert_many(block_refs).await?; + + // Calculate etag of final object + // To understand how etags are calculated, read more here: + // https://teppen.io/2018/06/23/aws_s3_etags/ + let mut etag_md5_hasher = Md5::new(); + for part in parts.iter() { + etag_md5_hasher.update(part.etag.as_ref().unwrap().as_bytes()); + } + let etag = format!( + "{}-{}", + hex::encode(etag_md5_hasher.finalize()), + parts.len() + ); + + // Calculate total size of final object + let total_size = parts.iter().map(|x| x.size.unwrap()).sum(); + + if let Err(e) = check_quotas(&garage, bucket, total_size, Some(&object)).await { + object_version.state = ObjectVersionState::Aborted; + let final_object = Object::new(bucket.id, key.clone(), vec![object_version]); + garage.object_table.insert(&final_object).await?; + + return Err(e); + } + + // Write final object version + object_version.state = ObjectVersionState::Complete(ObjectVersionData::FirstBlock( + ObjectVersionMeta { + headers, + size: total_size, + etag: etag.clone(), + }, + final_version.blocks.items()[0].1.hash, + )); + + let final_object = Object::new(bucket.id, key.clone(), vec![object_version]); + garage.object_table.insert(&final_object).await?; + + // Send response saying ok we're done + let result = s3_xml::CompleteMultipartUploadResult { + xmlns: (), + location: None, + bucket: s3_xml::Value(bucket_name.to_string()), + key: s3_xml::Value(key), + etag: s3_xml::Value(format!("\"{}\"", etag)), + }; + let xml = s3_xml::to_xml_with_header(&result)?; + + Ok(Response::new(Body::from(xml.into_bytes()))) +} + +pub async fn handle_abort_multipart_upload( + garage: Arc<Garage>, + bucket_id: Uuid, + key: &str, + upload_id: &str, +) -> Result<Response<Body>, Error> { + let upload_id = decode_upload_id(upload_id)?; + + let (_, mut object_version, _) = + get_upload(&garage, &bucket_id, &key.to_string(), &upload_id).await?; + + object_version.state = ObjectVersionState::Aborted; + let final_object = Object::new(bucket_id, key.to_string(), vec![object_version]); + garage.object_table.insert(&final_object).await?; + + Ok(Response::new(Body::from(vec![]))) +} + +// ======== helpers ============ + +#[allow(clippy::ptr_arg)] +pub(crate) async fn get_upload( + garage: &Garage, + bucket_id: &Uuid, + key: &String, + upload_id: &Uuid, +) -> Result<(Object, ObjectVersion, MultipartUpload), Error> { + let (object, mpu) = futures::try_join!( + garage.object_table.get(bucket_id, key).map_err(Error::from), + garage + .mpu_table + .get(upload_id, &EmptyKey) + .map_err(Error::from), + )?; + + let object = object.ok_or(Error::NoSuchUpload)?; + let mpu = mpu.ok_or(Error::NoSuchUpload)?; + + let object_version = object + .versions() + .iter() + .find(|v| v.uuid == *upload_id && v.is_uploading(Some(true))) + .ok_or(Error::NoSuchUpload)? + .clone(); + + Ok((object, object_version, mpu)) +} + +pub fn decode_upload_id(id: &str) -> Result<Uuid, Error> { + let id_bin = hex::decode(id).map_err(|_| Error::NoSuchUpload)?; + if id_bin.len() != 32 { + return Err(Error::NoSuchUpload); + } + let mut uuid = [0u8; 32]; + uuid.copy_from_slice(&id_bin[..]); + Ok(Uuid::from(uuid)) +} + +#[derive(Debug)] +struct CompleteMultipartUploadPart { + etag: String, + part_number: u64, +} + +fn parse_complete_multipart_upload_body( + xml: &roxmltree::Document, +) -> Option<Vec<CompleteMultipartUploadPart>> { + let mut parts = vec![]; + + let root = xml.root(); + let cmu = root.first_child()?; + if !cmu.has_tag_name("CompleteMultipartUpload") { + return None; + } + + for item in cmu.children() { + // Only parse <Part> nodes + if !item.is_element() { + continue; + } + + if item.has_tag_name("Part") { + let etag = item.children().find(|e| e.has_tag_name("ETag"))?.text()?; + let part_number = item + .children() + .find(|e| e.has_tag_name("PartNumber"))? + .text()?; + parts.push(CompleteMultipartUploadPart { + etag: etag.trim_matches('"').to_string(), + part_number: part_number.parse().ok()?, + }); + } else { + return None; + } + } + + Some(parts) +} diff --git a/src/api/s3/put.rs b/src/api/s3/put.rs index 350ab884..606facc4 100644 --- a/src/api/s3/put.rs +++ b/src/api/s3/put.rs @@ -1,8 +1,9 @@ -use std::collections::{BTreeMap, BTreeSet, HashMap}; +use std::collections::{BTreeMap, HashMap}; use std::sync::Arc; use base64::prelude::*; use futures::prelude::*; +use futures::try_join; use hyper::body::{Body, Bytes}; use hyper::header::{HeaderMap, HeaderValue}; use hyper::{Request, Response}; @@ -30,14 +31,12 @@ use garage_model::s3::object_table::*; use garage_model::s3::version_table::*; use crate::s3::error::*; -use crate::s3::xml as s3_xml; -use crate::signature::verify_signed_content; pub async fn handle_put( garage: Arc<Garage>, req: Request<Body>, bucket: &Bucket, - key: &str, + key: &String, content_sha256: Option<Hash>, ) -> Result<Response<Body>, Error> { // Retrieve interesting headers from request @@ -70,16 +69,24 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>( headers: ObjectVersionHeaders, body: S, bucket: &Bucket, - key: &str, + key: &String, content_md5: Option<String>, content_sha256: Option<FixedBytes32>, ) -> Result<(Uuid, String), Error> { + let mut chunker = StreamChunker::new(body, garage.config.block_size); + let (first_block_opt, existing_object) = try_join!( + chunker.next(), + garage + .object_table + .get(&bucket.id, key) + .map_err(Error::from), + )?; + + let first_block = first_block_opt.unwrap_or_default(); + // Generate identity of new version let version_uuid = gen_uuid(); - let version_timestamp = now_msec(); - - let mut chunker = StreamChunker::new(body, garage.config.block_size); - let first_block = chunker.next().await?.unwrap_or_default(); + let version_timestamp = next_timestamp(existing_object.as_ref()); // If body is small enough, store it directly in the object table // as "inline data". We can then return immediately. @@ -99,7 +106,7 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>( content_sha256, )?; - check_quotas(&garage, bucket, key, size).await?; + check_quotas(&garage, bucket, size, existing_object.as_ref()).await?; let object_version = ObjectVersion { uuid: version_uuid, @@ -123,20 +130,23 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>( // 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(), + let mut interrupted_cleanup = InterruptedCleanup(Some(InterruptedCleanupInner { + garage: garage.clone(), + bucket_id: bucket.id, + key: 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 { uuid: version_uuid, timestamp: version_timestamp, - state: ObjectVersionState::Uploading(headers.clone()), + state: ObjectVersionState::Uploading { + headers: headers.clone(), + multipart: false, + }, }; let object = Object::new(bucket.id, key.into(), vec![object_version.clone()]); garage.object_table.insert(&object).await?; @@ -145,7 +155,14 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>( // Write this entry now, even with empty block list, // to prevent block_ref entries from being deleted (they can be deleted // if the reference a version that isn't found in the version table) - let version = Version::new(version_uuid, bucket.id, key.into(), false); + let version = Version::new( + version_uuid, + VersionBacklink::Object { + bucket_id: bucket.id, + key: key.into(), + }, + false, + ); garage.version_table.insert(&version).await?; // Transfer data and verify checksum @@ -168,7 +185,7 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>( content_sha256, )?; - check_quotas(&garage, bucket, key, total_size).await?; + check_quotas(&garage, bucket, total_size, existing_object.as_ref()).await?; // Save final object state, marked as Complete let md5sum_hex = hex::encode(data_md5sum); @@ -192,7 +209,7 @@ pub(crate) async fn save_stream<S: Stream<Item = Result<Bytes, Error>> + Unpin>( /// Validate MD5 sum against content-md5 header /// and sha256sum against signed content-sha256 -fn ensure_checksum_matches( +pub(crate) fn ensure_checksum_matches( data_md5sum: &[u8], data_sha256sum: garage_util::data::FixedBytes32, content_md5: Option<&str>, @@ -218,22 +235,22 @@ fn ensure_checksum_matches( } /// Check that inserting this object with this size doesn't exceed bucket quotas -async fn check_quotas( +pub(crate) async fn check_quotas( garage: &Arc<Garage>, bucket: &Bucket, - key: &str, size: u64, + prev_object: Option<&Object>, ) -> Result<(), Error> { let quotas = bucket.state.as_option().unwrap().quotas.get(); if quotas.max_objects.is_none() && quotas.max_size.is_none() { return Ok(()); }; - let key = key.to_string(); - let (prev_object, counters) = futures::try_join!( - garage.object_table.get(&bucket.id, &key), - garage.object_counter_table.table.get(&bucket.id, &EmptyKey), - )?; + let counters = garage + .object_counter_table + .table + .get(&bucket.id, &EmptyKey) + .await?; let counters = counters .map(|x| x.filtered_values(&garage.system.ring.borrow())) @@ -267,7 +284,7 @@ async fn check_quotas( if cnt_size_diff > 0 && current_size + cnt_size_diff > ms as i64 { return Err(Error::forbidden(format!( "Bucket size quota is reached, maximum total size of objects for this bucket: {}. The bucket is already {} bytes, and this object would add {} bytes.", - ms, current_size, size + ms, current_size, cnt_size_diff ))); } } @@ -275,7 +292,7 @@ async fn check_quotas( Ok(()) } -async fn read_and_put_blocks<S: Stream<Item = Result<Bytes, Error>> + Unpin>( +pub(crate) async fn read_and_put_blocks<S: Stream<Item = Result<Bytes, Error>> + Unpin>( garage: &Garage, version: &Version, part_number: u64, @@ -381,7 +398,7 @@ async fn put_block_meta( Ok(()) } -struct StreamChunker<S: Stream<Item = Result<Bytes, Error>>> { +pub(crate) struct StreamChunker<S: Stream<Item = Result<Bytes, Error>>> { stream: S, read_all: bool, block_size: usize, @@ -389,7 +406,7 @@ struct StreamChunker<S: Stream<Item = Result<Bytes, Error>>> { } impl<S: Stream<Item = Result<Bytes, Error>> + Unpin> StreamChunker<S> { - fn new(stream: S, block_size: usize) -> Self { + pub(crate) fn new(stream: S, block_size: usize) -> Self { Self { stream, read_all: false, @@ -398,7 +415,7 @@ impl<S: Stream<Item = Result<Bytes, Error>> + Unpin> StreamChunker<S> { } } - async fn next(&mut self) -> Result<Option<Bytes>, Error> { + pub(crate) async fn next(&mut self) -> Result<Option<Bytes>, Error> { while !self.read_all && self.buf.len() < self.block_size { if let Some(block) = self.stream.next().await { let bytes = block?; @@ -425,7 +442,14 @@ pub fn put_response(version_uuid: Uuid, md5sum_hex: String) -> Response<Body> { .unwrap() } -struct InterruptedCleanup(Option<(Arc<Garage>, Uuid, String, Uuid, u64)>); +struct InterruptedCleanup(Option<InterruptedCleanupInner>); +struct InterruptedCleanupInner { + garage: Arc<Garage>, + bucket_id: Uuid, + key: String, + version_uuid: Uuid, + version_timestamp: u64, +} impl InterruptedCleanup { fn cancel(&mut self) { @@ -434,15 +458,15 @@ impl InterruptedCleanup { } impl Drop for InterruptedCleanup { fn drop(&mut self) { - if let Some((garage, bucket_id, key, version_uuid, version_ts)) = self.0.take() { + if let Some(info) = self.0.take() { tokio::spawn(async move { let object_version = ObjectVersion { - uuid: version_uuid, - timestamp: version_ts, + uuid: info.version_uuid, + timestamp: info.version_timestamp, state: ObjectVersionState::Aborted, }; - let object = Object::new(bucket_id, key, vec![object_version]); - if let Err(e) = garage.object_table.insert(&object).await { + let object = Object::new(info.bucket_id, info.key, vec![object_version]); + if let Err(e) = info.garage.object_table.insert(&object).await { warn!("Cannot cleanup after aborted PutObject: {}", e); } }); @@ -450,326 +474,9 @@ impl Drop for InterruptedCleanup { } } -// ---- - -pub async fn handle_create_multipart_upload( - garage: Arc<Garage>, - req: &Request<Body>, - bucket_name: &str, - bucket_id: Uuid, - key: &str, -) -> Result<Response<Body>, Error> { - let version_uuid = gen_uuid(); - let headers = get_headers(req.headers())?; - - // Create object in object table - let object_version = ObjectVersion { - uuid: version_uuid, - timestamp: now_msec(), - state: ObjectVersionState::Uploading(headers), - }; - let object = Object::new(bucket_id, key.to_string(), vec![object_version]); - garage.object_table.insert(&object).await?; - - // Insert empty version so that block_ref entries refer to something - // (they are inserted concurrently with blocks in the version table, so - // there is the possibility that they are inserted before the version table - // is created, in which case it is allowed to delete them, e.g. in repair_*) - let version = Version::new(version_uuid, bucket_id, key.into(), false); - garage.version_table.insert(&version).await?; - - // Send success response - let result = s3_xml::InitiateMultipartUploadResult { - xmlns: (), - bucket: s3_xml::Value(bucket_name.to_string()), - key: s3_xml::Value(key.to_string()), - upload_id: s3_xml::Value(hex::encode(version_uuid)), - }; - let xml = s3_xml::to_xml_with_header(&result)?; - - Ok(Response::new(Body::from(xml.into_bytes()))) -} - -pub async fn handle_put_part( - garage: Arc<Garage>, - req: Request<Body>, - bucket_id: Uuid, - key: &str, - part_number: u64, - upload_id: &str, - content_sha256: Option<Hash>, -) -> Result<Response<Body>, Error> { - let version_uuid = decode_upload_id(upload_id)?; - - let content_md5 = match req.headers().get("content-md5") { - Some(x) => Some(x.to_str()?.to_string()), - None => None, - }; - - // Read first chuck, and at the same time try to get object to see if it exists - let key = key.to_string(); - - let body = req.into_body().map_err(Error::from); - let mut chunker = StreamChunker::new(body, garage.config.block_size); - - let (object, version, first_block) = futures::try_join!( - garage - .object_table - .get(&bucket_id, &key) - .map_err(Error::from), - garage - .version_table - .get(&version_uuid, &EmptyKey) - .map_err(Error::from), - chunker.next(), - )?; - - // Check object is valid and multipart block can be accepted - let first_block = first_block.ok_or_bad_request("Empty body")?; - let object = object.ok_or_bad_request("Object not found")?; - - if !object - .versions() - .iter() - .any(|v| v.uuid == version_uuid && v.is_uploading()) - { - return Err(Error::NoSuchUpload); - } - - // Check part hasn't already been uploaded - if let Some(v) = version { - if v.has_part_number(part_number) { - return Err(Error::bad_request(format!( - "Part number {} has already been uploaded", - part_number - ))); - } - } - - // Copy block to store - let version = Version::new(version_uuid, bucket_id, key, false); - - let first_block_hash = async_blake2sum(first_block.clone()).await; - - let (_, data_md5sum, data_sha256sum) = read_and_put_blocks( - &garage, - &version, - part_number, - first_block, - first_block_hash, - &mut chunker, - ) - .await?; - - // Verify that checksums map - ensure_checksum_matches( - data_md5sum.as_slice(), - data_sha256sum, - content_md5.as_deref(), - content_sha256, - )?; - - // Store part etag in version - let data_md5sum_hex = hex::encode(data_md5sum); - let mut version = version; - version - .parts_etags - .put(part_number, data_md5sum_hex.clone()); - garage.version_table.insert(&version).await?; - - let response = Response::builder() - .header("ETag", format!("\"{}\"", data_md5sum_hex)) - .body(Body::empty()) - .unwrap(); - Ok(response) -} - -pub async fn handle_complete_multipart_upload( - garage: Arc<Garage>, - req: Request<Body>, - bucket_name: &str, - bucket: &Bucket, - key: &str, - upload_id: &str, - content_sha256: Option<Hash>, -) -> Result<Response<Body>, Error> { - let body = hyper::body::to_bytes(req.into_body()).await?; - - if let Some(content_sha256) = content_sha256 { - verify_signed_content(content_sha256, &body[..])?; - } - - let body_xml = roxmltree::Document::parse(std::str::from_utf8(&body)?)?; - let body_list_of_parts = parse_complete_multipart_upload_body(&body_xml) - .ok_or_bad_request("Invalid CompleteMultipartUpload XML")?; - debug!( - "CompleteMultipartUpload list of parts: {:?}", - body_list_of_parts - ); - - let version_uuid = decode_upload_id(upload_id)?; - - // Get object and version - let key = key.to_string(); - let (object, version) = futures::try_join!( - garage.object_table.get(&bucket.id, &key), - garage.version_table.get(&version_uuid, &EmptyKey), - )?; - - let object = object.ok_or(Error::NoSuchKey)?; - let mut object_version = object - .versions() - .iter() - .find(|v| v.uuid == version_uuid && v.is_uploading()) - .cloned() - .ok_or(Error::NoSuchUpload)?; - - let version = version.ok_or(Error::NoSuchKey)?; - if version.blocks.is_empty() { - return Err(Error::bad_request("No data was uploaded")); - } - - let headers = match object_version.state { - ObjectVersionState::Uploading(headers) => headers, - _ => unreachable!(), - }; - - // Check that part numbers are an increasing sequence. - // (it doesn't need to start at 1 nor to be a continuous sequence, - // see discussion in #192) - if body_list_of_parts.is_empty() { - return Err(Error::EntityTooSmall); - } - if !body_list_of_parts - .iter() - .zip(body_list_of_parts.iter().skip(1)) - .all(|(p1, p2)| p1.part_number < p2.part_number) - { - return Err(Error::InvalidPartOrder); - } - - // Garage-specific restriction, see #204: part numbers must be - // consecutive starting at 1 - if body_list_of_parts[0].part_number != 1 - || !body_list_of_parts - .iter() - .zip(body_list_of_parts.iter().skip(1)) - .all(|(p1, p2)| p1.part_number + 1 == p2.part_number) - { - return Err(Error::NotImplemented("Garage does not support completing a Multipart upload with non-consecutive part numbers. This is a restriction of Garage's data model, which might be fixed in a future release. See issue #204 for more information on this topic.".into())); - } - - // Check that the list of parts they gave us corresponds to the parts we have here - debug!("Expected parts from request: {:?}", body_list_of_parts); - debug!("Parts stored in version: {:?}", version.parts_etags.items()); - let parts = version - .parts_etags - .items() - .iter() - .map(|pair| (&pair.0, &pair.1)); - let same_parts = body_list_of_parts - .iter() - .map(|x| (&x.part_number, &x.etag)) - .eq(parts); - if !same_parts { - return Err(Error::InvalidPart); - } - - // Check that all blocks belong to one of the parts - let block_parts = version - .blocks - .items() - .iter() - .map(|(bk, _)| bk.part_number) - .collect::<BTreeSet<_>>(); - let same_parts = body_list_of_parts - .iter() - .map(|x| x.part_number) - .eq(block_parts.into_iter()); - if !same_parts { - return Err(Error::bad_request( - "Part numbers in block list and part list do not match. This can happen if a part was partially uploaded. Please abort the multipart upload and try again." - )); - } - - // Calculate etag of final object - // To understand how etags are calculated, read more here: - // https://teppen.io/2018/06/23/aws_s3_etags/ - let num_parts = body_list_of_parts.len(); - let mut etag_md5_hasher = Md5::new(); - for (_, etag) in version.parts_etags.items().iter() { - etag_md5_hasher.update(etag.as_bytes()); - } - let etag = format!("{}-{}", hex::encode(etag_md5_hasher.finalize()), num_parts); - - // Calculate total size of final object - let total_size = version.blocks.items().iter().map(|x| x.1.size).sum(); - - if let Err(e) = check_quotas(&garage, bucket, &key, total_size).await { - object_version.state = ObjectVersionState::Aborted; - let final_object = Object::new(bucket.id, key.clone(), vec![object_version]); - garage.object_table.insert(&final_object).await?; - - return Err(e); - } - - // Write final object version - object_version.state = ObjectVersionState::Complete(ObjectVersionData::FirstBlock( - ObjectVersionMeta { - headers, - size: total_size, - etag: etag.clone(), - }, - version.blocks.items()[0].1.hash, - )); - - let final_object = Object::new(bucket.id, key.clone(), vec![object_version]); - garage.object_table.insert(&final_object).await?; - - // Send response saying ok we're done - let result = s3_xml::CompleteMultipartUploadResult { - xmlns: (), - location: None, - bucket: s3_xml::Value(bucket_name.to_string()), - key: s3_xml::Value(key), - etag: s3_xml::Value(format!("\"{}\"", etag)), - }; - let xml = s3_xml::to_xml_with_header(&result)?; - - Ok(Response::new(Body::from(xml.into_bytes()))) -} - -pub async fn handle_abort_multipart_upload( - garage: Arc<Garage>, - bucket_id: Uuid, - key: &str, - upload_id: &str, -) -> Result<Response<Body>, Error> { - let version_uuid = decode_upload_id(upload_id)?; - - let object = garage - .object_table - .get(&bucket_id, &key.to_string()) - .await?; - let object = object.ok_or(Error::NoSuchKey)?; - - let object_version = object - .versions() - .iter() - .find(|v| v.uuid == version_uuid && v.is_uploading()); - let mut object_version = match object_version { - None => return Err(Error::NoSuchUpload), - Some(x) => x.clone(), - }; +// ============ helpers ============ - object_version.state = ObjectVersionState::Aborted; - let final_object = Object::new(bucket_id, key.to_string(), vec![object_version]); - garage.object_table.insert(&final_object).await?; - - Ok(Response::new(Body::from(vec![]))) -} - -fn get_mime_type(headers: &HeaderMap<HeaderValue>) -> Result<String, Error> { +pub(crate) fn get_mime_type(headers: &HeaderMap<HeaderValue>) -> Result<String, Error> { Ok(headers .get(hyper::header::CONTENT_TYPE) .map(|x| x.to_str()) @@ -822,53 +529,10 @@ pub(crate) fn get_headers(headers: &HeaderMap<HeaderValue>) -> Result<ObjectVers }) } -pub fn decode_upload_id(id: &str) -> Result<Uuid, Error> { - let id_bin = hex::decode(id).map_err(|_| Error::NoSuchUpload)?; - if id_bin.len() != 32 { - return Err(Error::NoSuchUpload); - } - let mut uuid = [0u8; 32]; - uuid.copy_from_slice(&id_bin[..]); - Ok(Uuid::from(uuid)) -} - -#[derive(Debug)] -struct CompleteMultipartUploadPart { - etag: String, - part_number: u64, -} - -fn parse_complete_multipart_upload_body( - xml: &roxmltree::Document, -) -> Option<Vec<CompleteMultipartUploadPart>> { - let mut parts = vec![]; - - let root = xml.root(); - let cmu = root.first_child()?; - if !cmu.has_tag_name("CompleteMultipartUpload") { - return None; - } - - for item in cmu.children() { - // Only parse <Part> nodes - if !item.is_element() { - continue; - } - - if item.has_tag_name("Part") { - let etag = item.children().find(|e| e.has_tag_name("ETag"))?.text()?; - let part_number = item - .children() - .find(|e| e.has_tag_name("PartNumber"))? - .text()?; - parts.push(CompleteMultipartUploadPart { - etag: etag.trim_matches('"').to_string(), - part_number: part_number.parse().ok()?, - }); - } else { - return None; - } - } - - Some(parts) +pub(crate) fn next_timestamp(existing_object: Option<&Object>) -> u64 { + existing_object + .as_ref() + .and_then(|obj| obj.versions().iter().map(|v| v.timestamp).max()) + .map(|t| std::cmp::max(t + 1, now_msec())) + .unwrap_or_else(now_msec) } diff --git a/src/api/s3/website.rs b/src/api/s3/website.rs index 77738971..7f2ab925 100644 --- a/src/api/s3/website.rs +++ b/src/api/s3/website.rs @@ -43,14 +43,11 @@ pub async fn handle_get_website(bucket: &Bucket) -> Result<Response<Body>, Error pub async fn handle_delete_website( garage: Arc<Garage>, - bucket_id: Uuid, + mut bucket: Bucket, ) -> Result<Response<Body>, Error> { - let mut bucket = garage - .bucket_helper() - .get_existing_bucket(bucket_id) - .await?; - - let param = bucket.params_mut().unwrap(); + let param = bucket + .params_mut() + .ok_or_internal_error("Bucket should not be deleted at this point")?; param.website_config.update(None); garage.bucket_table.insert(&bucket).await?; @@ -62,7 +59,7 @@ pub async fn handle_delete_website( pub async fn handle_put_website( garage: Arc<Garage>, - bucket_id: Uuid, + mut bucket: Bucket, req: Request<Body>, content_sha256: Option<Hash>, ) -> Result<Response<Body>, Error> { @@ -72,12 +69,9 @@ pub async fn handle_put_website( verify_signed_content(content_sha256, &body[..])?; } - let mut bucket = garage - .bucket_helper() - .get_existing_bucket(bucket_id) - .await?; - - let param = bucket.params_mut().unwrap(); + let param = bucket + .params_mut() + .ok_or_internal_error("Bucket should not be deleted at this point")?; let conf: WebsiteConfiguration = from_reader(&body as &[u8])?; conf.validate()?; diff --git a/src/block/Cargo.toml b/src/block/Cargo.toml index df16959b..f6aa5f64 100644 --- a/src/block/Cargo.toml +++ b/src/block/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_block" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>"] edition = "2018" license = "AGPL-3.0" @@ -24,6 +24,7 @@ opentelemetry = "0.17" arc-swap = "1.5" async-trait = "0.1.7" bytes = "1.0" +bytesize = "1.2" hex = "0.4" tracing = "0.1" rand = "0.8" diff --git a/src/block/block.rs b/src/block/block.rs index 935aa900..20f57aa5 100644 --- a/src/block/block.rs +++ b/src/block/block.rs @@ -1,3 +1,5 @@ +use std::path::PathBuf; + use bytes::Bytes; use serde::{Deserialize, Serialize}; use zstd::stream::{decode_all as zstd_decode, Encoder}; @@ -19,6 +21,14 @@ pub enum DataBlock { Compressed(Bytes), } +#[derive(Debug)] +pub enum DataBlockPath { + /// Uncompressed data fail + Plain(PathBuf), + /// Compressed data fail + Compressed(PathBuf), +} + impl DataBlock { /// Query whether this block is compressed pub fn is_compressed(&self) -> bool { diff --git a/src/block/layout.rs b/src/block/layout.rs new file mode 100644 index 00000000..e8339405 --- /dev/null +++ b/src/block/layout.rs @@ -0,0 +1,337 @@ +use std::path::PathBuf; + +use serde::{Deserialize, Serialize}; + +use garage_util::config::DataDirEnum; +use garage_util::data::Hash; +use garage_util::error::{Error, OkOrMessage}; +use garage_util::migrate::*; + +type Idx = u16; + +const DRIVE_NPART: usize = 1024; + +const HASH_DRIVE_BYTES: (usize, usize) = (2, 3); + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub(crate) struct DataLayout { + pub(crate) data_dirs: Vec<DataDir>, + + /// Primary storage location (index in data_dirs) for each partition + /// = the location where the data is supposed to be, blocks are always + /// written there (copies in other dirs may be deleted if they exist) + pub(crate) part_prim: Vec<Idx>, + /// Secondary storage locations for each partition = locations + /// where data blocks might be, we check from these dirs when reading + pub(crate) part_sec: Vec<Vec<Idx>>, +} + +#[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)] +pub(crate) struct DataDir { + pub(crate) path: PathBuf, + pub(crate) state: DataDirState, +} + +#[derive(Serialize, Deserialize, Debug, Clone, Copy, Eq, PartialEq)] +pub(crate) enum DataDirState { + Active { capacity: u64 }, + ReadOnly, +} + +impl DataLayout { + pub(crate) fn initialize(dirs: &DataDirEnum) -> Result<Self, Error> { + let data_dirs = make_data_dirs(dirs)?; + + // Split partitions proportionnally to capacity for all drives + // to affect primary storage location + let total_cap = data_dirs.iter().filter_map(|x| x.capacity()).sum::<u64>(); + assert!(total_cap > 0); + + let mut part_prim = Vec::with_capacity(DRIVE_NPART); + let mut cum_cap = 0; + for (i, dd) in data_dirs.iter().enumerate() { + if let DataDirState::Active { capacity } = dd.state { + cum_cap += capacity; + let n_total = (cum_cap * DRIVE_NPART as u64) / total_cap; + part_prim.resize(n_total as usize, i as Idx); + } + } + assert_eq!(cum_cap, total_cap); + assert_eq!(part_prim.len(), DRIVE_NPART); + + // If any of the storage locations is non-empty, it probably existed before + // this algorithm was added, so add it as a secondary storage location for all partitions + // to make sure existing files are not lost + let mut part_sec = vec![vec![]; DRIVE_NPART]; + for (i, dd) in data_dirs.iter().enumerate() { + if dir_not_empty(&dd.path)? { + for (sec, prim) in part_sec.iter_mut().zip(part_prim.iter()) { + if *prim != i as Idx { + sec.push(i as Idx); + } + } + } + } + + Ok(Self { + data_dirs, + part_prim, + part_sec, + }) + } + + pub(crate) fn update(&mut self, dirs: &DataDirEnum) -> Result<(), Error> { + // Make list of new data directories, exit if nothing changed + let data_dirs = make_data_dirs(dirs)?; + if data_dirs == self.data_dirs { + return Ok(()); + } + + let total_cap = data_dirs.iter().filter_map(|x| x.capacity()).sum::<u64>(); + assert!(total_cap > 0); + + // Compute mapping of old indices to new indices + let old2new = self + .data_dirs + .iter() + .map(|x| { + data_dirs + .iter() + .position(|y| y.path == x.path) + .map(|x| x as Idx) + }) + .collect::<Vec<_>>(); + + // Compute secondary location list for partitions based on existing + // folders, translating indices from old to new + let mut part_sec = self + .part_sec + .iter() + .map(|dl| { + dl.iter() + .filter_map(|old| old2new.get(*old as usize).copied().flatten()) + .collect::<Vec<_>>() + }) + .collect::<Vec<_>>(); + + // Compute a vector that, for each data dir, + // contains the list of partitions primarily stored on that drive + let mut dir_prim = vec![vec![]; data_dirs.len()]; + for (ipart, prim) in self.part_prim.iter().enumerate() { + if let Some(new) = old2new.get(*prim as usize).copied().flatten() { + dir_prim[new as usize].push(ipart); + } + } + + // Compute the target number of partitions per data directory + let mut cum_cap = 0; + let mut npart_per_dir = vec![0; data_dirs.len()]; + for (idir, dd) in data_dirs.iter().enumerate() { + if let DataDirState::Active { capacity } = dd.state { + let begin = (cum_cap * DRIVE_NPART as u64) / total_cap; + cum_cap += capacity; + let end = (cum_cap * DRIVE_NPART as u64) / total_cap; + npart_per_dir[idir] = (end - begin) as usize; + } + } + assert_eq!(cum_cap, total_cap); + assert_eq!(npart_per_dir.iter().sum::<usize>(), DRIVE_NPART); + + // For all directories that have too many primary partitions, + // move that partition to secondary + for (idir, (parts, tgt_npart)) in dir_prim.iter_mut().zip(npart_per_dir.iter()).enumerate() + { + while parts.len() > *tgt_npart { + let part = parts.pop().unwrap(); + if !part_sec[part].contains(&(idir as Idx)) { + part_sec[part].push(idir as Idx); + } + } + } + + // Calculate the vector of primary partition dir index + let mut part_prim = vec![None; DRIVE_NPART]; + for (idir, parts) in dir_prim.iter().enumerate() { + for part in parts.iter() { + assert!(part_prim[*part].is_none()); + part_prim[*part] = Some(idir as Idx) + } + } + + // Calculate a vector of unassigned partitions + let mut unassigned = part_prim + .iter() + .enumerate() + .filter(|(_, dir)| dir.is_none()) + .map(|(ipart, _)| ipart) + .collect::<Vec<_>>(); + + // For all directories that don't have enough primary partitions, + // add partitions from unassigned + for (idir, (parts, tgt_npart)) in dir_prim.iter_mut().zip(npart_per_dir.iter()).enumerate() + { + if parts.len() < *tgt_npart { + let required = *tgt_npart - parts.len(); + assert!(unassigned.len() >= required); + for _ in 0..required { + let new_part = unassigned.pop().unwrap(); + part_prim[new_part] = Some(idir as Idx); + part_sec[new_part].retain(|x| *x != idir as Idx); + } + } + } + + // Sanity checks + assert!(part_prim.iter().all(|x| x.is_some())); + assert!(unassigned.is_empty()); + + // Transform part_prim from vec of Option<Idx> to vec of Idx + let part_prim = part_prim + .into_iter() + .map(|x| x.unwrap()) + .collect::<Vec<_>>(); + assert!(part_prim.iter().all(|p| data_dirs + .get(*p as usize) + .and_then(|x| x.capacity()) + .unwrap_or(0) + > 0)); + + // If any of the newly added storage locations is non-empty, + // it might have been removed and added again and might contain data, + // so add it as a secondary storage location for all partitions + // to make sure existing files are not lost + for (i, dd) in data_dirs.iter().enumerate() { + if self.data_dirs.iter().any(|ed| ed.path == dd.path) { + continue; + } + if dir_not_empty(&dd.path)? { + for (sec, prim) in part_sec.iter_mut().zip(part_prim.iter()) { + if *prim != i as Idx && !sec.contains(&(i as Idx)) { + sec.push(i as Idx); + } + } + } + } + + // Apply newly generated config + *self = Self { + data_dirs, + part_prim, + part_sec, + }; + Ok(()) + } + + pub(crate) fn primary_block_dir(&self, hash: &Hash) -> PathBuf { + let ipart = self.partition_from(hash); + let idir = self.part_prim[ipart] as usize; + self.block_dir_from(hash, &self.data_dirs[idir].path) + } + + pub(crate) fn secondary_block_dirs<'a>( + &'a self, + hash: &'a Hash, + ) -> impl Iterator<Item = PathBuf> + 'a { + let ipart = self.partition_from(hash); + self.part_sec[ipart] + .iter() + .map(move |idir| self.block_dir_from(hash, &self.data_dirs[*idir as usize].path)) + } + + fn partition_from(&self, hash: &Hash) -> usize { + u16::from_be_bytes([ + hash.as_slice()[HASH_DRIVE_BYTES.0], + hash.as_slice()[HASH_DRIVE_BYTES.1], + ]) as usize % DRIVE_NPART + } + + fn block_dir_from(&self, hash: &Hash, dir: &PathBuf) -> PathBuf { + let mut path = dir.clone(); + path.push(hex::encode(&hash.as_slice()[0..1])); + path.push(hex::encode(&hash.as_slice()[1..2])); + path + } + + pub(crate) fn without_secondary_locations(&self) -> Self { + Self { + data_dirs: self.data_dirs.clone(), + part_prim: self.part_prim.clone(), + part_sec: self.part_sec.iter().map(|_| vec![]).collect::<Vec<_>>(), + } + } +} + +impl InitialFormat for DataLayout { + const VERSION_MARKER: &'static [u8] = b"G09bmdl"; +} + +impl DataDir { + pub fn capacity(&self) -> Option<u64> { + match self.state { + DataDirState::Active { capacity } => Some(capacity), + _ => None, + } + } +} + +fn make_data_dirs(dirs: &DataDirEnum) -> Result<Vec<DataDir>, Error> { + let mut data_dirs = vec![]; + match dirs { + DataDirEnum::Single(path) => data_dirs.push(DataDir { + path: path.clone(), + state: DataDirState::Active { + capacity: 1_000_000_000, // whatever, doesn't matter + }, + }), + DataDirEnum::Multiple(dirs) => { + let mut ok = false; + for dir in dirs.iter() { + let state = match &dir.capacity { + Some(cap) if dir.read_only == false => { + let capacity = cap.parse::<bytesize::ByteSize>() + .ok_or_message("invalid capacity value")?.as_u64(); + if capacity == 0 { + return Err(Error::Message(format!("data directory {} should have non-zero capacity", dir.path.to_string_lossy()))); + } + ok = true; + DataDirState::Active { + capacity, + } + } + None if dir.read_only == true => { + DataDirState::ReadOnly + } + _ => return Err(Error::Message(format!("data directories in data_dir should have a capacity value or be marked read_only, not the case for {}", dir.path.to_string_lossy()))), + }; + data_dirs.push(DataDir { + path: dir.path.clone(), + state, + }); + } + if !ok { + return Err(Error::Message( + "incorrect data_dir configuration, no primary writable directory specified" + .into(), + )); + } + } + } + Ok(data_dirs) +} + +fn dir_not_empty(path: &PathBuf) -> Result<bool, Error> { + for entry in std::fs::read_dir(&path)? { + let dir = entry?; + if dir.file_type()?.is_dir() + && dir + .file_name() + .into_string() + .ok() + .and_then(|hex| hex::decode(&hex).ok()) + .is_some() + { + return Ok(true); + } + } + Ok(false) +} diff --git a/src/block/lib.rs b/src/block/lib.rs index d2814f77..c9ff2845 100644 --- a/src/block/lib.rs +++ b/src/block/lib.rs @@ -6,5 +6,6 @@ pub mod repair; pub mod resync; mod block; +mod layout; mod metrics; mod rc; diff --git a/src/block/manager.rs b/src/block/manager.rs index 3ece9a8a..2d1b5c67 100644 --- a/src/block/manager.rs +++ b/src/block/manager.rs @@ -3,7 +3,7 @@ use std::pin::Pin; use std::sync::Arc; use std::time::Duration; -use arc_swap::ArcSwapOption; +use arc_swap::{ArcSwap, ArcSwapOption}; use async_trait::async_trait; use bytes::Bytes; use rand::prelude::*; @@ -25,10 +25,11 @@ use garage_rpc::rpc_helper::netapp::stream::{stream_asyncread, ByteStream}; use garage_db as db; use garage_util::background::{vars, BackgroundRunner}; +use garage_util::config::DataDirEnum; use garage_util::data::*; use garage_util::error::*; use garage_util::metrics::RecordDuration; -use garage_util::persister::PersisterShared; +use garage_util::persister::{Persister, PersisterShared}; use garage_util::time::msec_to_rfc3339; use garage_rpc::rpc_helper::OrderTag; @@ -38,6 +39,7 @@ use garage_rpc::*; use garage_table::replication::{TableReplication, TableShardedReplication}; use crate::block::*; +use crate::layout::*; use crate::metrics::*; use crate::rc::*; use crate::repair::*; @@ -77,12 +79,16 @@ impl Rpc for BlockRpc { pub struct BlockManager { /// Replication strategy, allowing to find on which node blocks should be located pub replication: TableShardedReplication, - /// Directory in which block are stored - pub data_dir: PathBuf, + /// Data layout + pub(crate) data_layout: ArcSwap<DataLayout>, + /// Data layout persister + pub(crate) data_layout_persister: Persister<DataLayout>, + + data_fsync: bool, compression_level: Option<i32>, - mutation_lock: [Mutex<BlockManagerLocked>; 256], + mutation_lock: Vec<Mutex<BlockManagerLocked>>, pub(crate) rc: BlockRc, pub resync: BlockResyncManager, @@ -105,6 +111,9 @@ pub struct BlockResyncErrorInfo { pub next_try: u64, } +// The number of different mutexes used to parallelize write access to data blocks +const MUTEX_COUNT: usize = 256; + // This custom struct contains functions that must only be ran // when the lock is held. We ensure that it is the case by storing // it INSIDE a Mutex. @@ -113,11 +122,29 @@ struct BlockManagerLocked(); impl BlockManager { pub fn new( db: &db::Db, - data_dir: PathBuf, + data_dir: DataDirEnum, + data_fsync: bool, compression_level: Option<i32>, replication: TableShardedReplication, system: Arc<System>, - ) -> Arc<Self> { + ) -> Result<Arc<Self>, Error> { + // Load or compute layout, i.e. assignment of data blocks to the different data directories + let data_layout_persister: Persister<DataLayout> = + Persister::new(&system.metadata_dir, "data_layout"); + let data_layout = match data_layout_persister.load() { + Ok(mut layout) => { + layout + .update(&data_dir) + .ok_or_message("invalid data_dir config")?; + layout + } + Err(_) => DataLayout::initialize(&data_dir).ok_or_message("invalid data_dir config")?, + }; + data_layout_persister + .save(&data_layout) + .expect("cannot save data_layout"); + + // Open metadata tables let rc = db .open_tree("block_local_rc") .expect("Unable to open block_local_rc tree"); @@ -140,9 +167,14 @@ impl BlockManager { let block_manager = Arc::new(Self { replication, - data_dir, + data_layout: ArcSwap::new(Arc::new(data_layout)), + data_layout_persister, + data_fsync, compression_level, - mutation_lock: [(); 256].map(|_| Mutex::new(BlockManagerLocked())), + mutation_lock: vec![(); MUTEX_COUNT] + .iter() + .map(|_| Mutex::new(BlockManagerLocked())) + .collect::<Vec<_>>(), rc, resync, system, @@ -154,7 +186,7 @@ impl BlockManager { block_manager.endpoint.set_handler(block_manager.clone()); block_manager.scrub_persister.set_with(|_| ()).unwrap(); - block_manager + Ok(block_manager) } pub fn spawn_workers(self: &Arc<Self>, bg: &BackgroundRunner) { @@ -201,44 +233,10 @@ impl BlockManager { hash: &Hash, order_tag: Option<OrderTag>, ) -> Result<(DataBlockHeader, ByteStream), Error> { - let who = self.replication.read_nodes(hash); - let who = self.system.rpc.request_order(&who); - - for node in who.iter() { - let node_id = NodeID::from(*node); - let rpc = self.endpoint.call_streaming( - &node_id, - BlockRpc::GetBlock(*hash, order_tag), - PRIO_NORMAL | PRIO_SECONDARY, - ); - tokio::select! { - res = rpc => { - let res = match res { - Ok(res) => res, - Err(e) => { - debug!("Node {:?} returned error: {}", node, e); - continue; - } - }; - let (header, stream) = match res.into_parts() { - (Ok(BlockRpc::PutBlock { hash: _, header }), Some(stream)) => (header, stream), - _ => { - debug!("Node {:?} returned a malformed response", node); - continue; - } - }; - return Ok((header, stream)); - } - _ = tokio::time::sleep(self.system.rpc.rpc_timeout()) => { - debug!("Node {:?} didn't return block in time, trying next.", node); - } - }; - } - - Err(Error::Message(format!( - "Unable to read block {:?}: no node returned a valid block", - hash - ))) + self.rpc_get_raw_block_internal(hash, order_tag, |header, stream| async move { + Ok((header, stream)) + }) + .await } /// Ask nodes that might have a (possibly compressed) block for it @@ -248,6 +246,24 @@ impl BlockManager { hash: &Hash, order_tag: Option<OrderTag>, ) -> Result<DataBlock, Error> { + self.rpc_get_raw_block_internal(hash, order_tag, |header, stream| async move { + read_stream_to_end(stream) + .await + .map(|data| DataBlock::from_parts(header, data)) + }) + .await + } + + async fn rpc_get_raw_block_internal<F, Fut, T>( + &self, + hash: &Hash, + order_tag: Option<OrderTag>, + f: F, + ) -> Result<T, Error> + where + F: Fn(DataBlockHeader, ByteStream) -> Fut, + Fut: futures::Future<Output = Result<T, Error>>, + { let who = self.replication.read_nodes(hash); let who = self.system.rpc.request_order(&who); @@ -263,34 +279,41 @@ impl BlockManager { let res = match res { Ok(res) => res, Err(e) => { - debug!("Node {:?} returned error: {}", node, e); + debug!("Get block {:?}: node {:?} could not be contacted: {}", hash, node, e); continue; } }; let (header, stream) = match res.into_parts() { (Ok(BlockRpc::PutBlock { hash: _, header }), Some(stream)) => (header, stream), - _ => { - debug!("Node {:?} returned a malformed response", node); + (Ok(_), _) => { + debug!("Get block {:?}: node {:?} returned a malformed response", hash, node); + continue; + } + (Err(e), _) => { + debug!("Get block {:?}: node {:?} returned error: {}", hash, node, e); continue; } }; - match read_stream_to_end(stream).await { - Ok(bytes) => return Ok(DataBlock::from_parts(header, bytes)), + match f(header, stream).await { + Ok(ret) => return Ok(ret), Err(e) => { - debug!("Error reading stream from node {:?}: {}", node, e); + debug!("Get block {:?}: error reading stream from node {:?}: {}", hash, node, e); } } } + // TODO: sleep less long (fail early), initiate a second request earlier + // if the first one doesn't succeed rapidly + // TODO: keep first request running when initiating a new one and take the + // one that finishes earlier _ = tokio::time::sleep(self.system.rpc.rpc_timeout()) => { - debug!("Node {:?} didn't return block in time, trying next.", node); + debug!("Get block {:?}: node {:?} didn't return block in time, trying next.", hash, node); } }; } - Err(Error::Message(format!( - "Unable to read block {:?}: no node returned a valid block", - hash - ))) + let msg = format!("Get block {:?}: no node returned a valid block", hash); + debug!("{}", msg); + Err(Error::Message(msg)) } // ---- Public interface ---- @@ -468,8 +491,6 @@ impl BlockManager { pub(crate) async fn write_block(&self, hash: &Hash, data: &DataBlock) -> Result<(), Error> { let tracer = opentelemetry::global::tracer("garage"); - let write_size = data.inner_buffer().len() as u64; - self.lock_mutate(hash) .await .write_block(hash, data, self) @@ -479,8 +500,6 @@ impl BlockManager { )) .await?; - self.metrics.bytes_written.add(write_size); - Ok(()) } @@ -507,36 +526,42 @@ impl BlockManager { /// Read block from disk, verifying it's integrity pub(crate) async fn read_block(&self, hash: &Hash) -> Result<DataBlock, Error> { - let data = self - .read_block_internal(hash) - .bound_record_duration(&self.metrics.block_read_duration) - .await?; - - self.metrics - .bytes_read - .add(data.inner_buffer().len() as u64); - - Ok(data) + let tracer = opentelemetry::global::tracer("garage"); + async { + match self.find_block(hash).await { + Some(p) => self.read_block_from(hash, &p).await, + None => { + // Not found but maybe we should have had it ?? + self.resync + .put_to_resync(hash, 2 * self.system.rpc.rpc_timeout())?; + return Err(Error::Message(format!( + "block {:?} not found on node", + hash + ))); + } + } + } + .bound_record_duration(&self.metrics.block_read_duration) + .with_context(Context::current_with_span( + tracer.start("BlockManager::read_block"), + )) + .await } - async fn read_block_internal(&self, hash: &Hash) -> Result<DataBlock, Error> { - let mut path = self.block_path(hash); - let compressed = match self.is_block_compressed(hash).await { - Ok(c) => c, - Err(e) => { - // Not found but maybe we should have had it ?? - self.resync - .put_to_resync(hash, 2 * self.system.rpc.rpc_timeout())?; - return Err(Into::into(e)); - } + pub(crate) async fn read_block_from( + &self, + hash: &Hash, + block_path: &DataBlockPath, + ) -> Result<DataBlock, Error> { + let (path, compressed) = match block_path { + DataBlockPath::Plain(p) => (p, false), + DataBlockPath::Compressed(p) => (p, true), }; - if compressed { - path.set_extension("zst"); - } - let mut f = fs::File::open(&path).await?; + let mut f = fs::File::open(&path).await?; let mut data = vec![]; f.read_to_end(&mut data).await?; + self.metrics.bytes_read.add(data.len() as u64); drop(f); let data = if compressed { @@ -548,29 +573,27 @@ impl BlockManager { if data.verify(*hash).is_err() { self.metrics.corruption_counter.add(1); + warn!( + "Block {:?} is corrupted. Renaming to .corrupted and resyncing.", + hash + ); self.lock_mutate(hash) .await - .move_block_to_corrupted(hash, self) + .move_block_to_corrupted(block_path) .await?; self.resync.put_to_resync(hash, Duration::from_millis(0))?; + return Err(Error::CorruptData(*hash)); } Ok(data) } - /// Check if this node has a block and whether it needs it - pub(crate) async fn check_block_status(&self, hash: &Hash) -> Result<BlockStatus, Error> { - self.lock_mutate(hash) - .await - .check_block_status(hash, self) - .await - } - /// Check if this node should have a block, but don't actually have it async fn need_block(&self, hash: &Hash) -> Result<bool, Error> { - let BlockStatus { exists, needed } = self.check_block_status(hash).await?; - Ok(needed.is_nonzero() && !exists) + let rc = self.rc.get_block_rc(hash)?; + let exists = self.find_block(hash).await.is_some(); + Ok(rc.is_nonzero() && !exists) } /// Delete block if it is not needed anymore @@ -581,59 +604,65 @@ impl BlockManager { .await } - /// Utility: gives the path of the directory in which a block should be found - fn block_dir(&self, hash: &Hash) -> PathBuf { - let mut path = self.data_dir.clone(); - path.push(hex::encode(&hash.as_slice()[0..1])); - path.push(hex::encode(&hash.as_slice()[1..2])); - path - } - - /// Utility: give the full path where a block should be found, minus extension if block is - /// compressed - fn block_path(&self, hash: &Hash) -> PathBuf { - let mut path = self.block_dir(hash); - path.push(hex::encode(hash.as_ref())); - path - } + /// Find the path where a block is currently stored + pub(crate) async fn find_block(&self, hash: &Hash) -> Option<DataBlockPath> { + let data_layout = self.data_layout.load_full(); + let dirs = Some(data_layout.primary_block_dir(hash)) + .into_iter() + .chain(data_layout.secondary_block_dirs(hash)); + let filename = hex::encode(hash.as_ref()); - /// Utility: check if block is stored compressed. Error if block is not stored - async fn is_block_compressed(&self, hash: &Hash) -> Result<bool, Error> { - let mut path = self.block_path(hash); + for dir in dirs { + let mut path = dir; + path.push(&filename); - // If compression is disabled on node - check for the raw block - // first and then a compressed one (as compression may have been - // previously enabled). - match self.compression_level { - None => { + if self.compression_level.is_none() { + // If compression is disabled on node - check for the raw block + // first and then a compressed one (as compression may have been + // previously enabled). if fs::metadata(&path).await.is_ok() { - return Ok(false); + return Some(DataBlockPath::Plain(path)); } - path.set_extension("zst"); - - fs::metadata(&path).await.map(|_| true).map_err(Into::into) - } - _ => { + if fs::metadata(&path).await.is_ok() { + return Some(DataBlockPath::Compressed(path)); + } + } else { path.set_extension("zst"); - if fs::metadata(&path).await.is_ok() { - return Ok(true); + return Some(DataBlockPath::Compressed(path)); } - path.set_extension(""); - - fs::metadata(&path).await.map(|_| false).map_err(Into::into) + if fs::metadata(&path).await.is_ok() { + return Some(DataBlockPath::Plain(path)); + } } } + + None + } + + /// Rewrite a block at the primary location for its path and delete the old path. + /// Returns the number of bytes read/written + pub(crate) async fn fix_block_location( + &self, + hash: &Hash, + wrong_path: DataBlockPath, + ) -> Result<usize, Error> { + self.lock_mutate(hash) + .await + .fix_block_location(hash, wrong_path, self) + .await } async fn lock_mutate(&self, hash: &Hash) -> MutexGuard<'_, BlockManagerLocked> { let tracer = opentelemetry::global::tracer("garage"); - self.mutation_lock[hash.as_slice()[0] as usize] + let ilock = u16::from_be_bytes([hash.as_slice()[0], hash.as_slice()[1]]) as usize + % self.mutation_lock.len(); + self.mutation_lock[ilock] .lock() .with_context(Context::current_with_span( - tracer.start("Acquire mutation_lock"), + tracer.start(format!("Acquire mutation_lock #{}", ilock)), )) .await } @@ -646,7 +675,7 @@ impl StreamingEndpointHandler<BlockRpc> for BlockManager { BlockRpc::PutBlock { hash, header } => Resp::new( self.handle_put_block(*hash, *header, message.take_stream()) .await - .map(|_| BlockRpc::Ok), + .map(|()| BlockRpc::Ok), ), BlockRpc::GetBlock(h, order_tag) => self.handle_get_block(h, *order_tag).await, BlockRpc::NeedBlockQuery(h) => { @@ -657,66 +686,78 @@ impl StreamingEndpointHandler<BlockRpc> for BlockManager { } } -pub(crate) struct BlockStatus { - pub(crate) exists: bool, - pub(crate) needed: RcEntry, -} - impl BlockManagerLocked { - async fn check_block_status( + async fn write_block( &self, hash: &Hash, + data: &DataBlock, mgr: &BlockManager, - ) -> Result<BlockStatus, Error> { - let exists = mgr.is_block_compressed(hash).await.is_ok(); - let needed = mgr.rc.get_block_rc(hash)?; - - Ok(BlockStatus { exists, needed }) + ) -> Result<(), Error> { + let existing_path = mgr.find_block(hash).await; + self.write_block_inner(hash, data, mgr, existing_path).await } - async fn write_block( + async fn write_block_inner( &self, hash: &Hash, data: &DataBlock, mgr: &BlockManager, + existing_path: Option<DataBlockPath>, ) -> Result<(), Error> { let compressed = data.is_compressed(); let data = data.inner_buffer(); - let mut path = mgr.block_dir(hash); - let directory = path.clone(); - path.push(hex::encode(hash)); + let directory = mgr.data_layout.load().primary_block_dir(hash); - fs::create_dir_all(&directory).await?; + let mut tgt_path = directory.clone(); + tgt_path.push(hex::encode(hash)); + if compressed { + tgt_path.set_extension("zst"); + } - let to_delete = match (mgr.is_block_compressed(hash).await, compressed) { - (Ok(true), _) => return Ok(()), - (Ok(false), false) => return Ok(()), - (Ok(false), true) => { - let path_to_delete = path.clone(); - path.set_extension("zst"); - Some(path_to_delete) - } - (Err(_), compressed) => { - if compressed { - path.set_extension("zst"); - } - None - } + let to_delete = match (existing_path, compressed) { + // If the block is stored in the wrong directory, + // write it again at the correct path and delete the old path + (Some(DataBlockPath::Plain(p)), false) if p != tgt_path => Some(p), + (Some(DataBlockPath::Compressed(p)), true) if p != tgt_path => Some(p), + + // If the block is already stored not compressed but we have a compressed + // copy, write the compressed copy and delete the uncompressed one + (Some(DataBlockPath::Plain(plain_path)), true) => Some(plain_path), + + // If the block is already stored compressed, + // keep the stored copy, we have nothing to do + (Some(DataBlockPath::Compressed(_)), _) => return Ok(()), + + // If the block is already stored not compressed, + // and we don't have a compressed copy either, + // keep the stored copy, we have nothing to do + (Some(DataBlockPath::Plain(_)), false) => return Ok(()), + + // If the block isn't stored already, just store what is given to us + (None, _) => None, }; + assert!(to_delete.as_ref() != Some(&tgt_path)); - let mut path_tmp = path.clone(); + let mut path_tmp = tgt_path.clone(); let tmp_extension = format!("tmp{}", hex::encode(thread_rng().gen::<[u8; 4]>())); path_tmp.set_extension(tmp_extension); + fs::create_dir_all(&directory).await?; + 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?; + mgr.metrics.bytes_written.add(data.len() as u64); + + if mgr.data_fsync { + f.sync_all().await?; + } + drop(f); - fs::rename(path_tmp, path).await?; + fs::rename(path_tmp, tgt_path).await?; delete_on_drop.cancel(); @@ -724,52 +765,67 @@ impl BlockManagerLocked { fs::remove_file(to_delete).await?; } - // We want to ensure that when this function returns, data is properly persisted - // to disk. The first step is the sync_all above that does an fsync on the data file. - // Now, we do an fsync on the containing directory, to ensure that the rename - // is persisted properly. See: - // http://thedjbway.b0llix.net/qmail/syncdir.html - let dir = fs::OpenOptions::new() - .read(true) - .mode(0) - .open(directory) - .await?; - dir.sync_all().await?; - drop(dir); + if mgr.data_fsync { + // We want to ensure that when this function returns, data is properly persisted + // to disk. The first step is the sync_all above that does an fsync on the data file. + // Now, we do an fsync on the containing directory, to ensure that the rename + // is persisted properly. See: + // http://thedjbway.b0llix.net/qmail/syncdir.html + let dir = fs::OpenOptions::new() + .read(true) + .mode(0) + .open(directory) + .await?; + dir.sync_all().await?; + drop(dir); + } Ok(()) } - async fn move_block_to_corrupted(&self, hash: &Hash, mgr: &BlockManager) -> Result<(), Error> { - warn!( - "Block {:?} is corrupted. Renaming to .corrupted and resyncing.", - hash - ); - let mut path = mgr.block_path(hash); - let mut path2 = path.clone(); - if mgr.is_block_compressed(hash).await? { - path.set_extension("zst"); - path2.set_extension("zst.corrupted"); - } else { - path2.set_extension("corrupted"); - } + async fn move_block_to_corrupted(&self, block_path: &DataBlockPath) -> Result<(), Error> { + let (path, path2) = match block_path { + DataBlockPath::Plain(p) => { + let mut p2 = p.clone(); + p2.set_extension("corrupted"); + (p, p2) + } + DataBlockPath::Compressed(p) => { + let mut p2 = p.clone(); + p2.set_extension("zst.corrupted"); + (p, p2) + } + }; + fs::rename(path, path2).await?; Ok(()) } async fn delete_if_unneeded(&self, hash: &Hash, mgr: &BlockManager) -> Result<(), Error> { - let BlockStatus { exists, needed } = self.check_block_status(hash, mgr).await?; - - if exists && needed.is_deletable() { - let mut path = mgr.block_path(hash); - if mgr.is_block_compressed(hash).await? { - path.set_extension("zst"); + let rc = mgr.rc.get_block_rc(hash)?; + if rc.is_deletable() { + while let Some(path) = mgr.find_block(hash).await { + let path = match path { + DataBlockPath::Plain(p) | DataBlockPath::Compressed(p) => p, + }; + fs::remove_file(path).await?; + mgr.metrics.delete_counter.add(1); } - fs::remove_file(path).await?; - mgr.metrics.delete_counter.add(1); } Ok(()) } + + async fn fix_block_location( + &self, + hash: &Hash, + wrong_path: DataBlockPath, + mgr: &BlockManager, + ) -> Result<usize, Error> { + let data = mgr.read_block_from(hash, &wrong_path).await?; + self.write_block_inner(hash, &data, mgr, Some(wrong_path)) + .await?; + Ok(data.inner_buffer().len()) + } } async fn read_stream_to_end(mut stream: ByteStream) -> Result<Bytes, Error> { diff --git a/src/block/rc.rs b/src/block/rc.rs index 94cb5eea..b6afb277 100644 --- a/src/block/rc.rs +++ b/src/block/rc.rs @@ -56,7 +56,7 @@ impl BlockRc { /// deletion time has passed pub(crate) fn clear_deleted_block_rc(&self, hash: &Hash) -> Result<(), Error> { let now = now_msec(); - self.rc.db().transaction(|mut tx| { + self.rc.db().transaction(|tx| { let rcval = RcEntry::parse_opt(tx.get(&self.rc, hash)?); match rcval { RcEntry::Deletable { at_time } if now > at_time => { @@ -64,7 +64,7 @@ impl BlockRc { } _ => (), }; - tx.commit(()) + Ok(()) })?; Ok(()) } diff --git a/src/block/repair.rs b/src/block/repair.rs index 71093d69..77ee0d14 100644 --- a/src/block/repair.rs +++ b/src/block/repair.rs @@ -17,6 +17,7 @@ use garage_util::persister::PersisterShared; use garage_util::time::*; use garage_util::tranquilizer::Tranquilizer; +use crate::block::*; use crate::manager::*; // Full scrub every 25 days with a random element of 10 days mixed in below @@ -136,7 +137,7 @@ impl Worker for RepairWorker { // Lists all blocks on disk and adds them to the resync queue. // This allows us to find blocks we are storing but don't actually need, // so that we can offload them if necessary and then delete them locally. - if let Some(hash) = bi.next().await? { + if let Some((_path, hash)) = bi.next().await? { self.manager .resync .put_to_resync(&hash, Duration::from_secs(0))?; @@ -175,7 +176,9 @@ mod v081 { } mod v082 { + use garage_util::data::Hash; use serde::{Deserialize, Serialize}; + use std::path::PathBuf; use super::v081; @@ -185,6 +188,27 @@ mod v082 { pub(crate) time_last_complete_scrub: u64, pub(crate) time_next_run_scrub: u64, pub(crate) corruptions_detected: u64, + #[serde(default)] + pub(crate) checkpoint: Option<BlockStoreIterator>, + } + + #[derive(Serialize, Deserialize, Clone)] + pub struct BlockStoreIterator { + pub todo: Vec<BsiTodo>, + } + + #[derive(Serialize, Deserialize, Clone)] + pub enum BsiTodo { + Directory { + path: PathBuf, + progress_min: u64, + progress_max: u64, + }, + File { + path: PathBuf, + hash: Hash, + progress: u64, + }, } impl garage_util::migrate::Migrate for ScrubWorkerPersisted { @@ -199,6 +223,7 @@ mod v082 { 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, + checkpoint: None, } } } @@ -235,14 +260,23 @@ impl Default for ScrubWorkerPersisted { time_next_run_scrub: randomize_next_scrub_run_time(now_msec()), tranquility: INITIAL_SCRUB_TRANQUILITY, corruptions_detected: 0, + checkpoint: None, } } } #[derive(Default)] enum ScrubWorkerState { - Running(BlockStoreIterator), - Paused(BlockStoreIterator, u64), // u64 = time when to resume scrub + Running { + iterator: BlockStoreIterator, + // time of the last checkpoint + t_cp: u64, + }, + Paused { + iterator: BlockStoreIterator, + // time at which the scrub should be resumed + t_resume: u64, + }, #[default] Finished, } @@ -261,10 +295,17 @@ impl ScrubWorker { rx_cmd: mpsc::Receiver<ScrubWorkerCommand>, persister: PersisterShared<ScrubWorkerPersisted>, ) -> Self { + let work = match persister.get_with(|x| x.checkpoint.clone()) { + None => ScrubWorkerState::Finished, + Some(iterator) => ScrubWorkerState::Running { + iterator, + t_cp: now_msec(), + }, + }; Self { manager, rx_cmd, - work: ScrubWorkerState::Finished, + work, tranquilizer: Tranquilizer::new(30), persister, } @@ -277,7 +318,16 @@ impl ScrubWorker { ScrubWorkerState::Finished => { info!("Scrub worker initializing, now performing datastore scrub"); let iterator = BlockStoreIterator::new(&self.manager); - ScrubWorkerState::Running(iterator) + if let Err(e) = self + .persister + .set_with(|x| x.checkpoint = Some(iterator.clone())) + { + error!("Could not save scrub checkpoint: {}", e); + } + ScrubWorkerState::Running { + iterator, + t_cp: now_msec(), + } } work => { error!("Cannot start scrub worker: already running!"); @@ -287,8 +337,18 @@ impl ScrubWorker { } ScrubWorkerCommand::Pause(dur) => { self.work = match std::mem::take(&mut self.work) { - ScrubWorkerState::Running(it) | ScrubWorkerState::Paused(it, _) => { - ScrubWorkerState::Paused(it, now_msec() + dur.as_millis() as u64) + ScrubWorkerState::Running { iterator, .. } + | ScrubWorkerState::Paused { iterator, .. } => { + if let Err(e) = self + .persister + .set_with(|x| x.checkpoint = Some(iterator.clone())) + { + error!("Could not save scrub checkpoint: {}", e); + } + ScrubWorkerState::Paused { + iterator, + t_resume: now_msec() + dur.as_millis() as u64, + } } work => { error!("Cannot pause scrub worker: not running!"); @@ -298,7 +358,10 @@ impl ScrubWorker { } ScrubWorkerCommand::Resume => { self.work = match std::mem::take(&mut self.work) { - ScrubWorkerState::Paused(it, _) => ScrubWorkerState::Running(it), + ScrubWorkerState::Paused { iterator, .. } => ScrubWorkerState::Running { + iterator, + t_cp: now_msec(), + }, work => { error!("Cannot resume scrub worker: not paused!"); work @@ -307,7 +370,10 @@ impl ScrubWorker { } ScrubWorkerCommand::Cancel => { self.work = match std::mem::take(&mut self.work) { - ScrubWorkerState::Running(_) | ScrubWorkerState::Paused(_, _) => { + ScrubWorkerState::Running { .. } | ScrubWorkerState::Paused { .. } => { + if let Err(e) = self.persister.set_with(|x| x.checkpoint = None) { + error!("Could not save scrub checkpoint: {}", e); + } ScrubWorkerState::Finished } work => { @@ -343,12 +409,15 @@ impl Worker for ScrubWorker { ..Default::default() }; match &self.work { - ScrubWorkerState::Running(bsi) => { - s.progress = Some(format!("{:.2}%", bsi.progress() * 100.)); + ScrubWorkerState::Running { iterator, .. } => { + s.progress = Some(format!("{:.2}%", iterator.progress() * 100.)); } - ScrubWorkerState::Paused(bsi, rt) => { - s.progress = Some(format!("{:.2}%", bsi.progress() * 100.)); - s.freeform = vec![format!("Scrub paused, resumes at {}", msec_to_rfc3339(*rt))]; + ScrubWorkerState::Paused { iterator, t_resume } => { + s.progress = Some(format!("{:.2}%", iterator.progress() * 100.)); + s.freeform = vec![format!( + "Scrub paused, resumes at {}", + msec_to_rfc3339(*t_resume) + )]; } ScrubWorkerState::Finished => { s.freeform = vec![ @@ -374,9 +443,11 @@ impl Worker for ScrubWorker { }; match &mut self.work { - ScrubWorkerState::Running(bsi) => { + ScrubWorkerState::Running { iterator, t_cp } => { self.tranquilizer.reset(); - if let Some(hash) = bsi.next().await? { + let now = now_msec(); + + if let Some((_path, hash)) = iterator.next().await? { match self.manager.read_block(&hash).await { Err(Error::CorruptData(_)) => { error!("Found corrupt data block during scrub: {:?}", hash); @@ -385,16 +456,23 @@ impl Worker for ScrubWorker { Err(e) => return Err(e), _ => (), }; + + if now - *t_cp > 60 * 1000 { + self.persister + .set_with(|p| p.checkpoint = Some(iterator.clone()))?; + *t_cp = now; + } + Ok(self .tranquilizer .tranquilize_worker(self.persister.get_with(|p| p.tranquility))) } else { - 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; + p.checkpoint = None; })?; self.work = ScrubWorkerState::Finished; self.tranquilizer.clear(); @@ -413,8 +491,8 @@ impl Worker for ScrubWorker { async fn wait_for_work(&mut self) -> WorkerState { let (wait_until, command) = match &self.work { - ScrubWorkerState::Running(_) => return WorkerState::Busy, - ScrubWorkerState::Paused(_, resume_time) => (*resume_time, ScrubWorkerCommand::Resume), + ScrubWorkerState::Running { .. } => return WorkerState::Busy, + ScrubWorkerState::Paused { t_resume, .. } => (*t_resume, ScrubWorkerCommand::Resume), ScrubWorkerState::Finished => ( self.persister.get_with(|p| p.time_next_run_scrub), ScrubWorkerCommand::Start, @@ -437,110 +515,250 @@ impl Worker for ScrubWorker { } match &self.work { - ScrubWorkerState::Running(_) => WorkerState::Busy, + ScrubWorkerState::Running { .. } => WorkerState::Busy, _ => WorkerState::Idle, } } } // ---- ---- ---- -// UTILITY FOR ENUMERATING THE BLOCK STORE +// THIRD KIND OF REPAIR: REBALANCING DATA BLOCKS +// between multiple storage locations. +// This is a one-shot repair operation that can be launched, +// checks everything, and then exits. // ---- ---- ---- -struct BlockStoreIterator { - path: Vec<ReadingDir>, +pub struct RebalanceWorker { + manager: Arc<BlockManager>, + block_iter: BlockStoreIterator, + t_started: u64, + t_finished: Option<u64>, + moved: usize, + moved_bytes: u64, } -enum ReadingDir { - Pending(PathBuf), - Read { - subpaths: Vec<fs::DirEntry>, - pos: usize, - }, +impl RebalanceWorker { + pub fn new(manager: Arc<BlockManager>) -> Self { + let block_iter = BlockStoreIterator::new(&manager); + Self { + manager, + block_iter, + t_started: now_msec(), + t_finished: None, + moved: 0, + moved_bytes: 0, + } + } +} + +#[async_trait] +impl Worker for RebalanceWorker { + fn name(&self) -> String { + "Block rebalance worker".into() + } + + fn status(&self) -> WorkerStatus { + let t_cur = self.t_finished.unwrap_or_else(|| now_msec()); + let rate = self.moved_bytes / std::cmp::max(1, (t_cur - self.t_started) / 1000); + let mut freeform = vec![ + format!("Blocks moved: {}", self.moved), + format!( + "Bytes moved: {} ({}/s)", + bytesize::ByteSize::b(self.moved_bytes), + bytesize::ByteSize::b(rate) + ), + format!("Started: {}", msec_to_rfc3339(self.t_started)), + ]; + if let Some(t_fin) = self.t_finished { + freeform.push(format!("Finished: {}", msec_to_rfc3339(t_fin))) + } + WorkerStatus { + progress: Some(format!("{:.2}%", self.block_iter.progress() * 100.)), + freeform, + ..Default::default() + } + } + + async fn work(&mut self, _must_exit: &mut watch::Receiver<bool>) -> Result<WorkerState, Error> { + if let Some((path, hash)) = self.block_iter.next().await? { + let prim_loc = self.manager.data_layout.load().primary_block_dir(&hash); + if path.ancestors().all(|x| x != prim_loc) { + let block_path = match path.extension() { + None => DataBlockPath::Plain(path.clone()), + Some(x) if x.to_str() == Some("zst") => DataBlockPath::Compressed(path.clone()), + _ => { + warn!("not rebalancing file: {}", path.to_string_lossy()); + return Ok(WorkerState::Busy); + } + }; + // block is not in its primary location, + // move it there (reading and re-writing does the trick) + debug!("rebalance: moving block {:?} => {:?}", block_path, prim_loc); + let block_len = self.manager.fix_block_location(&hash, block_path).await?; + self.moved += 1; + self.moved_bytes += block_len as u64; + } + Ok(WorkerState::Busy) + } else { + // all blocks are in their primary location: + // - the ones we moved now are + // - the ones written in the meantime always were, because we only + // write to primary locations + // so we can safely remove all secondary locations from the data layout + let new_layout = self + .manager + .data_layout + .load_full() + .without_secondary_locations(); + self.manager + .data_layout_persister + .save_async(&new_layout) + .await?; + self.manager.data_layout.store(Arc::new(new_layout)); + self.t_finished = Some(now_msec()); + Ok(WorkerState::Done) + } + } + + async fn wait_for_work(&mut self) -> WorkerState { + unreachable!() + } } +// ---- ---- ---- +// UTILITY FOR ENUMERATING THE BLOCK STORE +// ---- ---- ---- + +const PROGRESS_FP: u64 = 1_000_000_000; + impl BlockStoreIterator { fn new(manager: &BlockManager) -> Self { - let root_dir = manager.data_dir.clone(); - Self { - path: vec![ReadingDir::Pending(root_dir)], + let data_layout = manager.data_layout.load_full(); + + let mut dir_cap = vec![0; data_layout.data_dirs.len()]; + for prim in data_layout.part_prim.iter() { + dir_cap[*prim as usize] += 1; + } + for sec_vec in data_layout.part_sec.iter() { + for sec in sec_vec.iter() { + dir_cap[*sec as usize] += 1; + } } + let sum_cap = dir_cap.iter().sum::<usize>() as u64; + + let mut cum_cap = 0; + let mut todo = vec![]; + for (dir, cap) in data_layout.data_dirs.iter().zip(dir_cap.into_iter()) { + let progress_min = (cum_cap * PROGRESS_FP) / sum_cap; + let progress_max = ((cum_cap + cap as u64) * PROGRESS_FP) / sum_cap; + cum_cap += cap as u64; + + todo.push(BsiTodo::Directory { + path: dir.path.clone(), + progress_min, + progress_max, + }); + } + // entries are processed back-to-front (because of .pop()), + // so reverse entries to process them in increasing progress bounds + todo.reverse(); + + let ret = Self { todo }; + debug_assert!(ret.progress_invariant()); + + ret } /// Returns progress done, between 0 and 1 fn progress(&self) -> f32 { - if self.path.is_empty() { - 1.0 - } else { - let mut ret = 0.0; - let mut next_div = 1; - for p in self.path.iter() { - match p { - ReadingDir::Pending(_) => break, - ReadingDir::Read { subpaths, pos } => { - next_div *= subpaths.len(); - ret += ((*pos - 1) as f32) / (next_div as f32); - } - } - } - ret - } + self.todo + .last() + .map(|x| match x { + BsiTodo::Directory { progress_min, .. } => *progress_min, + BsiTodo::File { progress, .. } => *progress, + }) + .map(|x| x as f32 / PROGRESS_FP as f32) + .unwrap_or(1.0) } - async fn next(&mut self) -> Result<Option<Hash>, Error> { + async fn next(&mut self) -> Result<Option<(PathBuf, Hash)>, Error> { loop { - let last_path = match self.path.last_mut() { + match self.todo.pop() { None => return Ok(None), - Some(lp) => lp, - }; - - if let ReadingDir::Pending(path) = last_path { - let mut reader = fs::read_dir(&path).await?; - let mut subpaths = vec![]; - while let Some(ent) = reader.next_entry().await? { - subpaths.push(ent); - } - *last_path = ReadingDir::Read { subpaths, pos: 0 }; - } + Some(BsiTodo::Directory { + path, + progress_min, + progress_max, + }) => { + let istart = self.todo.len(); + + let mut reader = fs::read_dir(&path).await?; + while let Some(ent) = reader.next_entry().await? { + let name = if let Ok(n) = ent.file_name().into_string() { + n + } else { + continue; + }; + let ft = ent.file_type().await?; + if ft.is_dir() && hex::decode(&name).is_ok() { + self.todo.push(BsiTodo::Directory { + path: ent.path(), + progress_min: 0, + progress_max: 0, + }); + } else if ft.is_file() { + let filename = name.split_once('.').map(|(f, _)| f).unwrap_or(&name); + if filename.len() == 64 { + if let Ok(h) = hex::decode(filename) { + let mut hash = [0u8; 32]; + hash.copy_from_slice(&h); + self.todo.push(BsiTodo::File { + path: ent.path(), + hash: hash.into(), + progress: 0, + }); + } + } + } + } - let (subpaths, pos) = match *last_path { - ReadingDir::Read { - ref subpaths, - ref mut pos, - } => (subpaths, pos), - ReadingDir::Pending(_) => unreachable!(), - }; - - let data_dir_ent = match subpaths.get(*pos) { - None => { - self.path.pop(); - continue; - } - Some(ent) => { - *pos += 1; - ent + let count = self.todo.len() - istart; + for (i, ent) in self.todo[istart..].iter_mut().enumerate() { + let p1 = progress_min + + ((progress_max - progress_min) * i as u64) / count as u64; + let p2 = progress_min + + ((progress_max - progress_min) * (i + 1) as u64) / count as u64; + match ent { + BsiTodo::Directory { + progress_min, + progress_max, + .. + } => { + *progress_min = p1; + *progress_max = p2; + } + BsiTodo::File { progress, .. } => { + *progress = p1; + } + } + } + self.todo[istart..].reverse(); + debug_assert!(self.progress_invariant()); } - }; - - let name = data_dir_ent.file_name(); - let name = if let Ok(n) = name.into_string() { - n - } else { - continue; - }; - 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() { - let path = data_dir_ent.path(); - self.path.push(ReadingDir::Pending(path)); - } else if name.len() == 64 { - if let Ok(h) = hex::decode(name) { - let mut hash = [0u8; 32]; - hash.copy_from_slice(&h); - return Ok(Some(hash.into())); + Some(BsiTodo::File { path, hash, .. }) => { + return Ok(Some((path, hash))); } } } } + + // for debug_assert! + fn progress_invariant(&self) -> bool { + let iter = self.todo.iter().map(|x| match x { + BsiTodo::Directory { progress_min, .. } => progress_min, + BsiTodo::File { progress, .. } => progress, + }); + let iter_1 = iter.clone().skip(1); + iter.zip(iter_1).all(|(prev, next)| prev >= next) + } } diff --git a/src/block/resync.rs b/src/block/resync.rs index ea280ad4..9c1da4a7 100644 --- a/src/block/resync.rs +++ b/src/block/resync.rs @@ -41,7 +41,7 @@ pub(crate) const RESYNC_RETRY_DELAY: Duration = Duration::from_secs(60); pub(crate) const RESYNC_RETRY_DELAY_MAX_BACKOFF_POWER: u64 = 6; // No more than 4 resync workers can be running in the system -pub(crate) const MAX_RESYNC_WORKERS: usize = 4; +pub(crate) const MAX_RESYNC_WORKERS: usize = 8; // Resync tranquility is initially set to 2, but can be changed in the CLI // and the updated version is persisted over Garage restarts const INITIAL_RESYNC_TRANQUILITY: u32 = 2; @@ -359,20 +359,23 @@ impl BlockResyncManager { } async fn resync_block(&self, manager: &BlockManager, hash: &Hash) -> Result<(), Error> { - let BlockStatus { exists, needed } = manager.check_block_status(hash).await?; + let existing_path = manager.find_block(hash).await; + let exists = existing_path.is_some(); + let rc = manager.rc.get_block_rc(hash)?; - if exists != needed.is_needed() || exists != needed.is_nonzero() { + if exists != rc.is_needed() || exists != rc.is_nonzero() { debug!( "Resync block {:?}: exists {}, nonzero rc {}, deletable {}", hash, exists, - needed.is_nonzero(), - needed.is_deletable(), + rc.is_nonzero(), + rc.is_deletable(), ); } - if exists && needed.is_deletable() { + if exists && rc.is_deletable() { info!("Resync block {:?}: offloading and deleting", hash); + let existing_path = existing_path.unwrap(); let mut who = manager.replication.write_nodes(hash); if who.len() < manager.replication.write_quorum() { @@ -419,7 +422,7 @@ impl BlockResyncManager { .add(1, &[KeyValue::new("to", format!("{:?}", node))]); } - let block = manager.read_block(hash).await?; + let block = manager.read_block_from(hash, &existing_path).await?; let (header, bytes) = block.into_parts(); let put_block_message = Req::new(BlockRpc::PutBlock { hash: *hash, @@ -451,7 +454,7 @@ impl BlockResyncManager { manager.rc.clear_deleted_block_rc(hash)?; } - if needed.is_nonzero() && !exists { + if rc.is_nonzero() && !exists { info!( "Resync block {:?}: fetching absent but needed block (refcount > 0)", hash diff --git a/src/db/Cargo.toml b/src/db/Cargo.toml index 67a4fd5e..67af4a7c 100644 --- a/src/db/Cargo.toml +++ b/src/db/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_db" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>"] edition = "2018" license = "AGPL-3.0" @@ -11,29 +11,24 @@ readme = "../../README.md" [lib] path = "lib.rs" -[[bin]] -name = "convert" -path = "bin/convert.rs" -required-features = ["cli"] - [dependencies] err-derive = "0.3" hexdump = "0.1" tracing = "0.1" heed = { version = "0.11", default-features = false, features = ["lmdb"], optional = true } -rusqlite = { version = "0.28", optional = true } +rusqlite = { version = "0.29", optional = true } sled = { version = "0.34", optional = true } # cli deps clap = { version = "4.1", optional = true, features = ["derive", "env"] } -pretty_env_logger = { version = "0.4", optional = true } +pretty_env_logger = { version = "0.5", optional = true } [dev-dependencies] mktemp = "0.5" [features] -default = [ "sled" ] +default = [ "sled", "lmdb", "sqlite" ] bundled-libs = [ "rusqlite?/bundled" ] cli = ["clap", "pretty_env_logger"] lmdb = [ "heed" ] diff --git a/src/db/bin/convert.rs b/src/db/bin/convert.rs deleted file mode 100644 index bbde2048..00000000 --- a/src/db/bin/convert.rs +++ /dev/null @@ -1,69 +0,0 @@ -use std::path::PathBuf; - -use garage_db::*; - -use clap::Parser; - -/// K2V command line interface -#[derive(Parser, Debug)] -#[clap(author, version, about, long_about = None)] -struct Args { - /// Input DB path - #[clap(short = 'i')] - input_path: PathBuf, - /// Input DB engine - #[clap(short = 'a')] - input_engine: String, - - /// Output DB path - #[clap(short = 'o')] - output_path: PathBuf, - /// Output DB engine - #[clap(short = 'b')] - output_engine: String, -} - -fn main() { - let args = Args::parse(); - pretty_env_logger::init(); - - match do_conversion(args) { - Ok(()) => println!("Success!"), - Err(e) => eprintln!("Error: {}", e), - } -} - -fn do_conversion(args: Args) -> Result<()> { - let input = open_db(args.input_path, args.input_engine)?; - let output = open_db(args.output_path, args.output_engine)?; - output.import(&input)?; - Ok(()) -} - -fn open_db(path: PathBuf, engine: String) -> Result<Db> { - match engine.as_str() { - "sled" => { - let db = sled_adapter::sled::Config::default().path(&path).open()?; - Ok(sled_adapter::SledDb::init(db)) - } - "sqlite" | "sqlite3" | "rusqlite" => { - let db = sqlite_adapter::rusqlite::Connection::open(&path)?; - Ok(sqlite_adapter::SqliteDb::init(db)) - } - "lmdb" | "heed" => { - std::fs::create_dir_all(&path).map_err(|e| { - Error(format!("Unable to create LMDB data directory: {}", e).into()) - })?; - - let map_size = lmdb_adapter::recommended_map_size(); - - let db = lmdb_adapter::heed::EnvOpenOptions::new() - .max_dbs(100) - .map_size(map_size) - .open(&path) - .unwrap(); - Ok(lmdb_adapter::LmdbDb::init(db)) - } - e => Err(Error(format!("Invalid DB engine: {}", e).into())), - } -} diff --git a/src/db/counted_tree_hack.rs b/src/db/counted_tree_hack.rs index bbe943a2..a4ce12e0 100644 --- a/src/db/counted_tree_hack.rs +++ b/src/db/counted_tree_hack.rs @@ -85,7 +85,7 @@ impl CountedTree { let old_some = expected_old.is_some(); let new_some = new.is_some(); - let tx_res = self.0.tree.db().transaction(|mut tx| { + let tx_res = self.0.tree.db().transaction(|tx| { let old_val = tx.get(&self.0.tree, &key)?; let is_same = match (&old_val, &expected_old) { (None, None) => true, @@ -101,9 +101,9 @@ impl CountedTree { tx.remove(&self.0.tree, &key)?; } } - tx.commit(()) + Ok(()) } else { - tx.abort(()) + Err(TxError::Abort(())) } }); diff --git a/src/db/lib.rs b/src/db/lib.rs index 11cae4e3..fe44b01e 100644 --- a/src/db/lib.rs +++ b/src/db/lib.rs @@ -2,9 +2,6 @@ #[cfg(feature = "sqlite")] extern crate tracing; -#[cfg(not(any(feature = "lmdb", feature = "sled", feature = "sqlite")))] -compile_error!("Must activate the Cargo feature for at least one DB engine: lmdb, sled or sqlite."); - #[cfg(feature = "lmdb")] pub mod lmdb_adapter; #[cfg(feature = "sled")] @@ -25,10 +22,15 @@ use std::sync::Arc; use err_derive::Error; +pub(crate) type OnCommit = Vec<Box<dyn FnOnce()>>; + #[derive(Clone)] pub struct Db(pub(crate) Arc<dyn IDb>); -pub struct Transaction<'a>(&'a mut dyn ITx); +pub struct Transaction<'a> { + tx: &'a mut dyn ITx, + on_commit: OnCommit, +} #[derive(Clone)] pub struct Tree(Arc<dyn IDb>, usize); @@ -88,7 +90,7 @@ impl Db { pub fn transaction<R, E, F>(&self, fun: F) -> TxResult<R, E> where - F: Fn(Transaction<'_>) -> TxResult<R, E>, + F: Fn(&mut Transaction<'_>) -> TxResult<R, E>, { let f = TxFn { function: fun, @@ -101,14 +103,17 @@ impl Db { .expect("Transaction did not store result"); match tx_res { - Ok(()) => { - assert!(matches!(ret, Ok(_))); - ret - } - Err(TxError::Abort(())) => { - assert!(matches!(ret, Err(TxError::Abort(_)))); - ret - } + Ok(on_commit) => match ret { + Ok(value) => { + on_commit.into_iter().for_each(|f| f()); + Ok(value) + } + _ => unreachable!(), + }, + Err(TxError::Abort(())) => match ret { + Err(TxError::Abort(e)) => Err(TxError::Abort(e)), + _ => unreachable!(), + }, Err(TxError::Db(e2)) => match ret { // Ok was stored -> the error occured when finalizing // transaction @@ -142,7 +147,7 @@ impl Db { let ex_tree = other.open_tree(&name)?; - let tx_res = self.transaction(|mut tx| { + let tx_res = self.transaction(|tx| { let mut i = 0; for item in ex_tree.iter().map_err(TxError::Abort)? { let (k, v) = item.map_err(TxError::Abort)?; @@ -152,7 +157,7 @@ impl Db { println!("{}: imported {}", name, i); } } - tx.commit(i) + Ok(i) }); let total = match tx_res { Err(TxError::Db(e)) => return Err(e), @@ -252,11 +257,11 @@ impl Tree { impl<'a> Transaction<'a> { #[inline] pub fn get<T: AsRef<[u8]>>(&self, tree: &Tree, key: T) -> TxOpResult<Option<Value>> { - self.0.get(tree.1, key.as_ref()) + self.tx.get(tree.1, key.as_ref()) } #[inline] pub fn len(&self, tree: &Tree) -> TxOpResult<usize> { - self.0.len(tree.1) + self.tx.len(tree.1) } /// Returns the old value if there was one @@ -267,21 +272,21 @@ impl<'a> Transaction<'a> { key: T, value: U, ) -> TxOpResult<Option<Value>> { - self.0.insert(tree.1, key.as_ref(), value.as_ref()) + self.tx.insert(tree.1, key.as_ref(), value.as_ref()) } /// Returns the old value if there was one #[inline] pub fn remove<T: AsRef<[u8]>>(&mut self, tree: &Tree, key: T) -> TxOpResult<Option<Value>> { - self.0.remove(tree.1, key.as_ref()) + self.tx.remove(tree.1, key.as_ref()) } #[inline] pub fn iter(&self, tree: &Tree) -> TxOpResult<TxValueIter<'_>> { - self.0.iter(tree.1) + self.tx.iter(tree.1) } #[inline] pub fn iter_rev(&self, tree: &Tree) -> TxOpResult<TxValueIter<'_>> { - self.0.iter_rev(tree.1) + self.tx.iter_rev(tree.1) } #[inline] @@ -292,7 +297,7 @@ impl<'a> Transaction<'a> { { let sb = range.start_bound(); let eb = range.end_bound(); - self.0.range(tree.1, get_bound(sb), get_bound(eb)) + self.tx.range(tree.1, get_bound(sb), get_bound(eb)) } #[inline] pub fn range_rev<K, R>(&self, tree: &Tree, range: R) -> TxOpResult<TxValueIter<'_>> @@ -302,19 +307,12 @@ impl<'a> Transaction<'a> { { let sb = range.start_bound(); let eb = range.end_bound(); - self.0.range_rev(tree.1, get_bound(sb), get_bound(eb)) + self.tx.range_rev(tree.1, get_bound(sb), get_bound(eb)) } - // ---- - #[inline] - pub fn abort<R, E>(self, e: E) -> TxResult<R, E> { - Err(TxError::Abort(e)) - } - - #[inline] - pub fn commit<R, E>(self, r: R) -> TxResult<R, E> { - Ok(r) + pub fn on_commit<F: FnOnce() + 'static>(&mut self, f: F) { + self.on_commit.push(Box::new(f)); } } @@ -351,7 +349,7 @@ pub(crate) trait IDb: Send + Sync { high: Bound<&'r [u8]>, ) -> Result<ValueIter<'_>>; - fn transaction(&self, f: &dyn ITxFn) -> TxResult<(), ()>; + fn transaction(&self, f: &dyn ITxFn) -> TxResult<OnCommit, ()>; } pub(crate) trait ITx { @@ -383,14 +381,14 @@ pub(crate) trait ITxFn { } pub(crate) enum TxFnResult { - Ok, + Ok(OnCommit), Abort, DbErr, } struct TxFn<F, R, E> where - F: Fn(Transaction<'_>) -> TxResult<R, E>, + F: Fn(&mut Transaction<'_>) -> TxResult<R, E>, { function: F, result: Cell<Option<TxResult<R, E>>>, @@ -398,12 +396,16 @@ where impl<F, R, E> ITxFn for TxFn<F, R, E> where - F: Fn(Transaction<'_>) -> TxResult<R, E>, + F: Fn(&mut Transaction<'_>) -> TxResult<R, E>, { fn try_on(&self, tx: &mut dyn ITx) -> TxFnResult { - let res = (self.function)(Transaction(tx)); + let mut tx = Transaction { + tx, + on_commit: vec![], + }; + let res = (self.function)(&mut tx); let res2 = match &res { - Ok(_) => TxFnResult::Ok, + Ok(_) => TxFnResult::Ok(tx.on_commit), Err(TxError::Abort(_)) => TxFnResult::Abort, Err(TxError::Db(_)) => TxFnResult::DbErr, }; diff --git a/src/db/lmdb_adapter.rs b/src/db/lmdb_adapter.rs index ecbc3b81..59fa132d 100644 --- a/src/db/lmdb_adapter.rs +++ b/src/db/lmdb_adapter.rs @@ -9,8 +9,8 @@ use heed::types::ByteSlice; use heed::{BytesDecode, Env, RoTxn, RwTxn, UntypedDatabase as Database}; use crate::{ - Db, Error, IDb, ITx, ITxFn, Result, TxError, TxFnResult, TxOpError, TxOpResult, TxResult, - TxValueIter, Value, ValueIter, + Db, Error, IDb, ITx, ITxFn, OnCommit, Result, TxError, TxFnResult, TxOpError, TxOpResult, + TxResult, TxValueIter, Value, ValueIter, }; pub use heed; @@ -186,7 +186,7 @@ impl IDb for LmdbDb { // ---- - fn transaction(&self, f: &dyn ITxFn) -> TxResult<(), ()> { + fn transaction(&self, f: &dyn ITxFn) -> TxResult<OnCommit, ()> { let trees = self.trees.read().unwrap(); let mut tx = LmdbTx { trees: &trees.0[..], @@ -199,9 +199,9 @@ impl IDb for LmdbDb { let res = f.try_on(&mut tx); match res { - TxFnResult::Ok => { + TxFnResult::Ok(on_commit) => { tx.tx.commit().map_err(Error::from).map_err(TxError::Db)?; - Ok(()) + Ok(on_commit) } TxFnResult::Abort => { tx.tx.abort().map_err(Error::from).map_err(TxError::Db)?; diff --git a/src/db/sled_adapter.rs b/src/db/sled_adapter.rs index cf61867d..84f2001b 100644 --- a/src/db/sled_adapter.rs +++ b/src/db/sled_adapter.rs @@ -10,8 +10,8 @@ use sled::transaction::{ }; use crate::{ - Db, Error, IDb, ITx, ITxFn, Result, TxError, TxFnResult, TxOpError, TxOpResult, TxResult, - TxValueIter, Value, ValueIter, + Db, Error, IDb, ITx, ITxFn, OnCommit, Result, TxError, TxFnResult, TxOpError, TxOpResult, + TxResult, TxValueIter, Value, ValueIter, }; pub use sled; @@ -38,7 +38,15 @@ pub struct SledDb { } impl SledDb { + #[deprecated( + since = "0.9.0", + note = "The Sled database is now deprecated and will be removed in Garage v1.0. Please migrate to LMDB or Sqlite as soon as possible." + )] pub fn init(db: sled::Db) -> Db { + tracing::warn!("-------------------- IMPORTANT WARNING !!! ----------------------"); + tracing::warn!("The Sled database is now deprecated and will be removed in Garage v1.0."); + tracing::warn!("Please migrate to LMDB or Sqlite as soon as possible."); + tracing::warn!("-----------------------------------------------------------------------"); let s = Self { db, trees: RwLock::new((Vec::new(), HashMap::new())), @@ -158,7 +166,7 @@ impl IDb for SledDb { // ---- - fn transaction(&self, f: &dyn ITxFn) -> TxResult<(), ()> { + fn transaction(&self, f: &dyn ITxFn) -> TxResult<OnCommit, ()> { let trees = self.trees.read().unwrap(); let res = trees.0.transaction(|txtrees| { let mut tx = SledTx { @@ -166,9 +174,9 @@ impl IDb for SledDb { err: Cell::new(None), }; match f.try_on(&mut tx) { - TxFnResult::Ok => { + TxFnResult::Ok(on_commit) => { assert!(tx.err.into_inner().is_none()); - Ok(()) + Ok(on_commit) } TxFnResult::Abort => { assert!(tx.err.into_inner().is_none()); @@ -181,7 +189,7 @@ impl IDb for SledDb { } }); match res { - Ok(()) => Ok(()), + Ok(on_commit) => Ok(on_commit), Err(TransactionError::Abort(())) => Err(TxError::Abort(())), Err(TransactionError::Storage(s)) => Err(TxError::Db(s.into())), } diff --git a/src/db/sqlite_adapter.rs b/src/db/sqlite_adapter.rs index 63b4506e..9f967c66 100644 --- a/src/db/sqlite_adapter.rs +++ b/src/db/sqlite_adapter.rs @@ -9,8 +9,8 @@ use std::sync::{Arc, Mutex, MutexGuard}; use rusqlite::{params, Connection, Rows, Statement, Transaction}; use crate::{ - Db, Error, IDb, ITx, ITxFn, Result, TxError, TxFnResult, TxOpError, TxOpResult, TxResult, - TxValueIter, Value, ValueIter, + Db, Error, IDb, ITx, ITxFn, OnCommit, Result, TxError, TxFnResult, TxOpError, TxOpResult, + TxResult, TxValueIter, Value, ValueIter, }; pub use rusqlite; @@ -261,7 +261,7 @@ impl IDb for SqliteDb { // ---- - fn transaction(&self, f: &dyn ITxFn) -> TxResult<(), ()> { + fn transaction(&self, f: &dyn ITxFn) -> TxResult<OnCommit, ()> { trace!("transaction: lock db"); let mut this = self.0.lock().unwrap(); trace!("transaction: lock acquired"); @@ -277,9 +277,9 @@ impl IDb for SqliteDb { trees: &this_mut_ref.trees, }; let res = match f.try_on(&mut tx) { - TxFnResult::Ok => { + TxFnResult::Ok(on_commit) => { tx.tx.commit().map_err(Error::from).map_err(TxError::Db)?; - Ok(()) + Ok(on_commit) } TxFnResult::Abort => { tx.tx.rollback().map_err(Error::from).map_err(TxError::Db)?; diff --git a/src/db/test.rs b/src/db/test.rs index 40e6c41e..cd99eafa 100644 --- a/src/db/test.rs +++ b/src/db/test.rs @@ -13,26 +13,26 @@ fn test_suite(db: Db) { assert!(tree.insert(ka, va).unwrap().is_none()); assert_eq!(tree.get(ka).unwrap().unwrap(), va); - let res = db.transaction::<_, (), _>(|mut tx| { + let res = db.transaction::<_, (), _>(|tx| { assert_eq!(tx.get(&tree, ka).unwrap().unwrap(), va); assert_eq!(tx.insert(&tree, ka, vb).unwrap().unwrap(), va); assert_eq!(tx.get(&tree, ka).unwrap().unwrap(), vb); - tx.commit(12) + Ok(12) }); assert!(matches!(res, Ok(12))); assert_eq!(tree.get(ka).unwrap().unwrap(), vb); - let res = db.transaction::<(), _, _>(|mut tx| { + let res = db.transaction::<(), _, _>(|tx| { assert_eq!(tx.get(&tree, ka).unwrap().unwrap(), vb); assert_eq!(tx.insert(&tree, ka, vc).unwrap().unwrap(), vb); assert_eq!(tx.get(&tree, ka).unwrap().unwrap(), vc); - tx.abort(42) + Err(TxError::Abort(42)) }); assert!(matches!(res, Err(TxError::Abort(42)))); assert_eq!(tree.get(ka).unwrap().unwrap(), vb); diff --git a/src/garage/Cargo.toml b/src/garage/Cargo.toml index a41faaad..7c3a79cb 100644 --- a/src/garage/Cargo.toml +++ b/src/garage/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>"] edition = "2018" license = "AGPL-3.0" @@ -33,7 +33,7 @@ garage_web.workspace = true backtrace = "0.3" bytes = "1.0" -bytesize = "1.1" +bytesize = "1.2" timeago = { version = "0.4", default-features = false } parse_duration = "2.1" hex = "0.4" @@ -53,7 +53,7 @@ futures = "0.3" futures-util = "0.3" tokio = { version = "1.0", default-features = false, features = ["rt", "rt-multi-thread", "io-util", "net", "time", "macros", "sync", "signal", "fs"] } -netapp = "0.5" +netapp = "0.10" opentelemetry = { version = "0.17", features = [ "rt-tokio" ] } opentelemetry-prometheus = { version = "0.10", optional = true } @@ -78,7 +78,7 @@ k2v-client.workspace = true [features] -default = [ "bundled-libs", "metrics", "sled", "k2v" ] +default = [ "bundled-libs", "metrics", "sled", "lmdb", "sqlite", "k2v" ] k2v = [ "garage_util/k2v", "garage_api/k2v" ] diff --git a/src/garage/admin/block.rs b/src/garage/admin/block.rs index e9e3ff96..c4a45738 100644 --- a/src/garage/admin/block.rs +++ b/src/garage/admin/block.rs @@ -34,6 +34,7 @@ impl AdminRpcHandler { .get_range(&hash, None, None, 10000, Default::default()) .await?; let mut versions = vec![]; + let mut uploads = vec![]; for br in block_refs { if let Some(v) = self .garage @@ -41,6 +42,11 @@ impl AdminRpcHandler { .get(&br.version, &EmptyKey) .await? { + if let VersionBacklink::MultipartUpload { upload_id } = &v.backlink { + if let Some(u) = self.garage.mpu_table.get(upload_id, &EmptyKey).await? { + uploads.push(u); + } + } versions.push(Ok(v)); } else { versions.push(Err(br.version)); @@ -50,6 +56,7 @@ impl AdminRpcHandler { hash, refcount, versions, + uploads, }) } @@ -93,6 +100,7 @@ impl AdminRpcHandler { } let mut obj_dels = 0; + let mut mpu_dels = 0; let mut ver_dels = 0; for hash in blocks { @@ -105,56 +113,80 @@ impl AdminRpcHandler { .await?; for br in block_refs { - let version = match self + if let Some(version) = self .garage .version_table .get(&br.version, &EmptyKey) .await? { - Some(v) => v, - None => continue, - }; + self.handle_block_purge_version_backlink( + &version, + &mut obj_dels, + &mut mpu_dels, + ) + .await?; - if let Some(object) = self - .garage - .object_table - .get(&version.bucket_id, &version.key) - .await? - { - let ov = object.versions().iter().rev().find(|v| v.is_complete()); - if let Some(ov) = ov { - if ov.uuid == br.version { - let del_uuid = gen_uuid(); - let deleted_object = Object::new( - version.bucket_id, - version.key.clone(), - vec![ObjectVersion { - uuid: del_uuid, - timestamp: ov.timestamp + 1, - state: ObjectVersionState::Complete( - ObjectVersionData::DeleteMarker, - ), - }], - ); - self.garage.object_table.insert(&deleted_object).await?; - obj_dels += 1; - } + if !version.deleted.get() { + let deleted_version = Version::new(version.uuid, version.backlink, true); + self.garage.version_table.insert(&deleted_version).await?; + ver_dels += 1; } } - - if !version.deleted.get() { - let deleted_version = - Version::new(version.uuid, version.bucket_id, version.key.clone(), true); - self.garage.version_table.insert(&deleted_version).await?; - ver_dels += 1; - } } } + Ok(AdminRpc::Ok(format!( - "{} blocks were purged: {} object deletion markers added, {} versions marked deleted", + "Purged {} blocks, {} versions, {} objects, {} multipart uploads", blocks.len(), + ver_dels, obj_dels, - ver_dels + mpu_dels, ))) } + + async fn handle_block_purge_version_backlink( + &self, + version: &Version, + obj_dels: &mut usize, + mpu_dels: &mut usize, + ) -> Result<(), Error> { + let (bucket_id, key, ov_id) = match &version.backlink { + VersionBacklink::Object { bucket_id, key } => (*bucket_id, key.clone(), version.uuid), + VersionBacklink::MultipartUpload { upload_id } => { + if let Some(mut mpu) = self.garage.mpu_table.get(upload_id, &EmptyKey).await? { + if !mpu.deleted.get() { + mpu.parts.clear(); + mpu.deleted.set(); + self.garage.mpu_table.insert(&mpu).await?; + *mpu_dels += 1; + } + (mpu.bucket_id, mpu.key.clone(), *upload_id) + } else { + return Ok(()); + } + } + }; + + if let Some(object) = self.garage.object_table.get(&bucket_id, &key).await? { + let ov = object.versions().iter().rev().find(|v| v.is_complete()); + if let Some(ov) = ov { + if ov.uuid == ov_id { + let del_uuid = gen_uuid(); + let deleted_object = Object::new( + bucket_id, + key, + vec![ObjectVersion { + uuid: del_uuid, + timestamp: ov.timestamp + 1, + state: ObjectVersionState::Complete(ObjectVersionData::DeleteMarker), + }], + ); + self.garage.object_table.insert(&deleted_object).await?; + *obj_dels += 1; + } + } + } + + Ok(()) + } } diff --git a/src/garage/admin/bucket.rs b/src/garage/admin/bucket.rs index 11bb8730..0781cb8b 100644 --- a/src/garage/admin/bucket.rs +++ b/src/garage/admin/bucket.rs @@ -73,6 +73,15 @@ impl AdminRpcHandler { .map(|x| x.filtered_values(&self.garage.system.ring.borrow())) .unwrap_or_default(); + let mpu_counters = self + .garage + .mpu_counter_table + .table + .get(&bucket_id, &EmptyKey) + .await? + .map(|x| x.filtered_values(&self.garage.system.ring.borrow())) + .unwrap_or_default(); + let mut relevant_keys = HashMap::new(); for (k, _) in bucket .state @@ -112,6 +121,7 @@ impl AdminRpcHandler { bucket, relevant_keys, counters, + mpu_counters, }) } diff --git a/src/garage/admin/key.rs b/src/garage/admin/key.rs index cab13bcf..1c92670c 100644 --- a/src/garage/admin/key.rs +++ b/src/garage/admin/key.rs @@ -2,7 +2,7 @@ use std::collections::HashMap; use garage_table::*; -use garage_model::helper::error::Error; +use garage_model::helper::error::*; use garage_model::key_table::*; use crate::cli::*; @@ -14,7 +14,7 @@ impl AdminRpcHandler { match cmd { KeyOperation::List => self.handle_list_keys().await, KeyOperation::Info(query) => self.handle_key_info(query).await, - KeyOperation::New(query) => self.handle_create_key(query).await, + KeyOperation::Create(query) => self.handle_create_key(query).await, KeyOperation::Rename(query) => self.handle_rename_key(query).await, KeyOperation::Delete(query) => self.handle_delete_key(query).await, KeyOperation::Allow(query) => self.handle_allow_key(query).await, @@ -41,12 +41,17 @@ impl AdminRpcHandler { Ok(AdminRpc::KeyList(key_ids)) } - async fn handle_key_info(&self, query: &KeyOpt) -> Result<AdminRpc, Error> { - let key = self + async fn handle_key_info(&self, query: &KeyInfoOpt) -> Result<AdminRpc, Error> { + let mut key = self .garage .key_helper() .get_existing_matching_key(&query.key_pattern) .await?; + + if !query.show_secret { + key.state.as_option_mut().unwrap().secret_key = "(redacted)".into(); + } + self.key_info_result(key).await } @@ -118,11 +123,17 @@ impl AdminRpcHandler { } async fn handle_import_key(&self, query: &KeyImportOpt) -> Result<AdminRpc, Error> { + if !query.yes { + return Err(Error::BadRequest("This command is intended to re-import keys that were previously generated by Garage. If you want to create a new key, use `garage key new` instead. Add the --yes flag if you really want to re-import a key.".to_string())); + } + let prev_key = self.garage.key_table.get(&EmptyKey, &query.key_id).await?; if prev_key.is_some() { return Err(Error::BadRequest(format!("Key {} already exists in data store. Even if it is deleted, we can't let you create a new key with the same ID. Sorry.", query.key_id))); } - let imported_key = Key::import(&query.key_id, &query.secret_key, &query.name); + + let imported_key = Key::import(&query.key_id, &query.secret_key, &query.name) + .ok_or_bad_request("Invalid key format")?; self.garage.key_table.insert(&imported_key).await?; self.key_info_result(imported_key).await diff --git a/src/garage/admin/mod.rs b/src/garage/admin/mod.rs index 2709f08a..b6f9c426 100644 --- a/src/garage/admin/mod.rs +++ b/src/garage/admin/mod.rs @@ -28,6 +28,7 @@ use garage_model::garage::Garage; use garage_model::helper::error::{Error, OkOrBadRequest}; use garage_model::key_table::*; use garage_model::migrate::Migrate; +use garage_model::s3::mpu_table::MultipartUpload; use garage_model::s3::version_table::Version; use crate::cli::*; @@ -53,6 +54,7 @@ pub enum AdminRpc { bucket: Bucket, relevant_keys: HashMap<String, Key>, counters: HashMap<String, i64>, + mpu_counters: HashMap<String, i64>, }, KeyList(Vec<(String, String)>), KeyInfo(Key, HashMap<Uuid, Bucket>), @@ -67,6 +69,7 @@ pub enum AdminRpc { hash: Hash, refcount: u64, versions: Vec<Result<Version, Uuid>>, + uploads: Vec<MultipartUpload>, }, } @@ -274,7 +277,7 @@ impl AdminRpcHandler { // 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_assignation_data.iter() { + 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; } diff --git a/src/garage/cli/cmd.rs b/src/garage/cli/cmd.rs index cb7a898c..48359614 100644 --- a/src/garage/cli/cmd.rs +++ b/src/garage/cli/cmd.rs @@ -85,7 +85,7 @@ pub async fn cmd_status(rpc_cli: &Endpoint<SystemRpc, ()>, rpc_host: NodeID) -> )); } _ => { - let new_role = match layout.staging.get(&adv.id) { + let new_role = match layout.staging_roles.get(&adv.id) { Some(NodeRoleV(Some(_))) => "(pending)", _ => "NO ROLE ASSIGNED", }; @@ -190,8 +190,9 @@ pub async fn cmd_admin( bucket, relevant_keys, counters, + mpu_counters, } => { - print_bucket_info(&bucket, &relevant_keys, &counters); + print_bucket_info(&bucket, &relevant_keys, &counters, &mpu_counters); } AdminRpc::KeyList(kl) => { print_key_list(kl); @@ -215,8 +216,9 @@ pub async fn cmd_admin( hash, refcount, versions, + uploads, } => { - print_block_info(hash, refcount, versions); + print_block_info(hash, refcount, versions, uploads); } r => { error!("Unexpected response: {:?}", r); diff --git a/src/garage/cli/convert_db.rs b/src/garage/cli/convert_db.rs new file mode 100644 index 00000000..3c6ce69c --- /dev/null +++ b/src/garage/cli/convert_db.rs @@ -0,0 +1,69 @@ +use std::path::PathBuf; + +use structopt::StructOpt; + +use garage_db::*; + +/// K2V command line interface +#[derive(StructOpt, Debug)] +pub struct ConvertDbOpt { + /// Input database path (not the same as metadata_dir, see + /// https://garagehq.deuxfleurs.fr/documentation/reference-manual/configuration/#db-engine-since-v0-8-0) + #[structopt(short = "i")] + input_path: PathBuf, + /// Input database engine (sled, lmdb or sqlite; limited by db engines + /// enabled in this build) + #[structopt(short = "a")] + input_engine: String, + + /// Output database path + #[structopt(short = "o")] + output_path: PathBuf, + /// Output database engine + #[structopt(short = "b")] + output_engine: String, +} + +pub(crate) fn do_conversion(args: ConvertDbOpt) -> Result<()> { + let input = open_db(args.input_path, args.input_engine)?; + let output = open_db(args.output_path, args.output_engine)?; + output.import(&input)?; + Ok(()) +} + +fn open_db(path: PathBuf, engine: String) -> Result<Db> { + match engine.as_str() { + #[cfg(feature = "sled")] + "sled" => { + let db = sled_adapter::sled::Config::default().path(&path).open()?; + Ok(sled_adapter::SledDb::init(db)) + } + #[cfg(feature = "sqlite")] + "sqlite" | "sqlite3" | "rusqlite" => { + let db = sqlite_adapter::rusqlite::Connection::open(&path)?; + db.pragma_update(None, "journal_mode", &"WAL")?; + db.pragma_update(None, "synchronous", &"NORMAL")?; + Ok(sqlite_adapter::SqliteDb::init(db)) + } + #[cfg(feature = "lmdb")] + "lmdb" | "heed" => { + std::fs::create_dir_all(&path).map_err(|e| { + Error(format!("Unable to create LMDB data directory: {}", e).into()) + })?; + + let map_size = lmdb_adapter::recommended_map_size(); + + let mut env_builder = lmdb_adapter::heed::EnvOpenOptions::new(); + env_builder.max_dbs(100); + env_builder.map_size(map_size); + unsafe { + env_builder.flag(lmdb_adapter::heed::flags::Flags::MdbNoMetaSync); + } + let db = env_builder.open(&path)?; + Ok(lmdb_adapter::LmdbDb::init(db)) + } + e => Err(Error( + format!("Invalid or unsupported DB engine: {}", e).into(), + )), + } +} diff --git a/src/garage/cli/layout.rs b/src/garage/cli/layout.rs index dc5315a1..ce2b11e0 100644 --- a/src/garage/cli/layout.rs +++ b/src/garage/cli/layout.rs @@ -1,3 +1,5 @@ +use bytesize::ByteSize; + use format_table::format_table; use garage_util::crdt::Crdt; use garage_util::error::*; @@ -14,8 +16,8 @@ pub async fn cli_layout_command_dispatch( rpc_host: NodeID, ) -> Result<(), Error> { match cmd { - LayoutOperation::Assign(configure_opt) => { - cmd_assign_role(system_rpc_endpoint, rpc_host, configure_opt).await + LayoutOperation::Assign(assign_opt) => { + cmd_assign_role(system_rpc_endpoint, rpc_host, assign_opt).await } LayoutOperation::Remove(remove_opt) => { cmd_remove_role(system_rpc_endpoint, rpc_host, remove_opt).await @@ -27,6 +29,9 @@ pub async fn cli_layout_command_dispatch( LayoutOperation::Revert(revert_opt) => { cmd_revert_layout(system_rpc_endpoint, rpc_host, revert_opt).await } + LayoutOperation::Config(config_opt) => { + cmd_config_layout(system_rpc_endpoint, rpc_host, config_opt).await + } } } @@ -60,14 +65,14 @@ pub async fn cmd_assign_role( .collect::<Result<Vec<_>, _>>()?; let mut roles = layout.roles.clone(); - roles.merge(&layout.staging); + roles.merge(&layout.staging_roles); for replaced in args.replace.iter() { let replaced_node = find_matching_node(layout.node_ids().iter().cloned(), replaced)?; match roles.get(&replaced_node) { Some(NodeRoleV(Some(_))) => { layout - .staging + .staging_roles .merge(&roles.update_mutator(replaced_node, NodeRoleV(None))); } _ => { @@ -83,7 +88,7 @@ pub async fn cmd_assign_role( return Err(Error::Message( "-c and -g are mutually exclusive, please configure node either with c>0 to act as a storage node or with -g to act as a gateway node".into())); } - if args.capacity == Some(0) { + if args.capacity == Some(ByteSize::b(0)) { return Err(Error::Message("Invalid capacity value: 0".into())); } @@ -91,7 +96,7 @@ pub async fn cmd_assign_role( let new_entry = match roles.get(&added_node) { Some(NodeRoleV(Some(old))) => { let capacity = match args.capacity { - Some(c) => Some(c), + Some(c) => Some(c.as_u64()), None if args.gateway => None, None => old.capacity, }; @@ -108,7 +113,7 @@ pub async fn cmd_assign_role( } _ => { let capacity = match args.capacity { - Some(c) => Some(c), + Some(c) => Some(c.as_u64()), None if args.gateway => None, None => return Err(Error::Message( "Please specify a capacity with the -c flag, or set node explicitly as gateway with -g".into())), @@ -125,7 +130,7 @@ pub async fn cmd_assign_role( }; layout - .staging + .staging_roles .merge(&roles.update_mutator(added_node, NodeRoleV(Some(new_entry)))); } @@ -145,13 +150,13 @@ pub async fn cmd_remove_role( let mut layout = fetch_layout(rpc_cli, rpc_host).await?; let mut roles = layout.roles.clone(); - roles.merge(&layout.staging); + roles.merge(&layout.staging_roles); let deleted_node = find_matching_node(roles.items().iter().map(|(id, _, _)| *id), &args.node_id)?; layout - .staging + .staging_roles .merge(&roles.update_mutator(deleted_node, NodeRoleV(None))); send_layout(rpc_cli, rpc_host, layout).await?; @@ -166,40 +171,45 @@ pub async fn cmd_show_layout( rpc_cli: &Endpoint<SystemRpc, ()>, rpc_host: NodeID, ) -> Result<(), Error> { - let mut layout = fetch_layout(rpc_cli, rpc_host).await?; + let layout = fetch_layout(rpc_cli, rpc_host).await?; println!("==== CURRENT CLUSTER LAYOUT ===="); - if !print_cluster_layout(&layout) { - println!("No nodes currently have a role in the cluster."); - println!("See `garage status` to view available nodes."); - } + print_cluster_layout(&layout, "No nodes currently have a role in the cluster.\nSee `garage status` to view available nodes."); println!(); println!("Current cluster layout version: {}", layout.version); - if print_staging_role_changes(&layout) { - layout.roles.merge(&layout.staging); - - println!(); - println!("==== NEW CLUSTER LAYOUT AFTER APPLYING CHANGES ===="); - if !print_cluster_layout(&layout) { - println!("No nodes have a role in the new layout."); - } - println!(); + let has_role_changes = print_staging_role_changes(&layout); + if has_role_changes { + let v = layout.version; + let res_apply = layout.apply_staged_changes(Some(v + 1)); // this will print the stats of what partitions // will move around when we apply - if layout.calculate_partition_assignation() { - println!("To enact the staged role changes, type:"); - println!(); - println!(" garage layout apply --version {}", layout.version + 1); - println!(); - println!( - "You can also revert all proposed changes with: garage layout revert --version {}", - layout.version + 1 - ); - } else { - println!("Not enough nodes have an assigned role to maintain enough copies of data."); - println!("This new layout cannot yet be applied."); + match res_apply { + Ok((layout, msg)) => { + println!(); + println!("==== NEW CLUSTER LAYOUT AFTER APPLYING CHANGES ===="); + print_cluster_layout(&layout, "No nodes have a role in the new layout."); + println!(); + + for line in msg.iter() { + println!("{}", line); + } + println!("To enact the staged role changes, type:"); + println!(); + println!(" garage layout apply --version {}", v + 1); + println!(); + println!( + "You can also revert all proposed changes with: garage layout revert --version {}", + v + 1) + } + Err(e) => { + println!("Error while trying to compute the assignment: {}", e); + println!("This new layout cannot yet be applied."); + println!( + "You can also revert all proposed changes with: garage layout revert --version {}", + v + 1) + } } } @@ -213,11 +223,14 @@ pub async fn cmd_apply_layout( ) -> Result<(), Error> { let layout = fetch_layout(rpc_cli, rpc_host).await?; - let layout = layout.apply_staged_changes(apply_opt.version)?; + let (layout, msg) = layout.apply_staged_changes(apply_opt.version)?; + for line in msg.iter() { + println!("{}", line); + } send_layout(rpc_cli, rpc_host, layout).await?; - println!("New cluster layout with updated role assignation has been applied in cluster."); + println!("New cluster layout with updated role assignment has been applied in cluster."); println!("Data will now be moved around between nodes accordingly."); Ok(()) @@ -238,6 +251,52 @@ pub async fn cmd_revert_layout( Ok(()) } +pub async fn cmd_config_layout( + rpc_cli: &Endpoint<SystemRpc, ()>, + rpc_host: NodeID, + config_opt: ConfigLayoutOpt, +) -> Result<(), Error> { + let mut layout = fetch_layout(rpc_cli, rpc_host).await?; + + let mut did_something = false; + match config_opt.redundancy { + None => (), + Some(r_str) => { + let r = r_str + .parse::<ZoneRedundancy>() + .ok_or_message("invalid zone redundancy value")?; + if let ZoneRedundancy::AtLeast(r_int) = r { + if r_int > layout.replication_factor { + return Err(Error::Message(format!( + "The zone redundancy must be smaller or equal to the \ + replication factor ({}).", + layout.replication_factor + ))); + } else if r_int < 1 { + return Err(Error::Message( + "The zone redundancy must be at least 1.".into(), + )); + } + } + + layout + .staging_parameters + .update(LayoutParameters { zone_redundancy: r }); + println!("The zone redundancy parameter has been set to '{}'.", r); + did_something = true; + } + } + + if !did_something { + return Err(Error::Message( + "Please specify an action for `garage layout config`".into(), + )); + } + + send_layout(rpc_cli, rpc_host, layout).await?; + Ok(()) +} + // --- utility --- pub async fn fetch_layout( @@ -268,59 +327,84 @@ pub async fn send_layout( Ok(()) } -pub fn print_cluster_layout(layout: &ClusterLayout) -> bool { - let mut table = vec!["ID\tTags\tZone\tCapacity".to_string()]; +pub fn print_cluster_layout(layout: &ClusterLayout, empty_msg: &str) { + let mut table = vec!["ID\tTags\tZone\tCapacity\tUsable capacity".to_string()]; for (id, _, role) in layout.roles.items().iter() { let role = match &role.0 { Some(r) => r, _ => continue, }; let tags = role.tags.join(","); - table.push(format!( - "{:?}\t{}\t{}\t{}", - id, - tags, - role.zone, - role.capacity_string() - )); + let usage = layout.get_node_usage(id).unwrap_or(0); + let capacity = layout.get_node_capacity(id).unwrap_or(0); + if capacity > 0 { + table.push(format!( + "{:?}\t{}\t{}\t{}\t{} ({:.1}%)", + id, + tags, + role.zone, + role.capacity_string(), + ByteSize::b(usage as u64 * layout.partition_size).to_string_as(false), + (100.0 * usage as f32 * layout.partition_size as f32) / (capacity as f32) + )); + } else { + table.push(format!( + "{:?}\t{}\t{}\t{}", + id, + tags, + role.zone, + role.capacity_string() + )); + }; } - if table.len() == 1 { - false - } else { + if table.len() > 1 { format_table(table); - true + println!(); + println!("Zone redundancy: {}", layout.parameters.zone_redundancy); + } else { + println!("{}", empty_msg); } } pub fn print_staging_role_changes(layout: &ClusterLayout) -> bool { - let has_changes = layout - .staging + let has_role_changes = layout + .staging_roles .items() .iter() .any(|(k, _, v)| layout.roles.get(k) != Some(v)); + let has_layout_changes = *layout.staging_parameters.get() != layout.parameters; - if has_changes { + if has_role_changes || has_layout_changes { println!(); println!("==== STAGED ROLE CHANGES ===="); - let mut table = vec!["ID\tTags\tZone\tCapacity".to_string()]; - for (id, _, role) in layout.staging.items().iter() { - if layout.roles.get(id) == Some(role) { - continue; - } - if let Some(role) = &role.0 { - let tags = role.tags.join(","); - table.push(format!( - "{:?}\t{}\t{}\t{}", - id, - tags, - role.zone, - role.capacity_string() - )); - } else { - table.push(format!("{:?}\tREMOVED", id)); + if has_role_changes { + let mut table = vec!["ID\tTags\tZone\tCapacity".to_string()]; + for (id, _, role) in layout.staging_roles.items().iter() { + if layout.roles.get(id) == Some(role) { + continue; + } + if let Some(role) = &role.0 { + let tags = role.tags.join(","); + table.push(format!( + "{:?}\t{}\t{}\t{}", + id, + tags, + role.zone, + role.capacity_string() + )); + } else { + table.push(format!("{:?}\tREMOVED", id)); + } } + format_table(table); + println!(); + } + if has_layout_changes { + println!( + "Zone redundancy: {}", + layout.staging_parameters.get().zone_redundancy + ); } - format_table(table); true } else { false diff --git a/src/garage/cli/mod.rs b/src/garage/cli/mod.rs index 17a2d8ce..e131f62c 100644 --- a/src/garage/cli/mod.rs +++ b/src/garage/cli/mod.rs @@ -4,6 +4,8 @@ pub(crate) mod layout; pub(crate) mod structs; pub(crate) mod util; +pub(crate) mod convert_db; + pub(crate) use cmd::*; pub(crate) use init::*; pub(crate) use layout::*; diff --git a/src/garage/cli/structs.rs b/src/garage/cli/structs.rs index 6e585e53..aba57551 100644 --- a/src/garage/cli/structs.rs +++ b/src/garage/cli/structs.rs @@ -3,6 +3,8 @@ use structopt::StructOpt; use garage_util::version::garage_version; +use crate::cli::convert_db; + #[derive(StructOpt, Debug)] pub enum Command { /// Run Garage server @@ -17,7 +19,7 @@ pub enum Command { #[structopt(name = "node", version = garage_version())] Node(NodeOperation), - /// Operations on the assignation of node roles in the cluster layout + /// Operations on the assignment of node roles in the cluster layout #[structopt(name = "layout", version = garage_version())] Layout(LayoutOperation), @@ -54,6 +56,10 @@ pub enum Command { /// Low-level debug operations on data blocks #[structopt(name = "block", version = garage_version())] Block(BlockOperation), + + /// Convert metadata db between database engine formats + #[structopt(name = "convert-db", version = garage_version())] + ConvertDb(convert_db::ConvertDbOpt), } #[derive(StructOpt, Debug)] @@ -91,6 +97,10 @@ pub enum LayoutOperation { #[structopt(name = "remove", version = garage_version())] Remove(RemoveRoleOpt), + /// Configure parameters value for the layout computation + #[structopt(name = "config", version = garage_version())] + Config(ConfigLayoutOpt), + /// Show roles currently assigned to nodes and changes staged for commit #[structopt(name = "show", version = garage_version())] Show, @@ -114,9 +124,9 @@ pub struct AssignRoleOpt { #[structopt(short = "z", long = "zone")] pub(crate) zone: Option<String>, - /// Capacity (in relative terms, use 1 to represent your smallest server) + /// Storage capacity, in bytes (supported suffixes: B, KB, MB, GB, TB, PB) #[structopt(short = "c", long = "capacity")] - pub(crate) capacity: Option<u32>, + pub(crate) capacity: Option<bytesize::ByteSize>, /// Gateway-only node #[structopt(short = "g", long = "gateway")] @@ -138,6 +148,13 @@ pub struct RemoveRoleOpt { } #[derive(StructOpt, Debug)] +pub struct ConfigLayoutOpt { + /// Zone redundancy parameter ('none'/'max' or integer) + #[structopt(short = "r", long = "redundancy")] + pub(crate) redundancy: Option<String>, +} + +#[derive(StructOpt, Debug)] pub struct ApplyLayoutOpt { /// Version number of new configuration: this command will fail if /// it is not exactly 1 + the previous configuration's version @@ -317,11 +334,11 @@ pub enum KeyOperation { /// Get key info #[structopt(name = "info", version = garage_version())] - Info(KeyOpt), + Info(KeyInfoOpt), /// Create new key - #[structopt(name = "new", version = garage_version())] - New(KeyNewOpt), + #[structopt(name = "create", version = garage_version())] + Create(KeyNewOpt), /// Rename key #[structopt(name = "rename", version = garage_version())] @@ -345,15 +362,18 @@ pub enum KeyOperation { } #[derive(Serialize, Deserialize, StructOpt, Debug)] -pub struct KeyOpt { +pub struct KeyInfoOpt { /// ID or name of the key pub key_pattern: String, + /// Whether to display the secret key + #[structopt(long = "show-secret")] + pub show_secret: bool, } #[derive(Serialize, Deserialize, StructOpt, Debug)] pub struct KeyNewOpt { /// Name of the key - #[structopt(long = "name", default_value = "Unnamed key")] + #[structopt(default_value = "Unnamed key")] pub name: String, } @@ -397,6 +417,10 @@ pub struct KeyImportOpt { /// Key name #[structopt(short = "n", default_value = "Imported key")] pub name: String, + + /// Confirm key import + #[structopt(long = "yes")] + pub yes: bool, } #[derive(Serialize, Deserialize, StructOpt, Debug, Clone)] @@ -432,24 +456,30 @@ pub struct RepairOpt { #[derive(Serialize, Deserialize, StructOpt, Debug, Eq, PartialEq, Clone)] pub enum RepairWhat { - /// Only do a full sync of metadata tables + /// Do a full sync of metadata tables #[structopt(name = "tables", version = garage_version())] Tables, - /// Only repair (resync/rebalance) the set of stored blocks + /// Repair (resync/rebalance) the set of stored blocks in the cluster #[structopt(name = "blocks", version = garage_version())] Blocks, - /// Only redo the propagation of object deletions to the version table (slow) + /// Repropagate object deletions to the version table #[structopt(name = "versions", version = garage_version())] Versions, - /// Only redo the propagation of version deletions to the block ref table (extremely slow) + /// Repropagate object deletions to the multipart upload table + #[structopt(name = "mpu", version = garage_version())] + MultipartUploads, + /// Repropagate version deletions to the block ref table #[structopt(name = "block_refs", version = garage_version())] BlockRefs, - /// Verify integrity of all blocks on disc (extremely slow, i/o intensive) + /// Verify integrity of all blocks on disc #[structopt(name = "scrub", version = garage_version())] Scrub { #[structopt(subcommand)] cmd: ScrubCmd, }, + /// Rebalance data blocks among HDDs on individual nodes + #[structopt(name = "rebalance", version = garage_version())] + Rebalance, } #[derive(Serialize, Deserialize, StructOpt, Debug, Eq, PartialEq, Clone)] diff --git a/src/garage/cli/util.rs b/src/garage/cli/util.rs index 1140cf22..2232d395 100644 --- a/src/garage/cli/util.rs +++ b/src/garage/cli/util.rs @@ -12,8 +12,9 @@ use garage_block::manager::BlockResyncErrorInfo; use garage_model::bucket_table::*; use garage_model::key_table::*; -use garage_model::s3::object_table::{BYTES, OBJECTS, UNFINISHED_UPLOADS}; -use garage_model::s3::version_table::Version; +use garage_model::s3::mpu_table::{self, MultipartUpload}; +use garage_model::s3::object_table; +use garage_model::s3::version_table::*; use crate::cli::structs::WorkerListOpt; @@ -135,6 +136,7 @@ pub fn print_bucket_info( bucket: &Bucket, relevant_keys: &HashMap<String, Key>, counters: &HashMap<String, i64>, + mpu_counters: &HashMap<String, i64>, ) { let key_name = |k| { relevant_keys @@ -148,7 +150,7 @@ pub fn print_bucket_info( Deletable::Deleted => println!("Bucket is deleted."), Deletable::Present(p) => { let size = - bytesize::ByteSize::b(counters.get(BYTES).cloned().unwrap_or_default() as u64); + bytesize::ByteSize::b(*counters.get(object_table::BYTES).unwrap_or(&0) as u64); println!( "\nSize: {} ({})", size.to_string_as(true), @@ -156,14 +158,22 @@ pub fn print_bucket_info( ); println!( "Objects: {}", - counters.get(OBJECTS).cloned().unwrap_or_default() + *counters.get(object_table::OBJECTS).unwrap_or(&0) + ); + println!( + "Unfinished uploads (multipart and non-multipart): {}", + *counters.get(object_table::UNFINISHED_UPLOADS).unwrap_or(&0) ); println!( "Unfinished multipart uploads: {}", - counters - .get(UNFINISHED_UPLOADS) - .cloned() - .unwrap_or_default() + *mpu_counters.get(mpu_table::UPLOADS).unwrap_or(&0) + ); + let mpu_size = + bytesize::ByteSize::b(*mpu_counters.get(mpu_table::BYTES).unwrap_or(&0) as u64); + println!( + "Size of unfinished multipart uploads: {} ({})", + mpu_size.to_string_as(true), + mpu_size.to_string_as(false), ); println!("\nWebsite access: {}", p.website_config.get().is_some()); @@ -390,29 +400,49 @@ pub fn print_block_error_list(el: Vec<BlockResyncErrorInfo>) { format_table(table); } -pub fn print_block_info(hash: Hash, refcount: u64, versions: Vec<Result<Version, Uuid>>) { +pub fn print_block_info( + hash: Hash, + refcount: u64, + versions: Vec<Result<Version, Uuid>>, + uploads: Vec<MultipartUpload>, +) { println!("Block hash: {}", hex::encode(hash.as_slice())); println!("Refcount: {}", refcount); println!(); - let mut table = vec!["Version\tBucket\tKey\tDeleted".into()]; + let mut table = vec!["Version\tBucket\tKey\tMPU\tDeleted".into()]; let mut nondeleted_count = 0; for v in versions.iter() { match v { Ok(ver) => { - table.push(format!( - "{:?}\t{:?}\t{}\t{:?}", - ver.uuid, - ver.bucket_id, - ver.key, - ver.deleted.get() - )); + match &ver.backlink { + VersionBacklink::Object { bucket_id, key } => { + table.push(format!( + "{:?}\t{:?}\t{}\t\t{:?}", + ver.uuid, + bucket_id, + key, + ver.deleted.get() + )); + } + VersionBacklink::MultipartUpload { upload_id } => { + let upload = uploads.iter().find(|x| x.upload_id == *upload_id); + table.push(format!( + "{:?}\t{:?}\t{}\t{:?}\t{:?}", + ver.uuid, + upload.map(|u| u.bucket_id).unwrap_or_default(), + upload.map(|u| u.key.as_str()).unwrap_or_default(), + upload_id, + ver.deleted.get() + )); + } + } if !ver.deleted.get() { nondeleted_count += 1; } } Err(vh) => { - table.push(format!("{:?}\t\t\tyes", vh)); + table.push(format!("{:?}\t\t\t\tyes", vh)); } } } diff --git a/src/garage/main.rs b/src/garage/main.rs index e8aee892..66403d05 100644 --- a/src/garage/main.rs +++ b/src/garage/main.rs @@ -17,6 +17,9 @@ compile_error!("Either bundled-libs or system-libs Cargo feature must be enabled #[cfg(all(feature = "bundled-libs", feature = "system-libs"))] compile_error!("Only one of bundled-libs and system-libs Cargo features must be enabled"); +#[cfg(not(any(feature = "lmdb", feature = "sled", feature = "sqlite")))] +compile_error!("Must activate the Cargo feature for at least one DB engine: lmdb, sled or sqlite."); + use std::net::SocketAddr; use std::path::PathBuf; @@ -173,6 +176,9 @@ async fn main() { Command::OfflineRepair(repair_opt) => { repair::offline::offline_repair(opt.config_file, opt.secrets, repair_opt).await } + Command::ConvertDb(conv_opt) => { + cli::convert_db::do_conversion(conv_opt).map_err(From::from) + } Command::Node(NodeOperation::NodeId(node_id_opt)) => { node_id_command(opt.config_file, node_id_opt.quiet) } diff --git a/src/garage/repair/online.rs b/src/garage/repair/online.rs index 0e14ed51..9e4de873 100644 --- a/src/garage/repair/online.rs +++ b/src/garage/repair/online.rs @@ -5,11 +5,16 @@ use async_trait::async_trait; use tokio::sync::watch; use garage_block::repair::ScrubWorkerCommand; + use garage_model::garage::Garage; use garage_model::s3::block_ref_table::*; +use garage_model::s3::mpu_table::*; use garage_model::s3::object_table::*; use garage_model::s3::version_table::*; + +use garage_table::replication::*; use garage_table::*; + use garage_util::background::*; use garage_util::error::Error; use garage_util::migrate::Migrate; @@ -32,11 +37,15 @@ pub async fn launch_online_repair( } RepairWhat::Versions => { info!("Repairing the versions table"); - bg.spawn_worker(RepairVersionsWorker::new(garage.clone())); + bg.spawn_worker(TableRepairWorker::new(garage.clone(), RepairVersions)); + } + RepairWhat::MultipartUploads => { + info!("Repairing the multipart uploads table"); + bg.spawn_worker(TableRepairWorker::new(garage.clone(), RepairMpu)); } RepairWhat::BlockRefs => { info!("Repairing the block refs table"); - bg.spawn_worker(RepairBlockrefsWorker::new(garage.clone())); + bg.spawn_worker(TableRepairWorker::new(garage.clone(), RepairBlockRefs)); } RepairWhat::Blocks => { info!("Repairing the stored blocks"); @@ -61,76 +70,82 @@ pub async fn launch_online_repair( info!("Sending command to scrub worker: {:?}", cmd); garage.block_manager.send_scrub_command(cmd).await?; } + RepairWhat::Rebalance => { + info!("Rebalancing the stored blocks among storage locations"); + bg.spawn_worker(garage_block::repair::RebalanceWorker::new( + garage.block_manager.clone(), + )); + } } Ok(()) } // ---- -struct RepairVersionsWorker { +#[async_trait] +trait TableRepair: Send + Sync + 'static { + type T: TableSchema; + + fn table(garage: &Garage) -> &Table<Self::T, TableShardedReplication>; + + async fn process( + &mut self, + garage: &Garage, + entry: <<Self as TableRepair>::T as TableSchema>::E, + ) -> Result<bool, Error>; +} + +struct TableRepairWorker<T: TableRepair> { garage: Arc<Garage>, pos: Vec<u8>, counter: usize, + repairs: usize, + inner: T, } -impl RepairVersionsWorker { - fn new(garage: Arc<Garage>) -> Self { +impl<R: TableRepair> TableRepairWorker<R> { + fn new(garage: Arc<Garage>, inner: R) -> Self { Self { garage, + inner, pos: vec![], counter: 0, + repairs: 0, } } } #[async_trait] -impl Worker for RepairVersionsWorker { +impl<R: TableRepair> Worker for TableRepairWorker<R> { fn name(&self) -> String { - "Version repair worker".into() + format!("{} repair worker", R::T::TABLE_NAME) } fn status(&self) -> WorkerStatus { WorkerStatus { - progress: Some(self.counter.to_string()), + progress: Some(format!("{} ({})", self.counter, self.repairs)), ..Default::default() } } async fn work(&mut self, _must_exit: &mut watch::Receiver<bool>) -> Result<WorkerState, Error> { - let (item_bytes, next_pos) = match self.garage.version_table.data.store.get_gt(&self.pos)? { + let (item_bytes, next_pos) = match R::table(&self.garage).data.store.get_gt(&self.pos)? { Some((k, v)) => (v, k), None => { - info!("repair_versions: finished, done {}", self.counter); + info!( + "{}: finished, done {}, fixed {}", + self.name(), + self.counter, + self.repairs + ); return Ok(WorkerState::Done); } }; - let version = Version::decode(&item_bytes).ok_or_message("Cannot decode Version")?; - if !version.deleted.get() { - let object = self - .garage - .object_table - .get(&version.bucket_id, &version.key) - .await?; - let version_exists = match object { - Some(o) => o - .versions() - .iter() - .any(|x| x.uuid == version.uuid && x.state != ObjectVersionState::Aborted), - None => false, - }; - if !version_exists { - info!("Repair versions: marking version as deleted: {:?}", version); - self.garage - .version_table - .insert(&Version::new( - version.uuid, - version.bucket_id, - version.key, - true, - )) - .await?; - } + let entry = <R::T as TableSchema>::E::decode(&item_bytes) + .ok_or_message("Cannot decode table entry")?; + if self.inner.process(&self.garage, entry).await? { + self.repairs += 1; } self.counter += 1; @@ -146,77 +161,124 @@ impl Worker for RepairVersionsWorker { // ---- -struct RepairBlockrefsWorker { - garage: Arc<Garage>, - pos: Vec<u8>, - counter: usize, -} +struct RepairVersions; -impl RepairBlockrefsWorker { - fn new(garage: Arc<Garage>) -> Self { - Self { - garage, - pos: vec![], - counter: 0, +#[async_trait] +impl TableRepair for RepairVersions { + type T = VersionTable; + + fn table(garage: &Garage) -> &Table<Self::T, TableShardedReplication> { + &garage.version_table + } + + async fn process(&mut self, garage: &Garage, version: Version) -> Result<bool, Error> { + if !version.deleted.get() { + let ref_exists = match &version.backlink { + VersionBacklink::Object { bucket_id, key } => garage + .object_table + .get(bucket_id, key) + .await? + .map(|o| { + o.versions().iter().any(|x| { + x.uuid == version.uuid && x.state != ObjectVersionState::Aborted + }) + }) + .unwrap_or(false), + VersionBacklink::MultipartUpload { upload_id } => garage + .mpu_table + .get(upload_id, &EmptyKey) + .await? + .map(|u| !u.deleted.get()) + .unwrap_or(false), + }; + + if !ref_exists { + info!("Repair versions: marking version as deleted: {:?}", version); + garage + .version_table + .insert(&Version::new(version.uuid, version.backlink, true)) + .await?; + return Ok(true); + } } + + Ok(false) } } +// ---- + +struct RepairBlockRefs; + #[async_trait] -impl Worker for RepairBlockrefsWorker { - fn name(&self) -> String { - "Block refs repair worker".into() - } +impl TableRepair for RepairBlockRefs { + type T = BlockRefTable; - fn status(&self) -> WorkerStatus { - WorkerStatus { - progress: Some(self.counter.to_string()), - ..Default::default() - } + fn table(garage: &Garage) -> &Table<Self::T, TableShardedReplication> { + &garage.block_ref_table } - async fn work(&mut self, _must_exit: &mut watch::Receiver<bool>) -> Result<WorkerState, Error> { - let (item_bytes, next_pos) = - match self.garage.block_ref_table.data.store.get_gt(&self.pos)? { - Some((k, v)) => (v, k), - None => { - info!("repair_block_ref: finished, done {}", self.counter); - return Ok(WorkerState::Done); - } - }; - - let block_ref = BlockRef::decode(&item_bytes).ok_or_message("Cannot decode BlockRef")?; + async fn process(&mut self, garage: &Garage, mut block_ref: BlockRef) -> Result<bool, Error> { if !block_ref.deleted.get() { - let version = self - .garage + let ref_exists = garage .version_table .get(&block_ref.version, &EmptyKey) - .await?; - // The version might not exist if it has been GC'ed - let ref_exists = version.map(|v| !v.deleted.get()).unwrap_or(false); + .await? + .map(|v| !v.deleted.get()) + .unwrap_or(false); + if !ref_exists { info!( "Repair block ref: marking block_ref as deleted: {:?}", block_ref ); - self.garage - .block_ref_table - .insert(&BlockRef { - block: block_ref.block, - version: block_ref.version, - deleted: true.into(), - }) - .await?; + block_ref.deleted.set(); + garage.block_ref_table.insert(&block_ref).await?; + return Ok(true); } } - self.counter += 1; - self.pos = next_pos; + Ok(false) + } +} - Ok(WorkerState::Busy) +// ---- + +struct RepairMpu; + +#[async_trait] +impl TableRepair for RepairMpu { + type T = MultipartUploadTable; + + fn table(garage: &Garage) -> &Table<Self::T, TableShardedReplication> { + &garage.mpu_table } - async fn wait_for_work(&mut self) -> WorkerState { - unreachable!() + async fn process(&mut self, garage: &Garage, mut mpu: MultipartUpload) -> Result<bool, Error> { + if !mpu.deleted.get() { + let ref_exists = garage + .object_table + .get(&mpu.bucket_id, &mpu.key) + .await? + .map(|o| { + o.versions() + .iter() + .any(|x| x.uuid == mpu.upload_id && x.is_uploading(Some(true))) + }) + .unwrap_or(false); + + if !ref_exists { + info!( + "Repair multipart uploads: marking mpu as deleted: {:?}", + mpu + ); + mpu.parts.clear(); + mpu.deleted.set(); + garage.mpu_table.insert(&mpu).await?; + return Ok(true); + } + } + + Ok(false) } } diff --git a/src/garage/server.rs b/src/garage/server.rs index 958089c6..3ad10b72 100644 --- a/src/garage/server.rs +++ b/src/garage/server.rs @@ -79,7 +79,7 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er "S3 API", tokio::spawn(S3ApiServer::run( garage.clone(), - *s3_bind_addr, + s3_bind_addr.clone(), config.s3_api.s3_region.clone(), wait_from(watch_cancel.clone()), )), @@ -94,7 +94,7 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er "K2V API", tokio::spawn(K2VApiServer::run( garage.clone(), - config.k2v_api.as_ref().unwrap().api_bind_addr, + config.k2v_api.as_ref().unwrap().api_bind_addr.clone(), config.s3_api.s3_region.clone(), wait_from(watch_cancel.clone()), )), @@ -110,7 +110,7 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er "Web", tokio::spawn(WebServer::run( garage.clone(), - web_config.bind_addr, + web_config.bind_addr.clone(), web_config.root_domain.clone(), wait_from(watch_cancel.clone()), )), @@ -121,7 +121,9 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er info!("Launching Admin API server..."); servers.push(( "Admin", - tokio::spawn(admin_server.run(*admin_bind_addr, wait_from(watch_cancel.clone()))), + tokio::spawn( + admin_server.run(admin_bind_addr.clone(), wait_from(watch_cancel.clone())), + ), )); } @@ -130,20 +132,27 @@ pub async fn run_server(config_file: PathBuf, secrets: Secrets) -> Result<(), Er warn!("This Garage version is built without the metrics feature"); } - // Stuff runs - - // When a cancel signal is sent, stuff stops - - // Collect stuff - for (desc, join_handle) in servers { - if let Err(e) = join_handle.await? { - error!("{} server exited with error: {}", desc, e); - } else { - info!("{} server exited without error.", desc); + if servers.is_empty() { + // Nothing runs except netapp (not in servers) + // Await shutdown signal before proceeding to shutting down netapp + wait_from(watch_cancel).await; + } else { + // Stuff runs + + // When a cancel signal is sent, stuff stops + + // Collect stuff + for (desc, join_handle) in servers { + if let Err(e) = join_handle.await? { + error!("{} server exited with error: {}", desc, e); + } else { + info!("{} server exited without error.", desc); + } } } // Remove RPC handlers for system to break reference cycles + info!("Deregistering RPC handlers for shutdown..."); garage.system.netapp.drop_all_handlers(); opentelemetry::global::shutdown_tracer_provider(); diff --git a/src/garage/tests/common/garage.rs b/src/garage/tests/common/garage.rs index 8aaf6f5b..d1f0867a 100644 --- a/src/garage/tests/common/garage.rs +++ b/src/garage/tests/common/garage.rs @@ -52,6 +52,7 @@ impl Instance { r#" metadata_dir = "{path}/meta" data_dir = "{path}/data" +db_engine = "lmdb" replication_mode = "1" @@ -141,7 +142,7 @@ api_bind_addr = "127.0.0.1:{admin_port}" self.command() .args(["layout", "assign"]) .arg(node_short_id) - .args(["-c", "1", "-z", "unzonned"]) + .args(["-c", "1G", "-z", "unzonned"]) .quiet() .expect_success_status("Could not assign garage node layout"); self.command() @@ -186,9 +187,9 @@ api_bind_addr = "127.0.0.1:{admin_port}" let mut key = Key::default(); let mut cmd = self.command(); - let base = cmd.args(["key", "new"]); + let base = cmd.args(["key", "create"]); let with_name = match maybe_name { - Some(name) => base.args(["--name", name]), + Some(name) => base.args([name]), None => base, }; diff --git a/src/garage/tests/common/mod.rs b/src/garage/tests/common/mod.rs index 54efd1ea..1273bad1 100644 --- a/src/garage/tests/common/mod.rs +++ b/src/garage/tests/common/mod.rs @@ -1,6 +1,7 @@ use aws_sdk_s3::config::Region; use aws_sdk_s3::Client; use ext::*; +#[cfg(feature = "k2v")] use k2v_client::K2vClient; #[macro_use] @@ -21,6 +22,7 @@ pub struct Context { pub key: garage::Key, pub client: Client, pub custom_request: CustomRequester, + #[cfg(feature = "k2v")] pub k2v: K2VContext, } @@ -35,6 +37,7 @@ impl Context { let key = garage.key(None); let client = client::build_client(&key); let custom_request = CustomRequester::new_s3(garage, &key); + #[cfg(feature = "k2v")] let k2v_request = CustomRequester::new_k2v(garage, &key); Context { @@ -42,6 +45,7 @@ impl Context { client, key, custom_request, + #[cfg(feature = "k2v")] k2v: K2VContext { request: k2v_request, }, @@ -72,6 +76,7 @@ impl Context { } /// Build a K2vClient for a given bucket + #[cfg(feature = "k2v")] pub fn k2v_client(&self, bucket: &str) -> K2vClient { let config = k2v_client::K2vClientConfig { region: REGION.to_string(), diff --git a/src/garage/tests/k2v/batch.rs b/src/garage/tests/k2v/batch.rs index 595d0ba8..71de91bf 100644 --- a/src/garage/tests/k2v/batch.rs +++ b/src/garage/tests/k2v/batch.rs @@ -6,7 +6,7 @@ use assert_json_diff::assert_json_eq; use base64::prelude::*; use serde_json::json; -use super::json_body; +use crate::json_body; use hyper::{Method, StatusCode}; #[tokio::test] diff --git a/src/garage/tests/k2v/item.rs b/src/garage/tests/k2v/item.rs index 588836c7..20add889 100644 --- a/src/garage/tests/k2v/item.rs +++ b/src/garage/tests/k2v/item.rs @@ -6,7 +6,7 @@ use assert_json_diff::assert_json_eq; use base64::prelude::*; use serde_json::json; -use super::json_body; +use crate::json_body; use hyper::{Method, StatusCode}; #[tokio::test] @@ -44,6 +44,7 @@ async fn test_items_and_indices() { let content = format!("{}: hello world", sk).into_bytes(); let content2 = format!("{}: hello universe", sk).into_bytes(); let content3 = format!("{}: concurrent value", sk).into_bytes(); + eprintln!("test iteration {}: {}", i, sk); // Put initially, no causality token let res = ctx @@ -89,7 +90,7 @@ async fn test_items_and_indices() { assert_eq!(res_body, content); // ReadIndex -- now there should be some stuff - tokio::time::sleep(Duration::from_secs(1)).await; + tokio::time::sleep(Duration::from_millis(100)).await; let res = ctx .k2v .request @@ -158,7 +159,7 @@ async fn test_items_and_indices() { assert_eq!(res_body, content2); // ReadIndex -- now there should be some stuff - tokio::time::sleep(Duration::from_secs(1)).await; + tokio::time::sleep(Duration::from_millis(100)).await; let res = ctx .k2v .request @@ -230,7 +231,7 @@ async fn test_items_and_indices() { ); // ReadIndex -- now there should be some stuff - tokio::time::sleep(Duration::from_secs(1)).await; + tokio::time::sleep(Duration::from_millis(100)).await; let res = ctx .k2v .request @@ -299,7 +300,7 @@ async fn test_items_and_indices() { assert_eq!(res.status(), StatusCode::NO_CONTENT); // ReadIndex -- now there should be some stuff - tokio::time::sleep(Duration::from_secs(1)).await; + tokio::time::sleep(Duration::from_millis(100)).await; let res = ctx .k2v .request diff --git a/src/garage/tests/k2v/mod.rs b/src/garage/tests/k2v/mod.rs index a009460e..241e3dc2 100644 --- a/src/garage/tests/k2v/mod.rs +++ b/src/garage/tests/k2v/mod.rs @@ -3,16 +3,3 @@ pub mod errorcodes; pub mod item; pub mod poll; pub mod simple; - -use hyper::{Body, Response}; - -pub async fn json_body(res: Response<Body>) -> serde_json::Value { - let res_body: serde_json::Value = serde_json::from_slice( - &hyper::body::to_bytes(res.into_body()) - .await - .unwrap() - .to_vec()[..], - ) - .unwrap(); - res_body -} diff --git a/src/garage/tests/k2v/poll.rs b/src/garage/tests/k2v/poll.rs index dd44aed9..452317c2 100644 --- a/src/garage/tests/k2v/poll.rs +++ b/src/garage/tests/k2v/poll.rs @@ -5,8 +5,8 @@ use std::time::Duration; use assert_json_diff::assert_json_eq; use serde_json::json; -use super::json_body; use crate::common; +use crate::json_body; #[tokio::test] async fn test_poll_item() { diff --git a/src/garage/tests/lib.rs b/src/garage/tests/lib.rs index e450baac..ab92bc0a 100644 --- a/src/garage/tests/lib.rs +++ b/src/garage/tests/lib.rs @@ -10,3 +10,16 @@ mod s3; mod k2v; #[cfg(feature = "k2v")] mod k2v_client; + +use hyper::{Body, Response}; + +pub async fn json_body(res: Response<Body>) -> serde_json::Value { + let res_body: serde_json::Value = serde_json::from_slice( + &hyper::body::to_bytes(res.into_body()) + .await + .unwrap() + .to_vec()[..], + ) + .unwrap(); + res_body +} diff --git a/src/garage/tests/s3/multipart.rs b/src/garage/tests/s3/multipart.rs index aeff94b4..09ae5e5b 100644 --- a/src/garage/tests/s3/multipart.rs +++ b/src/garage/tests/s3/multipart.rs @@ -6,6 +6,190 @@ const SZ_5MB: usize = 5 * 1024 * 1024; const SZ_10MB: usize = 10 * 1024 * 1024; #[tokio::test] +async fn test_multipart_upload() { + let ctx = common::context(); + let bucket = ctx.create_bucket("testmpu"); + + let u1 = vec![0x11; SZ_5MB]; + let u2 = vec![0x22; SZ_5MB]; + let u3 = vec![0x33; SZ_5MB]; + let u4 = vec![0x44; SZ_5MB]; + let u5 = vec![0x55; SZ_5MB]; + + let up = ctx + .client + .create_multipart_upload() + .bucket(&bucket) + .key("a") + .send() + .await + .unwrap(); + assert!(up.upload_id.is_some()); + + let uid = up.upload_id.as_ref().unwrap(); + + let p3 = ctx + .client + .upload_part() + .bucket(&bucket) + .key("a") + .upload_id(uid) + .part_number(3) + .body(ByteStream::from(u3.clone())) + .send() + .await + .unwrap(); + + let _p1 = ctx + .client + .upload_part() + .bucket(&bucket) + .key("a") + .upload_id(uid) + .part_number(1) + .body(ByteStream::from(u1)) + .send() + .await + .unwrap(); + + let _p4 = ctx + .client + .upload_part() + .bucket(&bucket) + .key("a") + .upload_id(uid) + .part_number(4) + .body(ByteStream::from(u4)) + .send() + .await + .unwrap(); + + let p1bis = ctx + .client + .upload_part() + .bucket(&bucket) + .key("a") + .upload_id(uid) + .part_number(1) + .body(ByteStream::from(u2.clone())) + .send() + .await + .unwrap(); + + let p6 = ctx + .client + .upload_part() + .bucket(&bucket) + .key("a") + .upload_id(uid) + .part_number(6) + .body(ByteStream::from(u5.clone())) + .send() + .await + .unwrap(); + + { + let r = ctx + .client + .list_parts() + .bucket(&bucket) + .key("a") + .upload_id(uid) + .send() + .await + .unwrap(); + assert_eq!(r.parts.unwrap().len(), 4); + } + + let cmp = CompletedMultipartUpload::builder() + .parts( + CompletedPart::builder() + .part_number(1) + .e_tag(p1bis.e_tag.unwrap()) + .build(), + ) + .parts( + CompletedPart::builder() + .part_number(3) + .e_tag(p3.e_tag.unwrap()) + .build(), + ) + .parts( + CompletedPart::builder() + .part_number(6) + .e_tag(p6.e_tag.unwrap()) + .build(), + ) + .build(); + + ctx.client + .complete_multipart_upload() + .bucket(&bucket) + .key("a") + .upload_id(uid) + .multipart_upload(cmp) + .send() + .await + .unwrap(); + + // The multipart upload must not appear anymore + assert!(ctx + .client + .list_parts() + .bucket(&bucket) + .key("a") + .upload_id(uid) + .send() + .await + .is_err()); + + { + // The object must appear as a regular object + let r = ctx + .client + .head_object() + .bucket(&bucket) + .key("a") + .send() + .await + .unwrap(); + + assert_eq!(r.content_length, (SZ_5MB * 3) as i64); + } + + { + let o = ctx + .client + .get_object() + .bucket(&bucket) + .key("a") + .send() + .await + .unwrap(); + + assert_bytes_eq!(o.body, &[&u2[..], &u3[..], &u5[..]].concat()); + } + + { + for (part_number, data) in [(1, &u2), (2, &u3), (3, &u5)] { + let o = ctx + .client + .get_object() + .bucket(&bucket) + .key("a") + .part_number(part_number) + .send() + .await + .unwrap(); + + eprintln!("get_object with part_number = {}", part_number); + assert_eq!(o.content_length, SZ_5MB as i64); + assert_bytes_eq!(o.body, data); + } + } +} + +#[tokio::test] async fn test_uploadlistpart() { let ctx = common::context(); let bucket = ctx.create_bucket("uploadpart"); @@ -65,7 +249,8 @@ async fn test_uploadlistpart() { let ps = r.parts.unwrap(); assert_eq!(ps.len(), 1); - let fp = ps.iter().find(|x| x.part_number == 2).unwrap(); + assert_eq!(ps[0].part_number, 2); + let fp = &ps[0]; assert!(fp.last_modified.is_some()); assert_eq!( fp.e_tag.as_ref().unwrap(), @@ -100,13 +285,24 @@ async fn test_uploadlistpart() { let ps = r.parts.unwrap(); assert_eq!(ps.len(), 2); - let fp = ps.iter().find(|x| x.part_number == 1).unwrap(); + + assert_eq!(ps[0].part_number, 1); + let fp = &ps[0]; assert!(fp.last_modified.is_some()); assert_eq!( fp.e_tag.as_ref().unwrap(), "\"3c484266f9315485694556e6c693bfa2\"" ); assert_eq!(fp.size, SZ_5MB as i64); + + assert_eq!(ps[1].part_number, 2); + let sp = &ps[1]; + assert!(sp.last_modified.is_some()); + assert_eq!( + sp.e_tag.as_ref().unwrap(), + "\"3366bb9dcf710d6801b5926467d02e19\"" + ); + assert_eq!(sp.size, SZ_5MB as i64); } { @@ -123,12 +319,19 @@ async fn test_uploadlistpart() { .unwrap(); assert!(r.part_number_marker.is_none()); - assert!(r.next_part_number_marker.is_some()); + assert_eq!(r.next_part_number_marker.as_deref(), Some("1")); assert_eq!(r.max_parts, 1_i32); assert!(r.is_truncated); assert_eq!(r.key.unwrap(), "a"); assert_eq!(r.upload_id.unwrap().as_str(), uid.as_str()); - assert_eq!(r.parts.unwrap().len(), 1); + let parts = r.parts.unwrap(); + assert_eq!(parts.len(), 1); + let fp = &parts[0]; + assert_eq!(fp.part_number, 1); + assert_eq!( + fp.e_tag.as_ref().unwrap(), + "\"3c484266f9315485694556e6c693bfa2\"" + ); let r2 = ctx .client @@ -147,10 +350,18 @@ async fn test_uploadlistpart() { r.next_part_number_marker.as_ref().unwrap() ); assert_eq!(r2.max_parts, 1_i32); - assert!(r2.is_truncated); assert_eq!(r2.key.unwrap(), "a"); assert_eq!(r2.upload_id.unwrap().as_str(), uid.as_str()); - assert_eq!(r2.parts.unwrap().len(), 1); + let parts = r2.parts.unwrap(); + assert_eq!(parts.len(), 1); + let fp = &parts[0]; + assert_eq!(fp.part_number, 2); + assert_eq!( + fp.e_tag.as_ref().unwrap(), + "\"3366bb9dcf710d6801b5926467d02e19\"" + ); + //assert!(r2.is_truncated); // WHY? (this was the test before) + assert!(!r2.is_truncated); } let cmp = CompletedMultipartUpload::builder() diff --git a/src/garage/tests/s3/website.rs b/src/garage/tests/s3/website.rs index ab9b12b9..eeafb5fa 100644 --- a/src/garage/tests/s3/website.rs +++ b/src/garage/tests/s3/website.rs @@ -1,6 +1,6 @@ use crate::common; use crate::common::ext::*; -use crate::k2v::json_body; +use crate::json_body; use assert_json_diff::assert_json_eq; use aws_sdk_s3::{ @@ -72,7 +72,7 @@ async fn test_website() { res_body, json!({ "code": "InvalidRequest", - "message": "Bad request: Bucket 'my-website' is not authorized for website hosting", + "message": "Bad request: Domain 'my-website' is not managed by Garage", "region": "garage-integ-test", "path": "/check", }) @@ -91,24 +91,29 @@ 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() - ); + for bname in [ + BCKT_NAME.to_string(), + format!("{BCKT_NAME}.web.garage"), + format!("{BCKT_NAME}.s3.garage"), + ] { + let admin_req = || { + Request::builder() + .method("GET") + .uri(format!( + "http://127.0.0.1:{0}/check?domain={1}", + ctx.garage.admin_port, bname + )) + .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!("Domain '{bname}' is managed by Garage").as_bytes() + ); + } ctx.garage .command() @@ -142,7 +147,7 @@ async fn test_website() { res_body, json!({ "code": "InvalidRequest", - "message": "Bad request: Bucket 'my-website' is not authorized for website hosting", + "message": "Bad request: Domain 'my-website' is not managed by Garage", "region": "garage-integ-test", "path": "/check", }) @@ -397,7 +402,7 @@ async fn test_website_s3_api() { } #[tokio::test] -async fn test_website_check_website_enabled() { +async fn test_website_check_domain() { let ctx = common::context(); let client = Client::new(); @@ -435,13 +440,13 @@ async fn test_website_check_website_enabled() { }; let admin_resp = client.request(admin_req()).await.unwrap(); - assert_eq!(admin_resp.status(), StatusCode::NOT_FOUND); + assert_eq!(admin_resp.status(), StatusCode::BAD_REQUEST); let res_body = json_body(admin_resp).await; assert_json_eq!( res_body, json!({ - "code": "NoSuchBucket", - "message": "Bucket not found: ", + "code": "InvalidRequest", + "message": "Bad request: Domain '' is not managed by Garage", "region": "garage-integ-test", "path": "/check", }) @@ -459,13 +464,13 @@ async fn test_website_check_website_enabled() { }; let admin_resp = client.request(admin_req()).await.unwrap(); - assert_eq!(admin_resp.status(), StatusCode::NOT_FOUND); + assert_eq!(admin_resp.status(), StatusCode::BAD_REQUEST); let res_body = json_body(admin_resp).await; assert_json_eq!( res_body, json!({ - "code": "NoSuchBucket", - "message": "Bucket not found: foobar", + "code": "InvalidRequest", + "message": "Bad request: Domain 'foobar' is not managed by Garage", "region": "garage-integ-test", "path": "/check", }) @@ -483,13 +488,13 @@ async fn test_website_check_website_enabled() { }; let admin_resp = client.request(admin_req()).await.unwrap(); - assert_eq!(admin_resp.status(), StatusCode::NOT_FOUND); + assert_eq!(admin_resp.status(), StatusCode::BAD_REQUEST); let res_body = json_body(admin_resp).await; assert_json_eq!( res_body, json!({ - "code": "NoSuchBucket", - "message": "Bucket not found: ☹", + "code": "InvalidRequest", + "message": "Bad request: Domain '☹' is not managed by Garage", "region": "garage-integ-test", "path": "/check", }) diff --git a/src/model/Cargo.toml b/src/model/Cargo.toml index 6dc954d4..42b7ffdb 100644 --- a/src/model/Cargo.toml +++ b/src/model/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_model" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>"] edition = "2018" license = "AGPL-3.0" @@ -23,6 +23,7 @@ garage_util.workspace = true async-trait = "0.1.7" arc-swap = "1.0" blake2 = "0.10" +chrono = "0.4" err-derive = "0.3" hex = "0.4" base64 = "0.21" @@ -38,10 +39,10 @@ futures-util = "0.3" tokio = { version = "1.0", default-features = false, features = ["rt", "rt-multi-thread", "io-util", "net", "time", "macros", "sync", "signal", "fs"] } opentelemetry = "0.17" -netapp = "0.5" +netapp = "0.10" [features] -default = [ "sled" ] +default = [ "sled", "lmdb", "sqlite" ] k2v = [ "garage_util/k2v" ] lmdb = [ "garage_db/lmdb" ] sled = [ "garage_db/sled" ] diff --git a/src/model/bucket_table.rs b/src/model/bucket_table.rs index ac163736..4c48a76f 100644 --- a/src/model/bucket_table.rs +++ b/src/model/bucket_table.rs @@ -48,6 +48,9 @@ mod v08 { pub website_config: crdt::Lww<Option<WebsiteConfig>>, /// CORS rules pub cors_config: crdt::Lww<Option<Vec<CorsRule>>>, + /// Lifecycle configuration + #[serde(default)] + pub lifecycle_config: crdt::Lww<Option<Vec<LifecycleRule>>>, /// Bucket quotas #[serde(default)] pub quotas: crdt::Lww<BucketQuotas>, @@ -69,6 +72,42 @@ mod v08 { pub expose_headers: Vec<String>, } + /// Lifecycle configuration rule + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub struct LifecycleRule { + /// The ID of the rule + pub id: Option<String>, + /// Whether the rule is active + pub enabled: bool, + /// The filter to check whether rule applies to a given object + pub filter: LifecycleFilter, + /// Number of days after which incomplete multipart uploads are aborted + pub abort_incomplete_mpu_days: Option<usize>, + /// Expiration policy for stored objects + pub expiration: Option<LifecycleExpiration>, + } + + /// A lifecycle filter is a set of conditions that must all be true. + /// For each condition, if it is None, it is not verified (always true), + /// and if it is Some(x), then it is verified for value x + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize, Default)] + pub struct LifecycleFilter { + /// If Some(x), object key has to start with prefix x + pub prefix: Option<String>, + /// If Some(x), object size has to be more than x + pub size_gt: Option<u64>, + /// If Some(x), object size has to be less than x + pub size_lt: Option<u64>, + } + + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub enum LifecycleExpiration { + /// Objects expire x days after they were created + AfterDays(usize), + /// Objects expire at date x (must be in yyyy-mm-dd format) + AtDate(String), + } + #[derive(Default, PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] pub struct BucketQuotas { /// Maximum size in bytes (bucket size = sum of sizes of objects in the bucket) @@ -88,7 +127,7 @@ impl AutoCrdt for BucketQuotas { impl BucketParams { /// Create an empty BucketParams with no authorized keys and no website accesss - pub fn new() -> Self { + fn new() -> Self { BucketParams { creation_date: now_msec(), authorized_keys: crdt::Map::new(), @@ -96,6 +135,7 @@ impl BucketParams { local_aliases: crdt::LwwMap::new(), website_config: crdt::Lww::new(None), cors_config: crdt::Lww::new(None), + lifecycle_config: crdt::Lww::new(None), quotas: crdt::Lww::new(BucketQuotas::default()), } } @@ -111,10 +151,25 @@ impl Crdt for BucketParams { self.website_config.merge(&o.website_config); self.cors_config.merge(&o.cors_config); + self.lifecycle_config.merge(&o.lifecycle_config); self.quotas.merge(&o.quotas); } } +pub fn parse_lifecycle_date(date: &str) -> Result<chrono::NaiveDate, &'static str> { + use chrono::prelude::*; + + if let Ok(datetime) = NaiveDateTime::parse_from_str(date, "%Y-%m-%dT%H:%M:%SZ") { + if datetime.time() == NaiveTime::MIN { + Ok(datetime.date()) + } else { + Err("date must be at midnight") + } + } else { + NaiveDate::parse_from_str(date, "%Y-%m-%d").map_err(|_| "date has invalid format") + } +} + impl Default for Bucket { fn default() -> Self { Self::new() diff --git a/src/model/garage.rs b/src/model/garage.rs index 3daa1b33..8c9a3af3 100644 --- a/src/model/garage.rs +++ b/src/model/garage.rs @@ -7,6 +7,7 @@ use garage_db as db; use garage_util::background::*; use garage_util::config::*; use garage_util::error::*; +use garage_util::persister::PersisterShared; use garage_rpc::replication_mode::ReplicationMode; use garage_rpc::system::System; @@ -17,6 +18,8 @@ use garage_table::replication::TableShardedReplication; use garage_table::*; use crate::s3::block_ref_table::*; +use crate::s3::lifecycle_worker; +use crate::s3::mpu_table::*; use crate::s3::object_table::*; use crate::s3::version_table::*; @@ -57,11 +60,18 @@ pub struct Garage { pub object_table: Arc<Table<ObjectTable, TableShardedReplication>>, /// Counting table containing object counters pub object_counter_table: Arc<IndexCounter<Object>>, + /// Table containing S3 multipart uploads + pub mpu_table: Arc<Table<MultipartUploadTable, TableShardedReplication>>, + /// Counting table containing multipart object counters + pub mpu_counter_table: Arc<IndexCounter<MultipartUpload>>, /// Table containing S3 object versions pub version_table: Arc<Table<VersionTable, TableShardedReplication>>, /// Table containing S3 block references (not blocks themselves) pub block_ref_table: Arc<Table<BlockRefTable, TableShardedReplication>>, + /// Persister for lifecycle worker info + pub lifecycle_persister: PersisterShared<lifecycle_worker::LifecycleWorkerPersisted>, + #[cfg(feature = "k2v")] pub k2v: GarageK2V, } @@ -82,8 +92,22 @@ impl Garage { // Create meta dir and data dir if they don't exist already std::fs::create_dir_all(&config.metadata_dir) .ok_or_message("Unable to create Garage metadata directory")?; - std::fs::create_dir_all(&config.data_dir) - .ok_or_message("Unable to create Garage data directory")?; + match &config.data_dir { + DataDirEnum::Single(data_dir) => { + std::fs::create_dir_all(data_dir).ok_or_message(format!( + "Unable to create Garage data directory: {}", + data_dir.to_string_lossy() + ))?; + } + DataDirEnum::Multiple(data_dirs) => { + for dir in data_dirs { + std::fs::create_dir_all(&dir.path).ok_or_message(format!( + "Unable to create Garage data directory: {}", + dir.path.to_string_lossy() + ))?; + } + } + } info!("Opening database..."); let mut db_path = config.metadata_dir.clone(); @@ -91,11 +115,16 @@ impl Garage { // ---- Sled DB ---- #[cfg(feature = "sled")] "sled" => { + if config.metadata_fsync { + return Err(Error::Message(format!( + "`metadata_fsync = true` is not supported with the Sled database engine" + ))); + } db_path.push("db"); info!("Opening Sled database at: {}", db_path.display()); let db = db::sled_adapter::sled::Config::default() .path(&db_path) - .cache_capacity(config.sled_cache_capacity) + .cache_capacity(config.sled_cache_capacity as u64) .flush_every_ms(Some(config.sled_flush_every_ms)) .open() .ok_or_message("Unable to open sled DB")?; @@ -109,6 +138,15 @@ 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) + .and_then(|db| { + db.pragma_update(None, "journal_mode", &"WAL")?; + if config.metadata_fsync { + db.pragma_update(None, "synchronous", &"NORMAL")?; + } else { + db.pragma_update(None, "synchronous", &"OFF")?; + } + Ok(db) + }) .ok_or_message("Unable to open sqlite DB")?; db::sqlite_adapter::SqliteDb::init(db) } @@ -125,7 +163,10 @@ impl Garage { info!("Opening LMDB database at: {}", db_path.display()); 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(); + let map_size = match config.lmdb_map_size { + v if v == usize::default() => garage_db::lmdb_adapter::recommended_map_size(), + v => v - (v % 4096), + }; use db::lmdb_adapter::heed; let mut env_builder = heed::EnvOpenOptions::new(); @@ -133,8 +174,10 @@ impl Garage { env_builder.max_readers(500); env_builder.map_size(map_size); unsafe { - env_builder.flag(heed::flags::Flags::MdbNoSync); env_builder.flag(heed::flags::Flags::MdbNoMetaSync); + if !config.metadata_fsync { + env_builder.flag(heed::flags::Flags::MdbNoSync); + } } let db = match env_builder.open(&db_path) { Err(heed::Error::Io(e)) if e.kind() == std::io::ErrorKind::OutOfMemory => { @@ -142,6 +185,7 @@ impl Garage { "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). \ + You may also try to set a smaller `lmdb_map_size` configuration parameter. \ On 32-bit machines, you should probably switch to another database engine.".into())) } x => x.ok_or_message("Unable to open LMDB DB")?, @@ -178,6 +222,9 @@ impl Garage { let replication_mode = ReplicationMode::parse(&config.replication_mode) .ok_or_message("Invalid replication_mode in config file.")?; + info!("Initialize background variable system..."); + let mut bg_vars = vars::BgVars::new(); + info!("Initialize membership management system..."); let system = System::new(network_key, replication_mode, &config)?; @@ -204,10 +251,12 @@ impl Garage { let block_manager = BlockManager::new( &db, config.data_dir.clone(), + config.data_fsync, config.compression_level, data_rep_param, system.clone(), - ); + )?; + block_manager.register_bg_vars(&mut bg_vars); // ---- admin tables ---- info!("Initialize bucket_table..."); @@ -244,6 +293,20 @@ impl Garage { &db, ); + info!("Initialize multipart upload counter table..."); + let mpu_counter_table = IndexCounter::new(system.clone(), meta_rep_param.clone(), &db); + + info!("Initialize multipart upload table..."); + let mpu_table = Table::new( + MultipartUploadTable { + version_table: version_table.clone(), + mpu_counter_table: mpu_counter_table.clone(), + }, + meta_rep_param.clone(), + system.clone(), + &db, + ); + info!("Initialize object counter table..."); let object_counter_table = IndexCounter::new(system.clone(), meta_rep_param.clone(), &db); @@ -252,6 +315,7 @@ impl Garage { let object_table = Table::new( ObjectTable { version_table: version_table.clone(), + mpu_table: mpu_table.clone(), object_counter_table: object_counter_table.clone(), }, meta_rep_param.clone(), @@ -259,14 +323,15 @@ impl Garage { &db, ); + info!("Load lifecycle worker state..."); + let lifecycle_persister = + PersisterShared::new(&system.metadata_dir, "lifecycle_worker_state"); + lifecycle_worker::register_bg_vars(&lifecycle_persister, &mut bg_vars); + // ---- K2V ---- #[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, @@ -280,14 +345,17 @@ impl Garage { key_table, object_table, object_counter_table, + mpu_table, + mpu_counter_table, version_table, block_ref_table, + lifecycle_persister, #[cfg(feature = "k2v")] k2v, })) } - pub fn spawn_workers(&self, bg: &BackgroundRunner) { + pub fn spawn_workers(self: &Arc<Self>, bg: &BackgroundRunner) { self.block_manager.spawn_workers(bg); self.bucket_table.spawn_workers(bg); @@ -296,9 +364,16 @@ impl Garage { self.object_table.spawn_workers(bg); self.object_counter_table.spawn_workers(bg); + self.mpu_table.spawn_workers(bg); + self.mpu_counter_table.spawn_workers(bg); self.version_table.spawn_workers(bg); self.block_ref_table.spawn_workers(bg); + bg.spawn_worker(lifecycle_worker::LifecycleWorker::new( + self.clone(), + self.lifecycle_persister.clone(), + )); + #[cfg(feature = "k2v")] self.k2v.spawn_workers(bg); } diff --git a/src/model/helper/bucket.rs b/src/model/helper/bucket.rs index 4a488d7f..576d03f3 100644 --- a/src/model/helper/bucket.rs +++ b/src/model/helper/bucket.rs @@ -478,7 +478,9 @@ impl<'a> BucketHelper<'a> { // ---- /// Deletes all incomplete multipart uploads that are older than a certain time. - /// Returns the number of uploads aborted + /// Returns the number of uploads aborted. + /// This will also include non-multipart uploads, which may be lingering + /// after a node crash pub async fn cleanup_incomplete_uploads( &self, bucket_id: &Uuid, @@ -496,7 +498,9 @@ impl<'a> BucketHelper<'a> { .get_range( bucket_id, start, - Some(ObjectFilter::IsUploading), + Some(ObjectFilter::IsUploading { + check_multipart: None, + }), 1000, EnumerationOrder::Forward, ) @@ -508,7 +512,7 @@ impl<'a> BucketHelper<'a> { let aborted_versions = object .versions() .iter() - .filter(|v| v.is_uploading() && v.timestamp < older_than) + .filter(|v| v.is_uploading(None) && v.timestamp < older_than) .map(|v| ObjectVersion { state: ObjectVersionState::Aborted, uuid: v.uuid, diff --git a/src/model/index_counter.rs b/src/model/index_counter.rs index 35d6596d..a46c165f 100644 --- a/src/model/index_counter.rs +++ b/src/model/index_counter.rs @@ -294,7 +294,7 @@ impl<T: CountedItem> IndexCounter<T> { let counter_entry = local_counter.into_counter_entry(self.this_node); self.local_counter .db() - .transaction(|mut tx| self.table.queue_insert(&mut tx, &counter_entry))?; + .transaction(|tx| self.table.queue_insert(tx, &counter_entry))?; next_start = Some(local_counter_k); } @@ -360,7 +360,7 @@ impl<T: CountedItem> IndexCounter<T> { let counter_entry = local_counter.into_counter_entry(self.this_node); self.local_counter .db() - .transaction(|mut tx| self.table.queue_insert(&mut tx, &counter_entry))?; + .transaction(|tx| self.table.queue_insert(tx, &counter_entry))?; next_start = Some(counted_entry_k); } diff --git a/src/model/key_table.rs b/src/model/key_table.rs index bb5334a3..a9762f1b 100644 --- a/src/model/key_table.rs +++ b/src/model/key_table.rs @@ -149,11 +149,19 @@ impl Key { } /// Import a key from it's parts - pub fn import(key_id: &str, secret_key: &str, name: &str) -> Self { - Self { + pub fn import(key_id: &str, secret_key: &str, name: &str) -> Result<Self, &'static str> { + if key_id.len() != 26 || &key_id[..2] != "GK" || hex::decode(&key_id[2..]).is_err() { + return Err("The specified key ID is not a valid Garage key ID (starts with `GK`, followed by 12 hex-encoded bytes)"); + } + + if secret_key.len() != 64 || hex::decode(&secret_key).is_err() { + return Err("The specified secret key is not a valid Garage secret key (composed of 32 hex-encoded bytes)"); + } + + Ok(Self { key_id: key_id.to_string(), state: crdt::Deletable::present(KeyParams::new(secret_key, name)), - } + }) } /// Create a new Key which can me merged to mark an existing key deleted diff --git a/src/model/migrate.rs b/src/model/migrate.rs index 6b4c3eed..4c74b43b 100644 --- a/src/model/migrate.rs +++ b/src/model/migrate.rs @@ -78,6 +78,7 @@ impl Migrate { local_aliases: LwwMap::new(), website_config: Lww::new(website), cors_config: Lww::new(None), + lifecycle_config: Lww::new(None), quotas: Lww::new(Default::default()), }), }) diff --git a/src/model/s3/lifecycle_worker.rs b/src/model/s3/lifecycle_worker.rs new file mode 100644 index 00000000..50d4283f --- /dev/null +++ b/src/model/s3/lifecycle_worker.rs @@ -0,0 +1,410 @@ +use std::sync::Arc; + +use async_trait::async_trait; +use chrono::prelude::*; +use std::time::{Duration, Instant}; +use tokio::sync::watch; + +use garage_util::background::*; +use garage_util::data::*; +use garage_util::error::Error; +use garage_util::persister::PersisterShared; +use garage_util::time::*; + +use garage_table::EmptyKey; + +use crate::bucket_table::*; +use crate::s3::object_table::*; + +use crate::garage::Garage; + +mod v090 { + use serde::{Deserialize, Serialize}; + + #[derive(Serialize, Deserialize, Default, Clone)] + pub struct LifecycleWorkerPersisted { + pub last_completed: Option<String>, + } + + impl garage_util::migrate::InitialFormat for LifecycleWorkerPersisted { + const VERSION_MARKER: &'static [u8] = b"G09lwp"; + } +} + +pub use v090::*; + +pub struct LifecycleWorker { + garage: Arc<Garage>, + + state: State, + + persister: PersisterShared<LifecycleWorkerPersisted>, +} + +enum State { + Completed(NaiveDate), + Running { + date: NaiveDate, + pos: Vec<u8>, + counter: usize, + objects_expired: usize, + mpu_aborted: usize, + last_bucket: Option<Bucket>, + }, +} + +#[derive(Clone, Copy, Eq, PartialEq)] +enum Skip { + SkipBucket, + NextObject, +} + +pub fn register_bg_vars( + persister: &PersisterShared<LifecycleWorkerPersisted>, + vars: &mut vars::BgVars, +) { + vars.register_ro(persister, "lifecycle-last-completed", |p| { + p.get_with(|x| x.last_completed.clone().unwrap_or("never".to_string())) + }); +} + +impl LifecycleWorker { + pub fn new(garage: Arc<Garage>, persister: PersisterShared<LifecycleWorkerPersisted>) -> Self { + let today = today(); + let last_completed = persister.get_with(|x| { + x.last_completed + .as_deref() + .and_then(|x| x.parse::<NaiveDate>().ok()) + }); + let state = match last_completed { + Some(d) if d >= today => State::Completed(d), + _ => State::start(today), + }; + Self { + garage, + state, + persister, + } + } +} + +impl State { + fn start(date: NaiveDate) -> Self { + info!("Starting lifecycle worker for {}", date); + State::Running { + date, + pos: vec![], + counter: 0, + objects_expired: 0, + mpu_aborted: 0, + last_bucket: None, + } + } +} + +#[async_trait] +impl Worker for LifecycleWorker { + fn name(&self) -> String { + "object lifecycle worker".to_string() + } + + fn status(&self) -> WorkerStatus { + match &self.state { + State::Completed(d) => WorkerStatus { + freeform: vec![format!("Last completed: {}", d)], + ..Default::default() + }, + State::Running { + date, + counter, + objects_expired, + mpu_aborted, + .. + } => { + let n_objects = self + .garage + .object_table + .data + .store + .fast_len() + .unwrap_or(None); + let progress = match n_objects { + None => "...".to_string(), + Some(total) => format!( + "~{:.2}%", + 100. * std::cmp::min(*counter, total) as f32 / total as f32 + ), + }; + WorkerStatus { + progress: Some(progress), + freeform: vec![ + format!("Started: {}", date), + format!("Objects expired: {}", objects_expired), + format!("Multipart uploads aborted: { }", mpu_aborted), + ], + ..Default::default() + } + } + } + } + + async fn work(&mut self, _must_exit: &mut watch::Receiver<bool>) -> Result<WorkerState, Error> { + match &mut self.state { + State::Completed(_) => Ok(WorkerState::Idle), + State::Running { + date, + counter, + objects_expired, + mpu_aborted, + pos, + last_bucket, + } => { + // Process a batch of 100 items before yielding to bg task scheduler + for _ in 0..100 { + let (object_bytes, next_pos) = match self + .garage + .object_table + .data + .store + .get_gt(&pos)? + { + None => { + info!("Lifecycle worker finished for {}, objects expired: {}, mpu aborted: {}", date, *objects_expired, *mpu_aborted); + self.persister + .set_with(|x| x.last_completed = Some(date.to_string()))?; + self.state = State::Completed(*date); + return Ok(WorkerState::Idle); + } + Some((k, v)) => (v, k), + }; + + let object = self.garage.object_table.data.decode_entry(&object_bytes)?; + let skip = process_object( + &self.garage, + *date, + &object, + objects_expired, + mpu_aborted, + last_bucket, + ) + .await?; + + *counter += 1; + if skip == Skip::SkipBucket { + let bucket_id_len = object.bucket_id.as_slice().len(); + assert_eq!( + next_pos.get(..bucket_id_len), + Some(object.bucket_id.as_slice()) + ); + let last_bucket_pos = [&next_pos[..bucket_id_len], &[0xFFu8][..]].concat(); + *pos = std::cmp::max(next_pos, last_bucket_pos); + } else { + *pos = next_pos; + } + } + + Ok(WorkerState::Busy) + } + } + } + + async fn wait_for_work(&mut self) -> WorkerState { + match &self.state { + State::Completed(d) => { + let next_day = d.succ_opt().expect("no next day"); + let next_start = midnight_ts(next_day); + loop { + let now = now_msec(); + if now < next_start { + tokio::time::sleep_until( + (Instant::now() + Duration::from_millis(next_start - now)).into(), + ) + .await; + } else { + break; + } + } + self.state = State::start(std::cmp::max(next_day, today())); + } + State::Running { .. } => (), + } + WorkerState::Busy + } +} + +async fn process_object( + garage: &Arc<Garage>, + now_date: NaiveDate, + object: &Object, + objects_expired: &mut usize, + mpu_aborted: &mut usize, + last_bucket: &mut Option<Bucket>, +) -> Result<Skip, Error> { + if !object + .versions() + .iter() + .any(|x| x.is_data() || x.is_uploading(None)) + { + return Ok(Skip::NextObject); + } + + let bucket = match last_bucket.take() { + Some(b) if b.id == object.bucket_id => b, + _ => { + match garage + .bucket_table + .get(&EmptyKey, &object.bucket_id) + .await? + { + Some(b) => b, + None => { + warn!( + "Lifecycle worker: object in non-existent bucket {:?}", + object.bucket_id + ); + return Ok(Skip::SkipBucket); + } + } + } + }; + + let lifecycle_policy: &[LifecycleRule] = bucket + .state + .as_option() + .and_then(|s| s.lifecycle_config.get().as_deref()) + .unwrap_or_default(); + + if lifecycle_policy.iter().all(|x| !x.enabled) { + return Ok(Skip::SkipBucket); + } + + let db = garage.object_table.data.store.db(); + + for rule in lifecycle_policy.iter() { + if !rule.enabled { + continue; + } + + if let Some(pfx) = &rule.filter.prefix { + if !object.key.starts_with(pfx) { + continue; + } + } + + if let Some(expire) = &rule.expiration { + if let Some(current_version) = object.versions().iter().rev().find(|v| v.is_data()) { + let version_date = next_date(current_version.timestamp); + + let current_version_data = match ¤t_version.state { + ObjectVersionState::Complete(c) => c, + _ => unreachable!(), + }; + + let size_match = check_size_filter(current_version_data, &rule.filter); + let date_match = match expire { + LifecycleExpiration::AfterDays(n_days) => { + (now_date - version_date) >= chrono::Duration::days(*n_days as i64) + } + LifecycleExpiration::AtDate(exp_date) => { + if let Ok(exp_date) = parse_lifecycle_date(exp_date) { + now_date >= exp_date + } else { + warn!("Invalid expiration date stored in bucket {:?} lifecycle config: {}", bucket.id, exp_date); + false + } + } + }; + + if size_match && date_match { + // Delete expired version + let deleted_object = Object::new( + object.bucket_id, + object.key.clone(), + vec![ObjectVersion { + uuid: gen_uuid(), + timestamp: std::cmp::max(now_msec(), current_version.timestamp + 1), + state: ObjectVersionState::Complete(ObjectVersionData::DeleteMarker), + }], + ); + info!( + "Lifecycle: expiring 1 object in bucket {:?}", + object.bucket_id + ); + db.transaction(|tx| garage.object_table.queue_insert(tx, &deleted_object))?; + *objects_expired += 1; + } + } + } + + if let Some(abort_mpu_days) = &rule.abort_incomplete_mpu_days { + let aborted_versions = object + .versions() + .iter() + .filter_map(|v| { + let version_date = next_date(v.timestamp); + if (now_date - version_date) >= chrono::Duration::days(*abort_mpu_days as i64) + && matches!(&v.state, ObjectVersionState::Uploading { .. }) + { + Some(ObjectVersion { + state: ObjectVersionState::Aborted, + ..*v + }) + } else { + None + } + }) + .collect::<Vec<_>>(); + if !aborted_versions.is_empty() { + // Insert aborted mpu info + let n_aborted = aborted_versions.len(); + info!( + "Lifecycle: aborting {} incomplete upload(s) in bucket {:?}", + n_aborted, object.bucket_id + ); + let aborted_object = + Object::new(object.bucket_id, object.key.clone(), aborted_versions); + db.transaction(|tx| garage.object_table.queue_insert(tx, &aborted_object))?; + *mpu_aborted += n_aborted; + } + } + } + + *last_bucket = Some(bucket); + Ok(Skip::NextObject) +} + +fn check_size_filter(version_data: &ObjectVersionData, filter: &LifecycleFilter) -> bool { + let size = match version_data { + ObjectVersionData::Inline(meta, _) | ObjectVersionData::FirstBlock(meta, _) => meta.size, + _ => unreachable!(), + }; + if let Some(size_gt) = filter.size_gt { + if !(size > size_gt) { + return false; + } + } + if let Some(size_lt) = filter.size_lt { + if !(size < size_lt) { + return false; + } + } + true +} + +fn midnight_ts(date: NaiveDate) -> u64 { + date.and_hms_opt(0, 0, 0) + .expect("midnight does not exist") + .timestamp_millis() as u64 +} + +fn next_date(ts: u64) -> NaiveDate { + NaiveDateTime::from_timestamp_millis(ts as i64) + .expect("bad timestamp") + .date() + .succ_opt() + .expect("no next day") +} + +fn today() -> NaiveDate { + Utc::now().naive_utc().date() +} diff --git a/src/model/s3/mod.rs b/src/model/s3/mod.rs index 4e94337d..5c776fb0 100644 --- a/src/model/s3/mod.rs +++ b/src/model/s3/mod.rs @@ -1,3 +1,6 @@ pub mod block_ref_table; +pub mod mpu_table; pub mod object_table; pub mod version_table; + +pub mod lifecycle_worker; diff --git a/src/model/s3/mpu_table.rs b/src/model/s3/mpu_table.rs new file mode 100644 index 00000000..238cbf11 --- /dev/null +++ b/src/model/s3/mpu_table.rs @@ -0,0 +1,254 @@ +use std::sync::Arc; + +use garage_db as db; + +use garage_util::crdt::Crdt; +use garage_util::data::*; +use garage_util::time::*; + +use garage_table::replication::TableShardedReplication; +use garage_table::*; + +use crate::index_counter::*; +use crate::s3::version_table::*; + +pub const UPLOADS: &str = "uploads"; +pub const PARTS: &str = "parts"; +pub const BYTES: &str = "bytes"; + +mod v09 { + use garage_util::crdt; + use garage_util::data::Uuid; + use serde::{Deserialize, Serialize}; + + /// A part of a multipart upload + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub struct MultipartUpload { + /// Partition key = Upload id = UUID of the object version + pub upload_id: Uuid, + + /// The timestamp at which the multipart upload was created + pub timestamp: u64, + /// Is this multipart upload deleted + /// The MultipartUpload is marked as deleted as soon as the + /// multipart upload is either completed or aborted + pub deleted: crdt::Bool, + /// List of uploaded parts, key = (part number, timestamp) + /// In case of retries, all versions for each part are kept + /// Everything is cleaned up only once the MultipartUpload is marked deleted + pub parts: crdt::Map<MpuPartKey, MpuPart>, + + // Back link to bucket+key so that we can find the object this mpu + // belongs to and check whether it is still valid + /// Bucket in which the related object is stored + pub bucket_id: Uuid, + /// Key in which the related object is stored + pub key: String, + } + + #[derive(PartialEq, Eq, Clone, Copy, Debug, Serialize, Deserialize)] + pub struct MpuPartKey { + /// Number of the part + pub part_number: u64, + /// Timestamp of part upload + pub timestamp: u64, + } + + /// The version of an uploaded part + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub struct MpuPart { + /// Links to a Version in VersionTable + pub version: Uuid, + /// ETag of the content of this part (known only once done uploading) + pub etag: Option<String>, + /// Size of this part (known only once done uploading) + pub size: Option<u64>, + } + + impl garage_util::migrate::InitialFormat for MultipartUpload { + const VERSION_MARKER: &'static [u8] = b"G09s3mpu"; + } +} + +pub use v09::*; + +impl Ord for MpuPartKey { + fn cmp(&self, other: &Self) -> std::cmp::Ordering { + self.part_number + .cmp(&other.part_number) + .then(self.timestamp.cmp(&other.timestamp)) + } +} + +impl PartialOrd for MpuPartKey { + fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { + Some(self.cmp(other)) + } +} + +impl MultipartUpload { + pub fn new( + upload_id: Uuid, + timestamp: u64, + bucket_id: Uuid, + key: String, + deleted: bool, + ) -> Self { + Self { + upload_id, + timestamp, + deleted: crdt::Bool::new(deleted), + parts: crdt::Map::new(), + bucket_id, + key, + } + } + + pub fn next_timestamp(&self, part_number: u64) -> u64 { + std::cmp::max( + now_msec(), + 1 + self + .parts + .items() + .iter() + .filter(|(x, _)| x.part_number == part_number) + .map(|(x, _)| x.timestamp) + .max() + .unwrap_or(0), + ) + } +} + +impl Entry<Uuid, EmptyKey> for MultipartUpload { + fn partition_key(&self) -> &Uuid { + &self.upload_id + } + fn sort_key(&self) -> &EmptyKey { + &EmptyKey + } + fn is_tombstone(&self) -> bool { + self.deleted.get() + } +} + +impl Crdt for MultipartUpload { + fn merge(&mut self, other: &Self) { + self.deleted.merge(&other.deleted); + + if self.deleted.get() { + self.parts.clear(); + } else { + self.parts.merge(&other.parts); + } + } +} + +impl Crdt for MpuPart { + fn merge(&mut self, other: &Self) { + self.etag = match (self.etag.take(), &other.etag) { + (None, Some(_)) => other.etag.clone(), + (Some(x), Some(y)) if x < *y => other.etag.clone(), + (x, _) => x, + }; + self.size = match (self.size, other.size) { + (None, Some(_)) => other.size, + (Some(x), Some(y)) if x < y => other.size, + (x, _) => x, + }; + } +} + +pub struct MultipartUploadTable { + pub version_table: Arc<Table<VersionTable, TableShardedReplication>>, + pub mpu_counter_table: Arc<IndexCounter<MultipartUpload>>, +} + +impl TableSchema for MultipartUploadTable { + const TABLE_NAME: &'static str = "multipart_upload"; + + type P = Uuid; + type S = EmptyKey; + type E = MultipartUpload; + type Filter = DeletedFilter; + + fn updated( + &self, + tx: &mut db::Transaction, + old: Option<&Self::E>, + new: Option<&Self::E>, + ) -> db::TxOpResult<()> { + // 1. Count + let counter_res = self.mpu_counter_table.count(tx, old, new); + if let Err(e) = db::unabort(counter_res)? { + error!( + "Unable to update multipart object part counter: {}. Index values will be wrong!", + e + ); + } + + // 2. Propagate deletions to version table + if let (Some(old_mpu), Some(new_mpu)) = (old, new) { + if new_mpu.deleted.get() && !old_mpu.deleted.get() { + let deleted_versions = old_mpu.parts.items().iter().map(|(_k, p)| { + Version::new( + p.version, + VersionBacklink::MultipartUpload { + upload_id: old_mpu.upload_id, + }, + true, + ) + }); + for version in deleted_versions { + let res = self.version_table.queue_insert(tx, &version); + if let Err(e) = db::unabort(res)? { + error!("Unable to enqueue version deletion propagation: {}. A repair will be needed.", e); + } + } + } + } + + Ok(()) + } + + fn matches_filter(entry: &Self::E, filter: &Self::Filter) -> bool { + filter.apply(entry.is_tombstone()) + } +} + +impl CountedItem for MultipartUpload { + const COUNTER_TABLE_NAME: &'static str = "bucket_mpu_counter"; + + // Partition key = bucket id + type CP = Uuid; + // Sort key = nothing + type CS = EmptyKey; + + fn counter_partition_key(&self) -> &Uuid { + &self.bucket_id + } + fn counter_sort_key(&self) -> &EmptyKey { + &EmptyKey + } + + fn counts(&self) -> Vec<(&'static str, i64)> { + let uploads = if self.deleted.get() { 0 } else { 1 }; + let mut parts = self + .parts + .items() + .iter() + .map(|(k, _)| k.part_number) + .collect::<Vec<_>>(); + parts.dedup(); + let bytes = self + .parts + .items() + .iter() + .map(|(_, p)| p.size.unwrap_or(0)) + .sum::<u64>(); + vec![ + (UPLOADS, uploads), + (PARTS, parts.len() as i64), + (BYTES, bytes as i64), + ] + } +} diff --git a/src/model/s3/object_table.rs b/src/model/s3/object_table.rs index 518acc95..ebea04bd 100644 --- a/src/model/s3/object_table.rs +++ b/src/model/s3/object_table.rs @@ -10,6 +10,7 @@ use garage_table::replication::TableShardedReplication; use garage_table::*; use crate::index_counter::*; +use crate::s3::mpu_table::*; use crate::s3::version_table::*; pub const OBJECTS: &str = "objects"; @@ -130,7 +131,86 @@ mod v08 { } } -pub use v08::*; +mod v09 { + use garage_util::data::Uuid; + use serde::{Deserialize, Serialize}; + + use super::v08; + + pub use v08::{ObjectVersionData, ObjectVersionHeaders, ObjectVersionMeta}; + + /// An object + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub struct Object { + /// The bucket in which the object is stored, used as partition key + pub bucket_id: Uuid, + + /// The key at which the object is stored in its bucket, used as sorting key + pub key: String, + + /// The list of currenty stored versions of the object + pub(super) versions: Vec<ObjectVersion>, + } + + /// Informations about a version of an object + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub struct ObjectVersion { + /// Id of the version + pub uuid: Uuid, + /// Timestamp of when the object was created + pub timestamp: u64, + /// State of the version + pub state: ObjectVersionState, + } + + /// State of an object version + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub enum ObjectVersionState { + /// The version is being received + Uploading { + /// Indicates whether this is a multipart upload + multipart: bool, + /// Headers to be included in the final object + headers: ObjectVersionHeaders, + }, + /// The version is fully received + Complete(ObjectVersionData), + /// The version uploaded containded errors or the upload was explicitly aborted + Aborted, + } + + impl garage_util::migrate::Migrate for Object { + const VERSION_MARKER: &'static [u8] = b"G09s3o"; + + type Previous = v08::Object; + + fn migrate(old: v08::Object) -> Object { + let versions = old + .versions + .into_iter() + .map(|x| ObjectVersion { + uuid: x.uuid, + timestamp: x.timestamp, + state: match x.state { + v08::ObjectVersionState::Uploading(h) => ObjectVersionState::Uploading { + multipart: false, + headers: h, + }, + v08::ObjectVersionState::Complete(d) => ObjectVersionState::Complete(d), + v08::ObjectVersionState::Aborted => ObjectVersionState::Aborted, + }, + }) + .collect(); + Object { + bucket_id: old.bucket_id, + key: old.key, + versions, + } + } + } +} + +pub use v09::*; impl Object { /// Initialize an Object struct from parts @@ -180,11 +260,11 @@ impl Crdt for ObjectVersionState { Complete(a) => { a.merge(b); } - Uploading(_) => { + Uploading { .. } => { *self = Complete(b.clone()); } }, - Uploading(_) => {} + Uploading { .. } => {} } } } @@ -199,8 +279,17 @@ impl ObjectVersion { } /// Is the object version currently being uploaded - pub fn is_uploading(&self) -> bool { - matches!(self.state, ObjectVersionState::Uploading(_)) + /// + /// matches only multipart uploads if check_multipart is Some(true) + /// matches only non-multipart uploads if check_multipart is Some(false) + /// matches both if check_multipart is None + pub fn is_uploading(&self, check_multipart: Option<bool>) -> bool { + match &self.state { + ObjectVersionState::Uploading { multipart, .. } => { + check_multipart.map(|x| x == *multipart).unwrap_or(true) + } + _ => false, + } } /// Is the object version completely received @@ -267,13 +356,20 @@ impl Crdt for Object { pub struct ObjectTable { pub version_table: Arc<Table<VersionTable, TableShardedReplication>>, + pub mpu_table: Arc<Table<MultipartUploadTable, TableShardedReplication>>, pub object_counter_table: Arc<IndexCounter<Object>>, } #[derive(Clone, Copy, Debug, Serialize, Deserialize)] pub enum ObjectFilter { + /// Is the object version available (received and not a tombstone) IsData, - IsUploading, + /// Is the object version currently being uploaded + /// + /// matches only multipart uploads if check_multipart is Some(true) + /// matches only non-multipart uploads if check_multipart is Some(false) + /// matches both if check_multipart is None + IsUploading { check_multipart: Option<bool> }, } impl TableSchema for ObjectTable { @@ -301,21 +397,28 @@ impl TableSchema for ObjectTable { // 2. Enqueue propagation deletions to version table if let (Some(old_v), Some(new_v)) = (old, new) { - // Propagate deletion of old versions for v in old_v.versions.iter() { - let newly_deleted = match new_v + let new_v_id = new_v .versions - .binary_search_by(|nv| nv.cmp_key().cmp(&v.cmp_key())) - { + .binary_search_by(|nv| nv.cmp_key().cmp(&v.cmp_key())); + + // Propagate deletion of old versions to the Version table + let delete_version = match new_v_id { Err(_) => true, Ok(i) => { new_v.versions[i].state == ObjectVersionState::Aborted && v.state != ObjectVersionState::Aborted } }; - if newly_deleted { - let deleted_version = - Version::new(v.uuid, old_v.bucket_id, old_v.key.clone(), true); + if delete_version { + let deleted_version = Version::new( + v.uuid, + VersionBacklink::Object { + bucket_id: old_v.bucket_id, + key: old_v.key.clone(), + }, + true, + ); let res = self.version_table.queue_insert(tx, &deleted_version); if let Err(e) = db::unabort(res)? { error!( @@ -324,6 +427,39 @@ impl TableSchema for ObjectTable { ); } } + + // After abortion or completion of multipart uploads, delete MPU table entry + if matches!( + v.state, + ObjectVersionState::Uploading { + multipart: true, + .. + } + ) { + let delete_mpu = match new_v_id { + Err(_) => true, + Ok(i) => !matches!( + new_v.versions[i].state, + ObjectVersionState::Uploading { .. } + ), + }; + if delete_mpu { + let deleted_mpu = MultipartUpload::new( + v.uuid, + v.timestamp, + old_v.bucket_id, + old_v.key.clone(), + true, + ); + let res = self.mpu_table.queue_insert(tx, &deleted_mpu); + if let Err(e) = db::unabort(res)? { + error!( + "Unable to enqueue multipart upload deletion propagation: {}. A repair will be needed.", + e + ); + } + } + } } } @@ -333,7 +469,10 @@ impl TableSchema for ObjectTable { fn matches_filter(entry: &Self::E, filter: &Self::Filter) -> bool { match filter { ObjectFilter::IsData => entry.versions.iter().any(|v| v.is_data()), - ObjectFilter::IsUploading => entry.versions.iter().any(|v| v.is_uploading()), + ObjectFilter::IsUploading { check_multipart } => entry + .versions + .iter() + .any(|v| v.is_uploading(*check_multipart)), } } } @@ -360,10 +499,7 @@ impl CountedItem for Object { } else { 0 }; - let n_unfinished_uploads = versions - .iter() - .filter(|v| matches!(v.state, ObjectVersionState::Uploading(_))) - .count(); + let n_unfinished_uploads = versions.iter().filter(|v| v.is_uploading(None)).count(); let n_bytes = versions .iter() .map(|v| match &v.state { diff --git a/src/model/s3/version_table.rs b/src/model/s3/version_table.rs index 6edc83f4..5c032f9f 100644 --- a/src/model/s3/version_table.rs +++ b/src/model/s3/version_table.rs @@ -3,6 +3,7 @@ use std::sync::Arc; use garage_db as db; use garage_util::data::*; +use garage_util::error::*; use garage_table::crdt::*; use garage_table::replication::TableShardedReplication; @@ -66,6 +67,8 @@ mod v08 { use super::v05; + pub use v05::{VersionBlock, VersionBlockKey}; + /// A version of an object #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] pub struct Version { @@ -90,8 +93,6 @@ mod v08 { pub key: String, } - pub use v05::{VersionBlock, VersionBlockKey}; - impl garage_util::migrate::Migrate for Version { type Previous = v05::Version; @@ -110,32 +111,94 @@ mod v08 { } } -pub use v08::*; +pub(crate) mod v09 { + use garage_util::crdt; + use garage_util::data::Uuid; + use serde::{Deserialize, Serialize}; + + use super::v08; + + pub use v08::{VersionBlock, VersionBlockKey}; + + /// A version of an object + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub struct Version { + /// UUID of the version, used as partition key + pub uuid: Uuid, + + // Actual data: the blocks for this version + // In the case of a multipart upload, also store the etags + // of individual parts and check them when doing CompleteMultipartUpload + /// Is this version deleted + pub deleted: crdt::Bool, + /// list of blocks of data composing the version + pub blocks: crdt::Map<VersionBlockKey, VersionBlock>, + + // Back link to owner of this version (either an object or a multipart + // upload), used to find whether it has been deleted and this version + // should in turn be deleted (see versions repair procedure) + pub backlink: VersionBacklink, + } + + #[derive(PartialEq, Eq, Clone, Debug, Serialize, Deserialize)] + pub enum VersionBacklink { + Object { + /// Bucket in which the related object is stored + bucket_id: Uuid, + /// Key in which the related object is stored + key: String, + }, + MultipartUpload { + upload_id: Uuid, + }, + } + + impl garage_util::migrate::Migrate for Version { + const VERSION_MARKER: &'static [u8] = b"G09s3v"; + + type Previous = v08::Version; + + fn migrate(old: v08::Version) -> Version { + Version { + uuid: old.uuid, + deleted: old.deleted, + blocks: old.blocks, + backlink: VersionBacklink::Object { + bucket_id: old.bucket_id, + key: old.key, + }, + } + } + } +} + +pub use v09::*; impl Version { - pub fn new(uuid: Uuid, bucket_id: Uuid, key: String, deleted: bool) -> Self { + pub fn new(uuid: Uuid, backlink: VersionBacklink, deleted: bool) -> Self { Self { uuid, deleted: deleted.into(), blocks: crdt::Map::new(), - parts_etags: crdt::Map::new(), - bucket_id, - key, + backlink, } } pub fn has_part_number(&self, part_number: u64) -> bool { - let case1 = self - .parts_etags + self.blocks .items() - .binary_search_by(|(k, _)| k.cmp(&part_number)) - .is_ok(); - let case2 = self + .binary_search_by(|(k, _)| k.part_number.cmp(&part_number)) + .is_ok() + } + + pub fn n_parts(&self) -> Result<u64, Error> { + Ok(self .blocks .items() - .binary_search_by(|(k, _)| k.part_number.cmp(&part_number)) - .is_ok(); - case1 || case2 + .last() + .ok_or_message("version has no parts")? + .0 + .part_number) } } @@ -175,10 +238,8 @@ impl Crdt for Version { if self.deleted.get() { self.blocks.clear(); - self.parts_etags.clear(); } else { self.blocks.merge(&other.blocks); - self.parts_etags.merge(&other.parts_etags); } } } diff --git a/src/rpc/Cargo.toml b/src/rpc/Cargo.toml index f0fde7a7..f450718f 100644 --- a/src/rpc/Cargo.toml +++ b/src/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_rpc" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>"] edition = "2018" license = "AGPL-3.0" @@ -14,16 +14,20 @@ path = "lib.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +format_table.workspace = true +garage_db.workspace = true garage_util.workspace = true arc-swap = "1.0" bytes = "1.0" -gethostname = "0.2" +bytesize = "1.1" +gethostname = "0.4" hex = "0.4" tracing = "0.1" rand = "0.8" +itertools="0.10" sodiumoxide = { version = "0.2.5-0", package = "kuska-sodiumoxide" } -systemstat = "0.2.3" +nix = { version = "0.27", default-features = false, features = ["fs"] } async-trait = "0.1.7" serde = { version = "1.0", default-features = false, features = ["derive", "rc"] } @@ -45,7 +49,7 @@ tokio = { version = "1.0", default-features = false, features = ["rt", "rt-multi tokio-stream = { version = "0.1", features = ["net"] } opentelemetry = "0.17" -netapp = { version = "0.5.2", features = ["telemetry"] } +netapp = { version = "0.10", features = ["telemetry"] } [features] kubernetes-discovery = [ "kube", "k8s-openapi", "schemars" ] diff --git a/src/rpc/graph_algo.rs b/src/rpc/graph_algo.rs new file mode 100644 index 00000000..d8c6c9b9 --- /dev/null +++ b/src/rpc/graph_algo.rs @@ -0,0 +1,415 @@ +//! This module deals with graph algorithms. +//! It is used in layout.rs to build the partition to node assignment. + +use rand::prelude::{SeedableRng, SliceRandom}; +use std::cmp::{max, min}; +use std::collections::HashMap; +use std::collections::VecDeque; + +/// Vertex data structures used in all the graphs used in layout.rs. +/// usize parameters correspond to node/zone/partitions ids. +/// To understand the vertex roles below, please refer to the formal description +/// of the layout computation algorithm. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum Vertex { + Source, + Pup(usize), // The vertex p+ of partition p + Pdown(usize), // The vertex p- of partition p + PZ(usize, usize), // The vertex corresponding to x_(partition p, zone z) + N(usize), // The vertex corresponding to node n + Sink, +} + +/// Edge data structure for the flow algorithm. +#[derive(Clone, Copy, Debug)] +pub struct FlowEdge { + cap: u64, // flow maximal capacity of the edge + flow: i64, // flow value on the edge + dest: usize, // destination vertex id + rev: usize, // index of the reversed edge (v, self) in the edge list of vertex v +} + +/// Edge data structure for the detection of negative cycles. +#[derive(Clone, Copy, Debug)] +pub struct WeightedEdge { + w: i64, // weight of the edge + dest: usize, +} + +pub trait Edge: Clone + Copy {} +impl Edge for FlowEdge {} +impl Edge for WeightedEdge {} + +/// Struct for the graph structure. We do encapsulation here to be able to both +/// provide user friendly Vertex enum to address vertices, and to use internally usize +/// indices and Vec instead of HashMap in the graph algorithm to optimize execution speed. +pub struct Graph<E: Edge> { + vertex_to_id: HashMap<Vertex, usize>, + id_to_vertex: Vec<Vertex>, + + // The graph is stored as an adjacency list + graph: Vec<Vec<E>>, +} + +pub type CostFunction = HashMap<(Vertex, Vertex), i64>; + +impl<E: Edge> Graph<E> { + pub fn new(vertices: &[Vertex]) -> Self { + let mut map = HashMap::<Vertex, usize>::new(); + for (i, vert) in vertices.iter().enumerate() { + map.insert(*vert, i); + } + Graph::<E> { + vertex_to_id: map, + id_to_vertex: vertices.to_vec(), + graph: vec![Vec::<E>::new(); vertices.len()], + } + } + + fn get_vertex_id(&self, v: &Vertex) -> Result<usize, String> { + self.vertex_to_id + .get(v) + .cloned() + .ok_or_else(|| format!("The graph does not contain vertex {:?}", v)) + } +} + +impl Graph<FlowEdge> { + /// This function adds a directed edge to the graph with capacity c, and the + /// corresponding reversed edge with capacity 0. + pub fn add_edge(&mut self, u: Vertex, v: Vertex, c: u64) -> Result<(), String> { + let idu = self.get_vertex_id(&u)?; + let idv = self.get_vertex_id(&v)?; + if idu == idv { + return Err("Cannot add edge from vertex to itself in flow graph".into()); + } + + let rev_u = self.graph[idu].len(); + let rev_v = self.graph[idv].len(); + self.graph[idu].push(FlowEdge { + cap: c, + dest: idv, + flow: 0, + rev: rev_v, + }); + self.graph[idv].push(FlowEdge { + cap: 0, + dest: idu, + flow: 0, + rev: rev_u, + }); + Ok(()) + } + + /// This function returns the list of vertices that receive a positive flow from + /// vertex v. + pub fn get_positive_flow_from(&self, v: Vertex) -> Result<Vec<Vertex>, String> { + let idv = self.get_vertex_id(&v)?; + let mut result = Vec::<Vertex>::new(); + for edge in self.graph[idv].iter() { + if edge.flow > 0 { + result.push(self.id_to_vertex[edge.dest]); + } + } + Ok(result) + } + + /// This function returns the value of the flow incoming to v. + pub fn get_inflow(&self, v: Vertex) -> Result<i64, String> { + let idv = self.get_vertex_id(&v)?; + let mut result = 0; + for edge in self.graph[idv].iter() { + result += max(0, self.graph[edge.dest][edge.rev].flow); + } + Ok(result) + } + + /// This function returns the value of the flow outgoing from v. + pub fn get_outflow(&self, v: Vertex) -> Result<i64, String> { + let idv = self.get_vertex_id(&v)?; + let mut result = 0; + for edge in self.graph[idv].iter() { + result += max(0, edge.flow); + } + Ok(result) + } + + /// This function computes the flow total value by computing the outgoing flow + /// from the source. + pub fn get_flow_value(&mut self) -> Result<i64, String> { + self.get_outflow(Vertex::Source) + } + + /// This function shuffles the order of the edge lists. It keeps the ids of the + /// reversed edges consistent. + fn shuffle_edges(&mut self) { + // We use deterministic randomness so that the layout calculation algorihtm + // will output the same thing every time it is run. This way, the results + // pre-calculated in `garage layout show` will match exactly those used + // in practice with `garage layout apply` + let mut rng = rand::rngs::StdRng::from_seed([0x12u8; 32]); + for i in 0..self.graph.len() { + self.graph[i].shuffle(&mut rng); + // We need to update the ids of the reverse edges. + for j in 0..self.graph[i].len() { + let target_v = self.graph[i][j].dest; + let target_rev = self.graph[i][j].rev; + self.graph[target_v][target_rev].rev = j; + } + } + } + + /// Computes an upper bound of the flow on the graph + pub fn flow_upper_bound(&self) -> Result<u64, String> { + let idsource = self.get_vertex_id(&Vertex::Source)?; + let mut flow_upper_bound = 0; + for edge in self.graph[idsource].iter() { + flow_upper_bound += edge.cap; + } + Ok(flow_upper_bound) + } + + /// This function computes the maximal flow using Dinic's algorithm. It starts with + /// the flow values already present in the graph. So it is possible to add some edge to + /// the graph, compute a flow, add other edges, update the flow. + pub fn compute_maximal_flow(&mut self) -> Result<(), String> { + let idsource = self.get_vertex_id(&Vertex::Source)?; + let idsink = self.get_vertex_id(&Vertex::Sink)?; + + let nb_vertices = self.graph.len(); + + let flow_upper_bound = self.flow_upper_bound()?; + + // To ensure the dispersion of the associations generated by the + // assignment, we shuffle the neighbours of the nodes. Hence, + // the vertices do not consider their neighbours in the same order. + self.shuffle_edges(); + + // We run Dinic's max flow algorithm + loop { + // We build the level array from Dinic's algorithm. + let mut level = vec![None; nb_vertices]; + + let mut fifo = VecDeque::new(); + fifo.push_back((idsource, 0)); + while let Some((id, lvl)) = fifo.pop_front() { + if level[id].is_none() { + // it means id has not yet been reached + level[id] = Some(lvl); + for edge in self.graph[id].iter() { + if edge.cap as i64 - edge.flow > 0 { + fifo.push_back((edge.dest, lvl + 1)); + } + } + } + } + if level[idsink].is_none() { + // There is no residual flow + break; + } + // Now we run DFS respecting the level array + let mut next_nbd = vec![0; nb_vertices]; + let mut lifo = Vec::new(); + + lifo.push((idsource, flow_upper_bound)); + + while let Some((id, f)) = lifo.last().cloned() { + if id == idsink { + // The DFS reached the sink, we can add a + // residual flow. + lifo.pop(); + while let Some((id, _)) = lifo.pop() { + let nbd = next_nbd[id]; + self.graph[id][nbd].flow += f as i64; + let id_rev = self.graph[id][nbd].dest; + let nbd_rev = self.graph[id][nbd].rev; + self.graph[id_rev][nbd_rev].flow -= f as i64; + } + lifo.push((idsource, flow_upper_bound)); + continue; + } + // else we did not reach the sink + let nbd = next_nbd[id]; + if nbd >= self.graph[id].len() { + // There is nothing to explore from id anymore + lifo.pop(); + if let Some((parent, _)) = lifo.last() { + next_nbd[*parent] += 1; + } + continue; + } + // else we can try to send flow from id to its nbd + let new_flow = min( + f as i64, + self.graph[id][nbd].cap as i64 - self.graph[id][nbd].flow, + ) as u64; + if new_flow == 0 { + next_nbd[id] += 1; + continue; + } + if let (Some(lvldest), Some(lvlid)) = (level[self.graph[id][nbd].dest], level[id]) { + if lvldest <= lvlid { + // We cannot send flow to nbd. + next_nbd[id] += 1; + continue; + } + } + // otherwise, we send flow to nbd. + lifo.push((self.graph[id][nbd].dest, new_flow)); + } + } + Ok(()) + } + + /// This function takes a flow, and a cost function on the edges, and tries to find an + /// equivalent flow with a better cost, by finding improving overflow cycles. It uses + /// as subroutine the Bellman Ford algorithm run up to path_length. + /// We assume that the cost of edge (u,v) is the opposite of the cost of (v,u), and + /// only one needs to be present in the cost function. + pub fn optimize_flow_with_cost( + &mut self, + cost: &CostFunction, + path_length: usize, + ) -> Result<(), String> { + // We build the weighted graph g where we will look for negative cycle + let mut gf = self.build_cost_graph(cost)?; + let mut cycles = gf.list_negative_cycles(path_length); + while !cycles.is_empty() { + // we enumerate negative cycles + for c in cycles.iter() { + for i in 0..c.len() { + // We add one flow unit to the edge (u,v) of cycle c + let idu = self.vertex_to_id[&c[i]]; + let idv = self.vertex_to_id[&c[(i + 1) % c.len()]]; + for j in 0..self.graph[idu].len() { + // since idu appears at most once in the cycles, we enumerate every + // edge at most once. + let edge = self.graph[idu][j]; + if edge.dest == idv { + self.graph[idu][j].flow += 1; + self.graph[idv][edge.rev].flow -= 1; + break; + } + } + } + } + + gf = self.build_cost_graph(cost)?; + cycles = gf.list_negative_cycles(path_length); + } + Ok(()) + } + + /// Construct the weighted graph G_f from the flow and the cost function + fn build_cost_graph(&self, cost: &CostFunction) -> Result<Graph<WeightedEdge>, String> { + let mut g = Graph::<WeightedEdge>::new(&self.id_to_vertex); + let nb_vertices = self.id_to_vertex.len(); + for i in 0..nb_vertices { + for edge in self.graph[i].iter() { + if edge.cap as i64 - edge.flow > 0 { + // It is possible to send overflow through this edge + let u = self.id_to_vertex[i]; + let v = self.id_to_vertex[edge.dest]; + if cost.contains_key(&(u, v)) { + g.add_edge(u, v, cost[&(u, v)])?; + } else if cost.contains_key(&(v, u)) { + g.add_edge(u, v, -cost[&(v, u)])?; + } else { + g.add_edge(u, v, 0)?; + } + } + } + } + Ok(g) + } +} + +impl Graph<WeightedEdge> { + /// This function adds a single directed weighted edge to the graph. + pub fn add_edge(&mut self, u: Vertex, v: Vertex, w: i64) -> Result<(), String> { + let idu = self.get_vertex_id(&u)?; + let idv = self.get_vertex_id(&v)?; + self.graph[idu].push(WeightedEdge { w, dest: idv }); + Ok(()) + } + + /// This function lists the negative cycles it manages to find after path_length + /// iterations of the main loop of the Bellman-Ford algorithm. For the classical + /// algorithm, path_length needs to be equal to the number of vertices. However, + /// for particular graph structures like in our case, the algorithm is still correct + /// when path_length is the length of the longest possible simple path. + /// See the formal description of the algorithm for more details. + fn list_negative_cycles(&self, path_length: usize) -> Vec<Vec<Vertex>> { + let nb_vertices = self.graph.len(); + + // We start with every vertex at distance 0 of some imaginary extra -1 vertex. + let mut distance = vec![0; nb_vertices]; + // The prev vector collects for every vertex from where does the shortest path come + let mut prev = vec![None; nb_vertices]; + + for _ in 0..path_length + 1 { + for id in 0..nb_vertices { + for e in self.graph[id].iter() { + if distance[id] + e.w < distance[e.dest] { + distance[e.dest] = distance[id] + e.w; + prev[e.dest] = Some(id); + } + } + } + } + + // If self.graph contains a negative cycle, then at this point the graph described + // by prev (which is a directed 1-forest/functional graph) + // must contain a cycle. We list the cycles of prev. + let cycles_prev = cycles_of_1_forest(&prev); + + // Remark that the cycle in prev is in the reverse order compared to the cycle + // in the graph. Thus the .rev(). + return cycles_prev + .iter() + .map(|cycle| { + cycle + .iter() + .rev() + .map(|id| self.id_to_vertex[*id]) + .collect() + }) + .collect(); + } +} + +/// This function returns the list of cycles of a directed 1 forest. It does not +/// check for the consistency of the input. +fn cycles_of_1_forest(forest: &[Option<usize>]) -> Vec<Vec<usize>> { + let mut cycles = Vec::<Vec<usize>>::new(); + let mut time_of_discovery = vec![None; forest.len()]; + + for t in 0..forest.len() { + let mut id = t; + // while we are on a valid undiscovered node + while time_of_discovery[id].is_none() { + time_of_discovery[id] = Some(t); + if let Some(i) = forest[id] { + id = i; + } else { + break; + } + } + if forest[id].is_some() && time_of_discovery[id] == Some(t) { + // We discovered an id that we explored at this iteration t. + // It means we are on a cycle + let mut cy = vec![id; 1]; + let mut id2 = id; + while let Some(id_next) = forest[id2] { + id2 = id_next; + if id2 != id { + cy.push(id2); + } else { + break; + } + } + cycles.push(cy); + } + } + cycles +} diff --git a/src/rpc/layout.rs b/src/rpc/layout.rs index 1030e3a6..e02a180b 100644 --- a/src/rpc/layout.rs +++ b/src/rpc/layout.rs @@ -1,87 +1,286 @@ use std::cmp::Ordering; -use std::collections::{HashMap, HashSet}; +use std::collections::HashMap; +use std::collections::HashSet; +use std::fmt; -use serde::{Deserialize, Serialize}; +use bytesize::ByteSize; +use itertools::Itertools; -use garage_util::crdt::{AutoCrdt, Crdt, LwwMap}; +use garage_util::crdt::{AutoCrdt, Crdt, Lww, LwwMap}; use garage_util::data::*; use garage_util::encode::nonversioned_encode; use garage_util::error::*; +use crate::graph_algo::*; + use crate::ring::*; -/// The layout of the cluster, i.e. the list of roles -/// which are assigned to each cluster node -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct ClusterLayout { - pub version: u64, - - pub replication_factor: usize, - pub roles: LwwMap<Uuid, NodeRoleV>, - - /// node_id_vec: a vector of node IDs with a role assigned - /// in the system (this includes gateway nodes). - /// The order here is different than the vec stored by `roles`, because: - /// 1. non-gateway nodes are first so that they have lower numbers - /// 2. nodes that don't have a role are excluded (but they need to - /// stay in the CRDT as tombstones) - pub node_id_vec: Vec<Uuid>, - /// the assignation of data partitions to node, the values - /// are indices in node_id_vec - #[serde(with = "serde_bytes")] - pub ring_assignation_data: Vec<CompactNodeType>, - - /// Role changes which are staged for the next version of the layout - pub staging: LwwMap<Uuid, NodeRoleV>, - pub staging_hash: Hash, +use std::convert::TryInto; + +const NB_PARTITIONS: usize = 1usize << PARTITION_BITS; + +// The Message type will be used to collect information on the algorithm. +type Message = Vec<String>; + +mod v08 { + use crate::ring::CompactNodeType; + use garage_util::crdt::LwwMap; + use garage_util::data::{Hash, Uuid}; + use serde::{Deserialize, Serialize}; + + /// The layout of the cluster, i.e. the list of roles + /// which are assigned to each cluster node + #[derive(Clone, Debug, Serialize, Deserialize)] + pub struct ClusterLayout { + pub version: u64, + + pub replication_factor: usize, + pub roles: LwwMap<Uuid, NodeRoleV>, + + /// node_id_vec: a vector of node IDs with a role assigned + /// in the system (this includes gateway nodes). + /// The order here is different than the vec stored by `roles`, because: + /// 1. non-gateway nodes are first so that they have lower numbers + /// 2. nodes that don't have a role are excluded (but they need to + /// stay in the CRDT as tombstones) + pub node_id_vec: Vec<Uuid>, + /// the assignation of data partitions to node, the values + /// are indices in node_id_vec + #[serde(with = "serde_bytes")] + pub ring_assignation_data: Vec<CompactNodeType>, + + /// Role changes which are staged for the next version of the layout + pub staging: LwwMap<Uuid, NodeRoleV>, + pub staging_hash: Hash, + } + + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] + pub struct NodeRoleV(pub Option<NodeRole>); + + /// The user-assigned roles of cluster nodes + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] + pub struct NodeRole { + /// Datacenter at which this entry belong. This information is used to + /// perform a better geodistribution + pub zone: String, + /// The capacity of the node + /// If this is set to None, the node does not participate in storing data for the system + /// and is only active as an API gateway to other nodes + pub capacity: Option<u64>, + /// A set of tags to recognize the node + pub tags: Vec<String>, + } + + impl garage_util::migrate::InitialFormat for ClusterLayout {} } -impl garage_util::migrate::InitialFormat for ClusterLayout {} +mod v09 { + use super::v08; + use crate::ring::CompactNodeType; + use garage_util::crdt::{Lww, LwwMap}; + use garage_util::data::{Hash, Uuid}; + use serde::{Deserialize, Serialize}; + pub use v08::{NodeRole, NodeRoleV}; + + /// The layout of the cluster, i.e. the list of roles + /// which are assigned to each cluster node + #[derive(Clone, Debug, Serialize, Deserialize)] + pub struct ClusterLayout { + pub version: u64, + + pub replication_factor: usize, + + /// This attribute is only used to retain the previously computed partition size, + /// to know to what extent does it change with the layout update. + pub partition_size: u64, + /// Parameters used to compute the assignment currently given by + /// ring_assignment_data + pub parameters: LayoutParameters, + + pub roles: LwwMap<Uuid, NodeRoleV>, + + /// see comment in v08::ClusterLayout + pub node_id_vec: Vec<Uuid>, + /// see comment in v08::ClusterLayout + #[serde(with = "serde_bytes")] + pub ring_assignment_data: Vec<CompactNodeType>, + + /// Parameters to be used in the next partition assignment computation. + pub staging_parameters: Lww<LayoutParameters>, + /// Role changes which are staged for the next version of the layout + pub staging_roles: LwwMap<Uuid, NodeRoleV>, + pub staging_hash: Hash, + } + + /// This struct is used to set the parameters to be used in the assignment computation + /// algorithm. It is stored as a Crdt. + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] + pub struct LayoutParameters { + pub zone_redundancy: ZoneRedundancy, + } -#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] -pub struct NodeRoleV(pub Option<NodeRole>); + /// Zone redundancy: if set to AtLeast(x), the layout calculation will aim to store copies + /// of each partition on at least that number of different zones. + /// Otherwise, copies will be stored on the maximum possible number of zones. + #[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug, Serialize, Deserialize)] + pub enum ZoneRedundancy { + AtLeast(usize), + Maximum, + } -impl AutoCrdt for NodeRoleV { + impl garage_util::migrate::Migrate for ClusterLayout { + const VERSION_MARKER: &'static [u8] = b"G09layout"; + + type Previous = v08::ClusterLayout; + + fn migrate(previous: Self::Previous) -> Self { + use itertools::Itertools; + + // In the old layout, capacities are in an arbitrary unit, + // but in the new layout they are in bytes. + // Here we arbitrarily multiply everything by 1G, + // such that 1 old capacity unit = 1GB in the new units. + // This is totally arbitrary and won't work for most users. + let cap_mul = 1024 * 1024 * 1024; + let roles = multiply_all_capacities(previous.roles, cap_mul); + let staging_roles = multiply_all_capacities(previous.staging, cap_mul); + let node_id_vec = previous.node_id_vec; + + // Determine partition size + let mut tmp = previous.ring_assignation_data.clone(); + tmp.sort(); + let partition_size = tmp + .into_iter() + .dedup_with_count() + .map(|(npart, node)| { + roles + .get(&node_id_vec[node as usize]) + .and_then(|p| p.0.as_ref().and_then(|r| r.capacity)) + .unwrap_or(0) / npart as u64 + }) + .min() + .unwrap_or(0); + + // By default, zone_redundancy is maximum possible value + let parameters = LayoutParameters { + zone_redundancy: ZoneRedundancy::Maximum, + }; + + let mut res = Self { + version: previous.version, + replication_factor: previous.replication_factor, + partition_size, + parameters, + roles, + node_id_vec, + ring_assignment_data: previous.ring_assignation_data, + staging_parameters: Lww::new(parameters), + staging_roles, + staging_hash: [0u8; 32].into(), + }; + res.staging_hash = res.calculate_staging_hash(); + res + } + } + + fn multiply_all_capacities( + old_roles: LwwMap<Uuid, NodeRoleV>, + mul: u64, + ) -> LwwMap<Uuid, NodeRoleV> { + let mut new_roles = LwwMap::new(); + for (node, ts, role) in old_roles.items() { + let mut role = role.clone(); + if let NodeRoleV(Some(NodeRole { + capacity: Some(ref mut cap), + .. + })) = role + { + *cap *= mul; + } + new_roles.merge_raw(node, *ts, &role); + } + new_roles + } +} + +pub use v09::*; + +impl AutoCrdt for LayoutParameters { const WARN_IF_DIFFERENT: bool = true; } -/// The user-assigned roles of cluster nodes -#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug, Serialize, Deserialize)] -pub struct NodeRole { - /// Datacenter at which this entry belong. This information might be used to perform a better - /// geodistribution - pub zone: String, - /// The (relative) capacity of the node - /// If this is set to None, the node does not participate in storing data for the system - /// and is only active as an API gateway to other nodes - pub capacity: Option<u32>, - /// A set of tags to recognize the node - pub tags: Vec<String>, +impl AutoCrdt for NodeRoleV { + const WARN_IF_DIFFERENT: bool = true; } impl NodeRole { pub fn capacity_string(&self) -> String { match self.capacity { - Some(c) => format!("{}", c), + Some(c) => ByteSize::b(c).to_string_as(false), None => "gateway".to_string(), } } + + pub fn tags_string(&self) -> String { + self.tags.join(",") + } } +impl fmt::Display for ZoneRedundancy { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + ZoneRedundancy::Maximum => write!(f, "maximum"), + ZoneRedundancy::AtLeast(x) => write!(f, "{}", x), + } + } +} + +impl core::str::FromStr for ZoneRedundancy { + type Err = &'static str; + fn from_str(s: &str) -> Result<Self, Self::Err> { + match s { + "none" | "max" | "maximum" => Ok(ZoneRedundancy::Maximum), + x => { + let v = x + .parse::<usize>() + .map_err(|_| "zone redundancy must be 'none'/'max' or an integer")?; + Ok(ZoneRedundancy::AtLeast(v)) + } + } + } +} + +// Implementation of the ClusterLayout methods unrelated to the assignment algorithm. impl ClusterLayout { pub fn new(replication_factor: usize) -> Self { + // We set the default zone redundancy to be Maximum, meaning that the maximum + // possible value will be used depending on the cluster topology + let parameters = LayoutParameters { + zone_redundancy: ZoneRedundancy::Maximum, + }; + let staging_parameters = Lww::<LayoutParameters>::new(parameters); + let empty_lwwmap = LwwMap::new(); - let empty_lwwmap_hash = blake2sum(&nonversioned_encode(&empty_lwwmap).unwrap()[..]); - ClusterLayout { + let mut ret = ClusterLayout { version: 0, replication_factor, + partition_size: 0, roles: LwwMap::new(), node_id_vec: Vec::new(), - ring_assignation_data: Vec::new(), - staging: empty_lwwmap, - staging_hash: empty_lwwmap_hash, - } + ring_assignment_data: Vec::new(), + parameters, + staging_parameters, + staging_roles: empty_lwwmap, + staging_hash: [0u8; 32].into(), + }; + ret.staging_hash = ret.calculate_staging_hash(); + ret + } + + fn calculate_staging_hash(&self) -> Hash { + let hashed_tuple = (&self.staging_roles, &self.staging_parameters); + blake2sum(&nonversioned_encode(&hashed_tuple).unwrap()[..]) } pub fn merge(&mut self, other: &ClusterLayout) -> bool { @@ -91,9 +290,10 @@ impl ClusterLayout { true } Ordering::Equal => { - self.staging.merge(&other.staging); + self.staging_parameters.merge(&other.staging_parameters); + self.staging_roles.merge(&other.staging_roles); - let new_staging_hash = blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]); + let new_staging_hash = self.calculate_staging_hash(); let changed = new_staging_hash != self.staging_hash; self.staging_hash = new_staging_hash; @@ -104,7 +304,7 @@ impl ClusterLayout { } } - pub fn apply_staged_changes(mut self, version: Option<u64>) -> Result<Self, Error> { + pub fn apply_staged_changes(mut self, version: Option<u64>) -> Result<(Self, Message), Error> { match version { None => { let error = r#" @@ -120,19 +320,18 @@ To know the correct value of the new layout version, invoke `garage layout show` } } - self.roles.merge(&self.staging); + self.roles.merge(&self.staging_roles); self.roles.retain(|(_, _, v)| v.0.is_some()); + self.parameters = *self.staging_parameters.get(); - if !self.calculate_partition_assignation() { - return Err(Error::Message("Could not calculate new assignation of partitions to nodes. This can happen if there are less nodes than the desired number of copies of your data (see the replication_mode configuration parameter).".into())); - } + self.staging_roles.clear(); + self.staging_hash = self.calculate_staging_hash(); - self.staging.clear(); - self.staging_hash = blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]); + let msg = self.calculate_partition_assignment()?; self.version += 1; - Ok(self) + Ok((self, msg)) } pub fn revert_staged_changes(mut self, version: Option<u64>) -> Result<Self, Error> { @@ -151,8 +350,9 @@ To know the correct value of the new layout version, invoke `garage layout show` } } - self.staging.clear(); - self.staging_hash = blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]); + self.staging_roles.clear(); + self.staging_parameters.update(self.parameters); + self.staging_hash = self.calculate_staging_hash(); self.version += 1; @@ -177,13 +377,98 @@ To know the correct value of the new layout version, invoke `garage layout show` } } + /// Returns the uuids of the non_gateway nodes in self.node_id_vec. + fn nongateway_nodes(&self) -> Vec<Uuid> { + let mut result = Vec::<Uuid>::new(); + for uuid in self.node_id_vec.iter() { + match self.node_role(uuid) { + Some(role) if role.capacity.is_some() => result.push(*uuid), + _ => (), + } + } + result + } + + /// Given a node uuids, this function returns the label of its zone + fn get_node_zone(&self, uuid: &Uuid) -> Result<String, Error> { + match self.node_role(uuid) { + Some(role) => Ok(role.zone.clone()), + _ => Err(Error::Message( + "The Uuid does not correspond to a node present in the cluster.".into(), + )), + } + } + + /// Given a node uuids, this function returns its capacity or fails if it does not have any + pub fn get_node_capacity(&self, uuid: &Uuid) -> Result<u64, Error> { + match self.node_role(uuid) { + Some(NodeRole { + capacity: Some(cap), + zone: _, + tags: _, + }) => Ok(*cap), + _ => Err(Error::Message( + "The Uuid does not correspond to a node present in the \ + cluster or this node does not have a positive capacity." + .into(), + )), + } + } + + /// Returns the number of partitions associated to this node in the ring + pub fn get_node_usage(&self, uuid: &Uuid) -> Result<usize, Error> { + for (i, id) in self.node_id_vec.iter().enumerate() { + if id == uuid { + let mut count = 0; + for nod in self.ring_assignment_data.iter() { + if i as u8 == *nod { + count += 1 + } + } + return Ok(count); + } + } + Err(Error::Message( + "The Uuid does not correspond to a node present in the \ + cluster or this node does not have a positive capacity." + .into(), + )) + } + + /// Returns the sum of capacities of non gateway nodes in the cluster + fn get_total_capacity(&self) -> Result<u64, Error> { + let mut total_capacity = 0; + for uuid in self.nongateway_nodes().iter() { + total_capacity += self.get_node_capacity(uuid)?; + } + Ok(total_capacity) + } + + /// Returns the effective value of the zone_redundancy parameter + fn effective_zone_redundancy(&self) -> usize { + match self.parameters.zone_redundancy { + ZoneRedundancy::AtLeast(v) => v, + ZoneRedundancy::Maximum => { + let n_zones = self + .roles + .items() + .iter() + .filter_map(|(_, _, role)| role.0.as_ref().map(|x| x.zone.as_str())) + .collect::<HashSet<&str>>() + .len(); + std::cmp::min(n_zones, self.replication_factor) + } + } + } + /// Check a cluster layout for internal consistency + /// (assignment, roles, parameters, partition size) /// returns true if consistent, false if error - pub fn check(&self) -> bool { + pub fn check(&self) -> Result<(), String> { // Check that the hash of the staging data is correct - let staging_hash = blake2sum(&nonversioned_encode(&self.staging).unwrap()[..]); + let staging_hash = self.calculate_staging_hash(); if staging_hash != self.staging_hash { - return false; + return Err("staging_hash is incorrect".into()); } // Check that node_id_vec contains the correct list of nodes @@ -198,472 +483,811 @@ To know the correct value of the new layout version, invoke `garage layout show` let mut node_id_vec = self.node_id_vec.clone(); node_id_vec.sort(); if expected_nodes != node_id_vec { - return false; + return Err(format!("node_id_vec does not contain the correct set of nodes\nnode_id_vec: {:?}\nexpected: {:?}", node_id_vec, expected_nodes)); } - // Check that the assignation data has the correct length - if self.ring_assignation_data.len() != (1 << PARTITION_BITS) * self.replication_factor { - return false; + // Check that the assignment data has the correct length + let expected_assignment_data_len = (1 << PARTITION_BITS) * self.replication_factor; + if self.ring_assignment_data.len() != expected_assignment_data_len { + return Err(format!( + "ring_assignment_data has incorrect length {} instead of {}", + self.ring_assignment_data.len(), + expected_assignment_data_len + )); } // Check that the assigned nodes are correct identifiers // of nodes that are assigned a role // and that role is not the role of a gateway nodes - for x in self.ring_assignation_data.iter() { + for x in self.ring_assignment_data.iter() { if *x as usize >= self.node_id_vec.len() { - return false; + return Err(format!( + "ring_assignment_data contains invalid node id {}", + *x + )); } let node = self.node_id_vec[*x as usize]; match self.roles.get(&node) { Some(NodeRoleV(Some(x))) if x.capacity.is_some() => (), - _ => return false, + _ => return Err("ring_assignment_data contains id of a gateway node".into()), + } + } + + // Check that every partition is associated to distinct nodes + let zone_redundancy = self.effective_zone_redundancy(); + let rf = self.replication_factor; + for p in 0..(1 << PARTITION_BITS) { + let nodes_of_p = self.ring_assignment_data[rf * p..rf * (p + 1)].to_vec(); + if nodes_of_p.iter().unique().count() != rf { + return Err(format!("partition does not contain {} unique node ids", rf)); + } + // Check that every partition is spread over at least zone_redundancy zones. + let zones_of_p = nodes_of_p + .iter() + .map(|n| { + self.get_node_zone(&self.node_id_vec[*n as usize]) + .expect("Zone not found.") + }) + .collect::<Vec<_>>(); + if zones_of_p.iter().unique().count() < zone_redundancy { + return Err(format!( + "nodes of partition are in less than {} distinct zones", + zone_redundancy + )); + } + } + + // Check that the nodes capacities is consistent with the stored partitions + let mut node_usage = vec![0; MAX_NODE_NUMBER]; + for n in self.ring_assignment_data.iter() { + node_usage[*n as usize] += 1; + } + for (n, usage) in node_usage.iter().enumerate() { + if *usage > 0 { + let uuid = self.node_id_vec[n]; + let partusage = usage * self.partition_size; + let nodecap = self.get_node_capacity(&uuid).unwrap(); + if partusage > nodecap { + return Err(format!( + "node usage ({}) is bigger than node capacity ({})", + usage * self.partition_size, + nodecap + )); + } } } - true + // Check that the partition size stored is the one computed by the asignation + // algorithm. + let cl2 = self.clone(); + let (_, zone_to_id) = cl2.generate_nongateway_zone_ids().unwrap(); + match cl2.compute_optimal_partition_size(&zone_to_id, zone_redundancy) { + Ok(s) if s != self.partition_size => { + return Err(format!( + "partition_size ({}) is different than optimal value ({})", + self.partition_size, s + )) + } + Err(e) => return Err(format!("could not calculate optimal partition size: {}", e)), + _ => (), + } + + Ok(()) } +} - /// Calculate an assignation of partitions to nodes - pub fn calculate_partition_assignation(&mut self) -> bool { - let (configured_nodes, zones) = self.configured_nodes_and_zones(); - let n_zones = zones.len(); +// ==================================================================================== - println!("Calculating updated partition assignation, this may take some time..."); - println!(); +// Implementation of the ClusterLayout methods related to the assignment algorithm. +impl ClusterLayout { + /// This function calculates a new partition-to-node assignment. + /// The computed assignment respects the node replication factor + /// and the zone redundancy parameter It maximizes the capacity of a + /// partition (assuming all partitions have the same size). + /// Among such optimal assignment, it minimizes the distance to + /// the former assignment (if any) to minimize the amount of + /// data to be moved. + /// Staged role changes must be merged with nodes roles before calling this function, + /// hence it must only be called from apply_staged_changes() and hence is not public. + fn calculate_partition_assignment(&mut self) -> Result<Message, Error> { + // We update the node ids, since the node role list might have changed with the + // changes in the layout. We retrieve the old_assignment reframed with new ids + let old_assignment_opt = self.update_node_id_vec()?; + + let zone_redundancy = self.effective_zone_redundancy(); + + let mut msg = Message::new(); + msg.push("==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====".into()); + msg.push("".into()); + msg.push(format!( + "Partitions are \ + replicated {} times on at least {} distinct zones.", + self.replication_factor, zone_redundancy + )); + + // We generate for once numerical ids for the zones of non gateway nodes, + // to use them as indices in the flow graphs. + let (id_to_zone, zone_to_id) = self.generate_nongateway_zone_ids()?; + + let nb_nongateway_nodes = self.nongateway_nodes().len(); + if nb_nongateway_nodes < self.replication_factor { + return Err(Error::Message(format!( + "The number of nodes with positive \ + capacity ({}) is smaller than the replication factor ({}).", + nb_nongateway_nodes, self.replication_factor + ))); + } + if id_to_zone.len() < zone_redundancy { + return Err(Error::Message(format!( + "The number of zones with non-gateway \ + nodes ({}) is smaller than the redundancy parameter ({})", + id_to_zone.len(), + zone_redundancy + ))); + } - // Get old partition assignation - let old_partitions = self.parse_assignation_data(); + // We compute the optimal partition size + // Capacities should be given in a unit so that partition size is at least 100. + // In this case, integer rounding plays a marginal role in the percentages of + // optimality. + let partition_size = self.compute_optimal_partition_size(&zone_to_id, zone_redundancy)?; + + msg.push("".into()); + if old_assignment_opt.is_some() { + msg.push(format!( + "Optimal partition size: {} ({} in previous layout)", + ByteSize::b(partition_size).to_string_as(false), + ByteSize::b(self.partition_size).to_string_as(false) + )); + } else { + msg.push(format!( + "Optimal partition size: {}", + ByteSize::b(partition_size).to_string_as(false) + )); + } + // We write the partition size. + self.partition_size = partition_size; + + if partition_size < 100 { + msg.push( + "WARNING: The partition size is low (< 100), make sure the capacities of your nodes are correct and are of at least a few MB" + .into(), + ); + } - // Start new partition assignation with nodes from old assignation where it is relevant - let mut partitions = old_partitions - .iter() - .map(|old_part| { - let mut new_part = PartitionAss::new(); - for node in old_part.nodes.iter() { - if let Some(role) = node.1 { - if role.capacity.is_some() { - new_part.add(None, n_zones, node.0, role); - } - } - } - new_part - }) - .collect::<Vec<_>>(); + // We compute a first flow/assignment that is heuristically close to the previous + // assignment + let mut gflow = + self.compute_candidate_assignment(&zone_to_id, &old_assignment_opt, zone_redundancy)?; + if let Some(assoc) = &old_assignment_opt { + // We minimize the distance to the previous assignment. + self.minimize_rebalance_load(&mut gflow, &zone_to_id, assoc)?; + } - // In various cases, not enough nodes will have been added for all partitions - // in the step above (e.g. due to node removals, or new zones being added). - // Here we add more nodes to make a complete (but sub-optimal) assignation, - // using an initial partition assignation that is calculated using the multi-dc maglev trick - match self.initial_partition_assignation() { - Some(initial_partitions) => { - for (part, ipart) in partitions.iter_mut().zip(initial_partitions.iter()) { - for _ in 0..2 { - for (id, info) in ipart.nodes.iter() { - if part.nodes.len() < self.replication_factor { - part.add(None, n_zones, id, info.unwrap()); - } - } - } - assert!(part.nodes.len() == self.replication_factor); - } - } - None => { - // Not enough nodes in cluster to build a correct assignation. - // Signal it by returning an error. - return false; - } + // We display statistics of the computation + msg.extend(self.output_stat(&gflow, &old_assignment_opt, &zone_to_id, &id_to_zone)?); + + // We update the layout structure + self.update_ring_from_flow(id_to_zone.len(), &gflow)?; + + if let Err(e) = self.check() { + return Err(Error::Message( + format!("Layout check returned an error: {}\nOriginal result of computation: <<<<\n{}\n>>>>", e, msg.join("\n")) + )); } - // Calculate how many partitions each node should ideally store, - // and how many partitions they are storing with the current assignation - // This defines our target for which we will optimize in the following loop. - let total_capacity = configured_nodes + Ok(msg) + } + + /// The LwwMap of node roles might have changed. This function updates the node_id_vec + /// and returns the assignment given by ring, with the new indices of the nodes, and + /// None if the node is not present anymore. + /// We work with the assumption that only this function and calculate_new_assignment + /// do modify assignment_ring and node_id_vec. + fn update_node_id_vec(&mut self) -> Result<Option<Vec<Vec<usize>>>, Error> { + // (1) We compute the new node list + // Non gateway nodes should be coded on 8bits, hence they must be first in the list + // We build the new node ids + let new_non_gateway_nodes: Vec<Uuid> = self + .roles + .items() .iter() - .map(|(_, info)| info.capacity.unwrap_or(0)) - .sum::<u32>() as usize; - let total_partitions = self.replication_factor * (1 << PARTITION_BITS); - let target_partitions_per_node = configured_nodes + .filter(|(_, _, v)| matches!(&v.0, Some(r) if r.capacity.is_some())) + .map(|(k, _, _)| *k) + .collect(); + + if new_non_gateway_nodes.len() > MAX_NODE_NUMBER { + return Err(Error::Message(format!( + "There are more than {} non-gateway nodes in the new \ + layout. This is not allowed.", + MAX_NODE_NUMBER + ))); + } + + let new_gateway_nodes: Vec<Uuid> = self + .roles + .items() .iter() - .map(|(id, info)| { - ( - *id, - info.capacity.unwrap_or(0) as usize * total_partitions / total_capacity, - ) - }) - .collect::<HashMap<&Uuid, usize>>(); - - let mut partitions_per_node = self.partitions_per_node(&partitions[..]); - - println!("Target number of partitions per node:"); - for (node, npart) in target_partitions_per_node.iter() { - println!("{:?}\t{}", node, npart); - } - println!(); - - // Shuffle partitions between nodes so that nodes will reach (or better approach) - // their target number of stored partitions - loop { - let mut option = None; - for (i, part) in partitions.iter_mut().enumerate() { - for (irm, (idrm, _)) in part.nodes.iter().enumerate() { - let errratio = |node, parts| { - let tgt = *target_partitions_per_node.get(node).unwrap() as f32; - (parts - tgt) / tgt - }; - let square = |x| x * x; - - let partsrm = partitions_per_node.get(*idrm).cloned().unwrap_or(0) as f32; - - for (idadd, infoadd) in configured_nodes.iter() { - // skip replacing a node by itself - // and skip replacing by gateway nodes - if idadd == idrm || infoadd.capacity.is_none() { - continue; - } + .filter(|(_, _, v)| matches!(v, NodeRoleV(Some(r)) if r.capacity.is_none())) + .map(|(k, _, _)| *k) + .collect(); + + let mut new_node_id_vec = Vec::<Uuid>::new(); + new_node_id_vec.extend(new_non_gateway_nodes); + new_node_id_vec.extend(new_gateway_nodes); + + let old_node_id_vec = self.node_id_vec.clone(); + self.node_id_vec = new_node_id_vec.clone(); + + // (2) We retrieve the old association + // We rewrite the old association with the new indices. We only consider partition + // to node assignments where the node is still in use. + if self.ring_assignment_data.is_empty() { + // This is a new association + return Ok(None); + } - // We want to try replacing node idrm by node idadd - // if that brings us close to our goal. - let partsadd = partitions_per_node.get(*idadd).cloned().unwrap_or(0) as f32; - let oldcost = square(errratio(*idrm, partsrm) - errratio(*idadd, partsadd)); - let newcost = - square(errratio(*idrm, partsrm - 1.) - errratio(*idadd, partsadd + 1.)); - if newcost >= oldcost { - // not closer to our goal - continue; - } - let gain = oldcost - newcost; + if self.ring_assignment_data.len() != NB_PARTITIONS * self.replication_factor { + return Err(Error::Message( + "The old assignment does not have a size corresponding to \ + the old replication factor or the number of partitions." + .into(), + )); + } - let mut newpart = part.clone(); + // We build a translation table between the uuid and new ids + let mut uuid_to_new_id = HashMap::<Uuid, usize>::new(); - newpart.nodes.remove(irm); - if !newpart.add(None, n_zones, idadd, infoadd) { - continue; - } - assert!(newpart.nodes.len() == self.replication_factor); + // We add the indices of only the new non-gateway nodes that can be used in the + // association ring + for (i, uuid) in new_node_id_vec.iter().enumerate() { + uuid_to_new_id.insert(*uuid, i); + } - if !old_partitions[i] - .is_valid_transition_to(&newpart, self.replication_factor) - { - continue; - } + let mut old_assignment = vec![Vec::<usize>::new(); NB_PARTITIONS]; + let rf = self.replication_factor; - if option - .as_ref() - .map(|(old_gain, _, _, _, _)| gain > *old_gain) - .unwrap_or(true) - { - option = Some((gain, i, idadd, idrm, newpart)); - } - } + for (p, old_assign_p) in old_assignment.iter_mut().enumerate() { + for old_id in &self.ring_assignment_data[p * rf..(p + 1) * rf] { + let uuid = old_node_id_vec[*old_id as usize]; + if uuid_to_new_id.contains_key(&uuid) { + old_assign_p.push(uuid_to_new_id[&uuid]); } } - if let Some((_gain, i, idadd, idrm, newpart)) = option { - *partitions_per_node.entry(idadd).or_insert(0) += 1; - *partitions_per_node.get_mut(idrm).unwrap() -= 1; - partitions[i] = newpart; - } else { - break; - } } - // Check we completed the assignation correctly - // (this is a set of checks for the algorithm's consistency) - assert!(partitions.len() == (1 << PARTITION_BITS)); - assert!(partitions - .iter() - .all(|p| p.nodes.len() == self.replication_factor)); + // We write the ring + self.ring_assignment_data = Vec::<CompactNodeType>::new(); - let new_partitions_per_node = self.partitions_per_node(&partitions[..]); - assert!(new_partitions_per_node == partitions_per_node); + Ok(Some(old_assignment)) + } - // Show statistics - println!("New number of partitions per node:"); - for (node, npart) in partitions_per_node.iter() { - let tgt = *target_partitions_per_node.get(node).unwrap(); - let pct = 100f32 * (*npart as f32) / (tgt as f32); - println!("{:?}\t{}\t({}% of {})", node, npart, pct as i32, tgt); + /// This function generates ids for the zone of the nodes appearing in + /// self.node_id_vec. + fn generate_nongateway_zone_ids(&self) -> Result<(Vec<String>, HashMap<String, usize>), Error> { + let mut id_to_zone = Vec::<String>::new(); + let mut zone_to_id = HashMap::<String, usize>::new(); + + for uuid in self.nongateway_nodes().iter() { + let r = self.node_role(uuid).unwrap(); + if !zone_to_id.contains_key(&r.zone) && r.capacity.is_some() { + zone_to_id.insert(r.zone.clone(), id_to_zone.len()); + id_to_zone.push(r.zone.clone()); + } } - println!(); + Ok((id_to_zone, zone_to_id)) + } - let mut diffcount = HashMap::new(); - for (oldpart, newpart) in old_partitions.iter().zip(partitions.iter()) { - let nminus = oldpart.txtplus(newpart); - let nplus = newpart.txtplus(oldpart); - if nminus != "[...]" || nplus != "[...]" { - let tup = (nminus, nplus); - *diffcount.entry(tup).or_insert(0) += 1; - } + /// This function computes by dichotomy the largest realizable partition size, given + /// the layout roles and parameters. + fn compute_optimal_partition_size( + &self, + zone_to_id: &HashMap<String, usize>, + zone_redundancy: usize, + ) -> Result<u64, Error> { + let empty_set = HashSet::<(usize, usize)>::new(); + let mut g = self.generate_flow_graph(1, zone_to_id, &empty_set, zone_redundancy)?; + g.compute_maximal_flow()?; + if g.get_flow_value()? < (NB_PARTITIONS * self.replication_factor) as i64 { + return Err(Error::Message( + "The storage capacity of he cluster is to small. It is \ + impossible to store partitions of size 1." + .into(), + )); } - if diffcount.is_empty() { - println!("No data will be moved between nodes."); - } else { - let mut diffcount = diffcount.into_iter().collect::<Vec<_>>(); - diffcount.sort(); - println!("Number of partitions that move:"); - for ((nminus, nplus), npart) in diffcount { - println!("\t{}\t{} -> {}", npart, nminus, nplus); + + let mut s_down = 1; + let mut s_up = self.get_total_capacity()?; + while s_down + 1 < s_up { + g = self.generate_flow_graph( + (s_down + s_up) / 2, + zone_to_id, + &empty_set, + zone_redundancy, + )?; + g.compute_maximal_flow()?; + if g.get_flow_value()? < (NB_PARTITIONS * self.replication_factor) as i64 { + s_up = (s_down + s_up) / 2; + } else { + s_down = (s_down + s_up) / 2; } } - println!(); - - // Calculate and save new assignation data - let (nodes, assignation_data) = - self.compute_assignation_data(&configured_nodes[..], &partitions[..]); - self.node_id_vec = nodes; - self.ring_assignation_data = assignation_data; - - true + Ok(s_down) } - fn initial_partition_assignation(&self) -> Option<Vec<PartitionAss<'_>>> { - let (configured_nodes, zones) = self.configured_nodes_and_zones(); - let n_zones = zones.len(); - - // Create a vector of partition indices (0 to 2**PARTITION_BITS-1) - let partitions_idx = (0usize..(1usize << PARTITION_BITS)).collect::<Vec<_>>(); - - // Prepare ring - let mut partitions: Vec<PartitionAss> = partitions_idx - .iter() - .map(|_i| PartitionAss::new()) - .collect::<Vec<_>>(); + fn generate_graph_vertices(nb_zones: usize, nb_nodes: usize) -> Vec<Vertex> { + let mut vertices = vec![Vertex::Source, Vertex::Sink]; + for p in 0..NB_PARTITIONS { + vertices.push(Vertex::Pup(p)); + vertices.push(Vertex::Pdown(p)); + for z in 0..nb_zones { + vertices.push(Vertex::PZ(p, z)); + } + } + for n in 0..nb_nodes { + vertices.push(Vertex::N(n)); + } + vertices + } - // Create MagLev priority queues for each node - let mut queues = configured_nodes - .iter() - .filter(|(_id, info)| info.capacity.is_some()) - .map(|(node_id, node_info)| { - let mut parts = partitions_idx - .iter() - .map(|i| { - let part_data = - [&u16::to_be_bytes(*i as u16)[..], node_id.as_slice()].concat(); - (*i, fasthash(&part_data[..])) - }) - .collect::<Vec<_>>(); - parts.sort_by_key(|(_i, h)| *h); - let parts_i = parts.iter().map(|(i, _h)| *i).collect::<Vec<_>>(); - (node_id, node_info, parts_i, 0) - }) - .collect::<Vec<_>>(); + /// Generates the graph to compute the maximal flow corresponding to the optimal + /// partition assignment. + /// exclude_assoc is the set of (partition, node) association that we are forbidden + /// to use (hence we do not add the corresponding edge to the graph). This parameter + /// is used to compute a first flow that uses only edges appearing in the previous + /// assignment. This produces a solution that heuristically should be close to the + /// previous one. + fn generate_flow_graph( + &self, + partition_size: u64, + zone_to_id: &HashMap<String, usize>, + exclude_assoc: &HashSet<(usize, usize)>, + zone_redundancy: usize, + ) -> Result<Graph<FlowEdge>, Error> { + let vertices = + ClusterLayout::generate_graph_vertices(zone_to_id.len(), self.nongateway_nodes().len()); + let mut g = Graph::<FlowEdge>::new(&vertices); + let nb_zones = zone_to_id.len(); + for p in 0..NB_PARTITIONS { + g.add_edge(Vertex::Source, Vertex::Pup(p), zone_redundancy as u64)?; + g.add_edge( + Vertex::Source, + Vertex::Pdown(p), + (self.replication_factor - zone_redundancy) as u64, + )?; + for z in 0..nb_zones { + g.add_edge(Vertex::Pup(p), Vertex::PZ(p, z), 1)?; + g.add_edge( + Vertex::Pdown(p), + Vertex::PZ(p, z), + self.replication_factor as u64, + )?; + } + } + for n in 0..self.nongateway_nodes().len() { + let node_capacity = self.get_node_capacity(&self.node_id_vec[n])?; + let node_zone = zone_to_id[&self.get_node_zone(&self.node_id_vec[n])?]; + g.add_edge(Vertex::N(n), Vertex::Sink, node_capacity / partition_size)?; + for p in 0..NB_PARTITIONS { + if !exclude_assoc.contains(&(p, n)) { + g.add_edge(Vertex::PZ(p, node_zone), Vertex::N(n), 1)?; + } + } + } + Ok(g) + } - let max_capacity = configured_nodes - .iter() - .filter_map(|(_, node_info)| node_info.capacity) - .fold(0, std::cmp::max); - - // Fill up ring - for rep in 0..self.replication_factor { - queues.sort_by_key(|(ni, _np, _q, _p)| { - let queue_data = [&u16::to_be_bytes(rep as u16)[..], ni.as_slice()].concat(); - fasthash(&queue_data[..]) - }); - - for (_, _, _, pos) in queues.iter_mut() { - *pos = 0; - } - - let mut remaining = partitions_idx.len(); - while remaining > 0 { - let remaining0 = remaining; - for i_round in 0..max_capacity { - for (node_id, node_info, q, pos) in queues.iter_mut() { - if i_round >= node_info.capacity.unwrap() { - continue; - } - for (pos2, &qv) in q.iter().enumerate().skip(*pos) { - if partitions[qv].add(Some(rep + 1), n_zones, node_id, node_info) { - remaining -= 1; - *pos = pos2 + 1; - break; - } - } - } + /// This function computes a first optimal assignment (in the form of a flow graph). + fn compute_candidate_assignment( + &self, + zone_to_id: &HashMap<String, usize>, + prev_assign_opt: &Option<Vec<Vec<usize>>>, + zone_redundancy: usize, + ) -> Result<Graph<FlowEdge>, Error> { + // We list the (partition,node) associations that are not used in the + // previous assignment + let mut exclude_edge = HashSet::<(usize, usize)>::new(); + if let Some(prev_assign) = prev_assign_opt { + let nb_nodes = self.nongateway_nodes().len(); + for (p, prev_assign_p) in prev_assign.iter().enumerate() { + for n in 0..nb_nodes { + exclude_edge.insert((p, n)); } - if remaining == remaining0 { - // No progress made, exit - return None; + for n in prev_assign_p.iter() { + exclude_edge.remove(&(p, *n)); } } } - Some(partitions) + // We compute the best flow using only the edges used in the previous assignment + let mut g = self.generate_flow_graph( + self.partition_size, + zone_to_id, + &exclude_edge, + zone_redundancy, + )?; + g.compute_maximal_flow()?; + + // We add the excluded edges and compute the maximal flow with the full graph. + // The algorithm is such that it will start with the flow that we just computed + // and find ameliorating paths from that. + for (p, n) in exclude_edge.iter() { + let node_zone = zone_to_id[&self.get_node_zone(&self.node_id_vec[*n])?]; + g.add_edge(Vertex::PZ(*p, node_zone), Vertex::N(*n), 1)?; + } + g.compute_maximal_flow()?; + Ok(g) } - fn configured_nodes_and_zones(&self) -> (Vec<(&Uuid, &NodeRole)>, HashSet<&str>) { - let configured_nodes = self - .roles - .items() - .iter() - .filter(|(_id, _, info)| info.0.is_some()) - .map(|(id, _, info)| (id, info.0.as_ref().unwrap())) - .collect::<Vec<(&Uuid, &NodeRole)>>(); + /// This function updates the flow graph gflow to minimize the distance between + /// its corresponding assignment and the previous one + fn minimize_rebalance_load( + &self, + gflow: &mut Graph<FlowEdge>, + zone_to_id: &HashMap<String, usize>, + prev_assign: &[Vec<usize>], + ) -> Result<(), Error> { + // We define a cost function on the edges (pairs of vertices) corresponding + // to the distance between the two assignments. + let mut cost = CostFunction::new(); + for (p, assoc_p) in prev_assign.iter().enumerate() { + for n in assoc_p.iter() { + let node_zone = zone_to_id[&self.get_node_zone(&self.node_id_vec[*n])?]; + cost.insert((Vertex::PZ(p, node_zone), Vertex::N(*n)), -1); + } + } - let zones = configured_nodes - .iter() - .filter(|(_id, info)| info.capacity.is_some()) - .map(|(_id, info)| info.zone.as_str()) - .collect::<HashSet<&str>>(); + // We compute the maximal length of a simple path in gflow. It is used in the + // Bellman-Ford algorithm in optimize_flow_with_cost to set the number + // of iterations. + let nb_nodes = self.nongateway_nodes().len(); + let path_length = 4 * nb_nodes; + gflow.optimize_flow_with_cost(&cost, path_length)?; - (configured_nodes, zones) + Ok(()) } - fn compute_assignation_data<'a>( - &self, - configured_nodes: &[(&'a Uuid, &'a NodeRole)], - partitions: &[PartitionAss<'a>], - ) -> (Vec<Uuid>, Vec<CompactNodeType>) { - assert!(partitions.len() == (1 << PARTITION_BITS)); - - // Make a canonical order for nodes - let mut nodes = configured_nodes - .iter() - .filter(|(_id, info)| info.capacity.is_some()) - .map(|(id, _)| **id) - .collect::<Vec<_>>(); - let nodes_rev = nodes - .iter() - .enumerate() - .map(|(i, id)| (*id, i as CompactNodeType)) - .collect::<HashMap<Uuid, CompactNodeType>>(); - - let mut assignation_data = vec![]; - for partition in partitions.iter() { - assert!(partition.nodes.len() == self.replication_factor); - for (id, _) in partition.nodes.iter() { - assignation_data.push(*nodes_rev.get(id).unwrap()); + /// This function updates the assignment ring from the flow graph. + fn update_ring_from_flow( + &mut self, + nb_zones: usize, + gflow: &Graph<FlowEdge>, + ) -> Result<(), Error> { + self.ring_assignment_data = Vec::<CompactNodeType>::new(); + for p in 0..NB_PARTITIONS { + for z in 0..nb_zones { + let assoc_vertex = gflow.get_positive_flow_from(Vertex::PZ(p, z))?; + for vertex in assoc_vertex.iter() { + if let Vertex::N(n) = vertex { + self.ring_assignment_data.push((*n).try_into().unwrap()); + } + } } } - nodes.extend( - configured_nodes - .iter() - .filter(|(_id, info)| info.capacity.is_none()) - .map(|(id, _)| **id), - ); - - (nodes, assignation_data) + if self.ring_assignment_data.len() != NB_PARTITIONS * self.replication_factor { + return Err(Error::Message( + "Critical Error : the association ring we produced does not \ + have the right size." + .into(), + )); + } + Ok(()) } - fn parse_assignation_data(&self) -> Vec<PartitionAss<'_>> { - if self.ring_assignation_data.len() == self.replication_factor * (1 << PARTITION_BITS) { - // If the previous assignation data is correct, use that - let mut partitions = vec![]; - for i in 0..(1 << PARTITION_BITS) { - let mut part = PartitionAss::new(); - for node_i in self.ring_assignation_data - [i * self.replication_factor..(i + 1) * self.replication_factor] - .iter() - { - let node_id = &self.node_id_vec[*node_i as usize]; + /// This function returns a message summing up the partition repartition of the new + /// layout, and other statistics of the partition assignment computation. + fn output_stat( + &self, + gflow: &Graph<FlowEdge>, + prev_assign_opt: &Option<Vec<Vec<usize>>>, + zone_to_id: &HashMap<String, usize>, + id_to_zone: &[String], + ) -> Result<Message, Error> { + let mut msg = Message::new(); + + let used_cap = self.partition_size * NB_PARTITIONS as u64 * self.replication_factor as u64; + let total_cap = self.get_total_capacity()?; + let percent_cap = 100.0 * (used_cap as f32) / (total_cap as f32); + msg.push(format!( + "Usable capacity / total cluster capacity: {} / {} ({:.1} %)", + ByteSize::b(used_cap).to_string_as(false), + ByteSize::b(total_cap).to_string_as(false), + percent_cap + )); + msg.push(format!( + "Effective capacity (replication factor {}): {}", + self.replication_factor, + ByteSize::b(used_cap / self.replication_factor as u64).to_string_as(false) + )); + if percent_cap < 80. { + msg.push("".into()); + msg.push( + "If the percentage is too low, it might be that the \ + cluster topology and redundancy constraints are forcing the use of nodes/zones with small \ + storage capacities." + .into(), + ); + msg.push( + "You might want to move storage capacity between zones or relax the redundancy constraint." + .into(), + ); + msg.push( + "See the detailed statistics below and look for saturated nodes/zones.".into(), + ); + } - if let Some(NodeRoleV(Some(info))) = self.roles.get(node_id) { - part.nodes.push((node_id, Some(info))); - } else { - part.nodes.push((node_id, None)); + // We define and fill in the following tables + let storing_nodes = self.nongateway_nodes(); + let mut new_partitions = vec![0; storing_nodes.len()]; + let mut stored_partitions = vec![0; storing_nodes.len()]; + + let mut new_partitions_zone = vec![0; id_to_zone.len()]; + let mut stored_partitions_zone = vec![0; id_to_zone.len()]; + + for p in 0..NB_PARTITIONS { + for z in 0..id_to_zone.len() { + let pz_nodes = gflow.get_positive_flow_from(Vertex::PZ(p, z))?; + if !pz_nodes.is_empty() { + stored_partitions_zone[z] += 1; + if let Some(prev_assign) = prev_assign_opt { + let mut old_zones_of_p = Vec::<usize>::new(); + for n in prev_assign[p].iter() { + old_zones_of_p + .push(zone_to_id[&self.get_node_zone(&self.node_id_vec[*n])?]); + } + if !old_zones_of_p.contains(&z) { + new_partitions_zone[z] += 1; + } + } + } + for vert in pz_nodes.iter() { + if let Vertex::N(n) = *vert { + stored_partitions[n] += 1; + if let Some(prev_assign) = prev_assign_opt { + if !prev_assign[p].contains(&n) { + new_partitions[n] += 1; + } + } } } - partitions.push(part); } - partitions - } else { - // Otherwise start fresh - (0..(1 << PARTITION_BITS)) - .map(|_| PartitionAss::new()) - .collect() } - } - fn partitions_per_node<'a>(&self, partitions: &[PartitionAss<'a>]) -> HashMap<&'a Uuid, usize> { - let mut partitions_per_node = HashMap::<&Uuid, usize>::new(); - for p in partitions.iter() { - for (id, _) in p.nodes.iter() { - *partitions_per_node.entry(*id).or_insert(0) += 1; + if prev_assign_opt.is_none() { + new_partitions = stored_partitions.clone(); + //new_partitions_zone = stored_partitions_zone.clone(); + } + + // We display the statistics + + msg.push("".into()); + if prev_assign_opt.is_some() { + let total_new_partitions: usize = new_partitions.iter().sum(); + msg.push(format!( + "A total of {} new copies of partitions need to be \ + transferred.", + total_new_partitions + )); + msg.push("".into()); + } + + let mut table = vec![]; + for z in 0..id_to_zone.len() { + let mut nodes_of_z = Vec::<usize>::new(); + for n in 0..storing_nodes.len() { + if self.get_node_zone(&self.node_id_vec[n])? == id_to_zone[z] { + nodes_of_z.push(n); + } + } + let replicated_partitions: usize = + nodes_of_z.iter().map(|n| stored_partitions[*n]).sum(); + table.push(format!( + "{}\tTags\tPartitions\tCapacity\tUsable capacity", + id_to_zone[z] + )); + + let available_cap_z: u64 = self.partition_size * replicated_partitions as u64; + let mut total_cap_z = 0; + for n in nodes_of_z.iter() { + total_cap_z += self.get_node_capacity(&self.node_id_vec[*n])?; } + let percent_cap_z = 100.0 * (available_cap_z as f32) / (total_cap_z as f32); + + for n in nodes_of_z.iter() { + let available_cap_n = stored_partitions[*n] as u64 * self.partition_size; + let total_cap_n = self.get_node_capacity(&self.node_id_vec[*n])?; + let tags_n = (self.node_role(&self.node_id_vec[*n]).ok_or("<??>"))?.tags_string(); + table.push(format!( + " {:?}\t{}\t{} ({} new)\t{}\t{} ({:.1}%)", + self.node_id_vec[*n], + tags_n, + stored_partitions[*n], + new_partitions[*n], + ByteSize::b(total_cap_n).to_string_as(false), + ByteSize::b(available_cap_n).to_string_as(false), + (available_cap_n as f32) / (total_cap_n as f32) * 100.0, + )); + } + + table.push(format!( + " TOTAL\t\t{} ({} unique)\t{}\t{} ({:.1}%)", + replicated_partitions, + stored_partitions_zone[z], + //new_partitions_zone[z], + ByteSize::b(total_cap_z).to_string_as(false), + ByteSize::b(available_cap_z).to_string_as(false), + percent_cap_z + )); + table.push("".into()); } - partitions_per_node + msg.push(format_table::format_table_to_string(table)); + + Ok(msg) } } -// ---- Internal structs for partition assignation in layout ---- +// ==================================================================================== + +#[cfg(test)] +mod tests { + use super::{Error, *}; + use std::cmp::min; + + // This function checks that the partition size S computed is at least better than the + // one given by a very naive algorithm. To do so, we try to run the naive algorithm + // assuming a partion size of S+1. If we succed, it means that the optimal assignment + // was not optimal. The naive algorithm is the following : + // - we compute the max number of partitions associated to every node, capped at the + // partition number. It gives the number of tokens of every node. + // - every zone has a number of tokens equal to the sum of the tokens of its nodes. + // - we cycle over the partitions and associate zone tokens while respecting the + // zone redundancy constraint. + // NOTE: the naive algorithm is not optimal. Counter example: + // take nb_partition = 3 ; replication_factor = 5; redundancy = 4; + // number of tokens by zone : (A, 4), (B,1), (C,4), (D, 4), (E, 2) + // With these parameters, the naive algo fails, whereas there is a solution: + // (A,A,C,D,E) , (A,B,C,D,D) (A,C,C,D,E) + fn check_against_naive(cl: &ClusterLayout) -> Result<bool, Error> { + let over_size = cl.partition_size + 1; + let mut zone_token = HashMap::<String, usize>::new(); + + let (zones, zone_to_id) = cl.generate_nongateway_zone_ids()?; + + if zones.is_empty() { + return Ok(false); + } -#[derive(Clone)] -struct PartitionAss<'a> { - nodes: Vec<(&'a Uuid, Option<&'a NodeRole>)>, -} + for z in zones.iter() { + zone_token.insert(z.clone(), 0); + } + for uuid in cl.nongateway_nodes().iter() { + let z = cl.get_node_zone(uuid)?; + let c = cl.get_node_capacity(uuid)?; + zone_token.insert( + z.clone(), + zone_token[&z] + min(NB_PARTITIONS, (c / over_size) as usize), + ); + } -impl<'a> PartitionAss<'a> { - fn new() -> Self { - Self { nodes: Vec::new() } - } + // For every partition, we count the number of zone already associated and + // the name of the last zone associated - fn nplus(&self, other: &PartitionAss<'a>) -> usize { - self.nodes - .iter() - .filter(|x| !other.nodes.contains(x)) - .count() - } + let mut id_zone_token = vec![0; zones.len()]; + for (z, t) in zone_token.iter() { + id_zone_token[zone_to_id[z]] = *t; + } - fn txtplus(&self, other: &PartitionAss<'a>) -> String { - let mut nodes = self - .nodes - .iter() - .filter(|x| !other.nodes.contains(x)) - .map(|x| format!("{:?}", x.0)) - .collect::<Vec<_>>(); - nodes.sort(); - if self.nodes.iter().any(|x| other.nodes.contains(x)) { - nodes.push("...".into()); + let mut nb_token = vec![0; NB_PARTITIONS]; + let mut last_zone = vec![zones.len(); NB_PARTITIONS]; + + let mut curr_zone = 0; + + let redundancy = cl.effective_zone_redundancy(); + + for replic in 0..cl.replication_factor { + for p in 0..NB_PARTITIONS { + while id_zone_token[curr_zone] == 0 + || (last_zone[p] == curr_zone + && redundancy - nb_token[p] <= cl.replication_factor - replic) + { + curr_zone += 1; + if curr_zone >= zones.len() { + return Ok(true); + } + } + id_zone_token[curr_zone] -= 1; + if last_zone[p] != curr_zone { + nb_token[p] += 1; + last_zone[p] = curr_zone; + } + } } - format!("[{}]", nodes.join(" ")) - } - fn is_valid_transition_to(&self, other: &PartitionAss<'a>, replication_factor: usize) -> bool { - let min_keep_nodes_per_part = (replication_factor + 1) / 2; - let n_removed = self.nplus(other); + return Ok(false); + } - if self.nodes.len() <= min_keep_nodes_per_part { - n_removed == 0 - } else { - n_removed <= self.nodes.len() - min_keep_nodes_per_part + fn show_msg(msg: &Message) { + for s in msg.iter() { + println!("{}", s); } } - // add is a key function in creating a PartitionAss, i.e. the list of nodes - // to which a partition is assigned. It tries to add a certain node id to the - // assignation, but checks that doing so is compatible with the NECESSARY - // condition that the partition assignation must be dispersed over different - // zones (datacenters) if enough zones exist. This is why it takes a n_zones - // parameter, which is the total number of zones that have existing nodes: - // if nodes in the assignation already cover all n_zones zones, then any node - // that is not yet in the assignation can be added. Otherwise, only nodes - // that are in a new zone can be added. - fn add( - &mut self, - target_len: Option<usize>, - n_zones: usize, - node: &'a Uuid, - role: &'a NodeRole, - ) -> bool { - if let Some(tl) = target_len { - if self.nodes.len() != tl - 1 { - return false; + fn update_layout( + cl: &mut ClusterLayout, + node_id_vec: &Vec<u8>, + node_capacity_vec: &Vec<u64>, + node_zone_vec: &Vec<String>, + zone_redundancy: usize, + ) { + for i in 0..node_id_vec.len() { + if let Some(x) = FixedBytes32::try_from(&[i as u8; 32]) { + cl.node_id_vec.push(x); } - } - let p_zns = self - .nodes - .iter() - .map(|(_id, info)| info.unwrap().zone.as_str()) - .collect::<HashSet<&str>>(); - if (p_zns.len() < n_zones && !p_zns.contains(&role.zone.as_str())) - || (p_zns.len() == n_zones && !self.nodes.iter().any(|(id, _)| *id == node)) - { - self.nodes.push((node, Some(role))); - true - } else { - false + let update = cl.staging_roles.update_mutator( + cl.node_id_vec[i], + NodeRoleV(Some(NodeRole { + zone: (node_zone_vec[i].to_string()), + capacity: (Some(node_capacity_vec[i])), + tags: (vec![]), + })), + ); + cl.staging_roles.merge(&update); } + cl.staging_parameters.update(LayoutParameters { + zone_redundancy: ZoneRedundancy::AtLeast(zone_redundancy), + }); + cl.staging_hash = cl.calculate_staging_hash(); + } + + #[test] + fn test_assignment() { + let mut node_id_vec = vec![1, 2, 3]; + let mut node_capacity_vec = vec![4000, 1000, 2000]; + let mut node_zone_vec = vec!["A", "B", "C"] + .into_iter() + .map(|x| x.to_string()) + .collect(); + + let mut cl = ClusterLayout::new(3); + update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 3); + let v = cl.version; + let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); + show_msg(&msg); + assert_eq!(cl.check(), Ok(())); + assert!(matches!(check_against_naive(&cl), Ok(true))); + + node_id_vec = vec![1, 2, 3, 4, 5, 6, 7, 8, 9]; + node_capacity_vec = vec![4000, 1000, 1000, 3000, 1000, 1000, 2000, 10000, 2000]; + node_zone_vec = vec!["A", "B", "C", "C", "C", "B", "G", "H", "I"] + .into_iter() + .map(|x| x.to_string()) + .collect(); + update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 2); + let v = cl.version; + let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); + show_msg(&msg); + assert_eq!(cl.check(), Ok(())); + assert!(matches!(check_against_naive(&cl), Ok(true))); + + node_capacity_vec = vec![4000, 1000, 2000, 7000, 1000, 1000, 2000, 10000, 2000]; + update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 3); + let v = cl.version; + let (mut cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); + show_msg(&msg); + assert_eq!(cl.check(), Ok(())); + assert!(matches!(check_against_naive(&cl), Ok(true))); + + node_capacity_vec = vec![ + 4000000, 4000000, 2000000, 7000000, 1000000, 9000000, 2000000, 10000, 2000000, + ]; + update_layout(&mut cl, &node_id_vec, &node_capacity_vec, &node_zone_vec, 1); + let v = cl.version; + let (cl, msg) = cl.apply_staged_changes(Some(v + 1)).unwrap(); + show_msg(&msg); + assert_eq!(cl.check(), Ok(())); + assert!(matches!(check_against_naive(&cl), Ok(true))); } } diff --git a/src/rpc/lib.rs b/src/rpc/lib.rs index 5aec92c0..a5f8fc6e 100644 --- a/src/rpc/lib.rs +++ b/src/rpc/lib.rs @@ -11,6 +11,7 @@ mod consul; #[cfg(feature = "kubernetes-discovery")] mod kubernetes; +pub mod graph_algo; pub mod layout; pub mod replication_mode; pub mod ring; diff --git a/src/rpc/ring.rs b/src/rpc/ring.rs index 73a126a2..6a2e5c72 100644 --- a/src/rpc/ring.rs +++ b/src/rpc/ring.rs @@ -40,6 +40,7 @@ pub struct Ring { // Type to store compactly the id of a node in the system // Change this to u16 the day we want to have more than 256 nodes in a cluster pub type CompactNodeType = u8; +pub const MAX_NODE_NUMBER: usize = 256; // The maximum number of times an object might get replicated // This must be at least 3 because Garage supports 3-way replication @@ -62,12 +63,12 @@ struct RingEntry { impl Ring { pub(crate) fn new(layout: ClusterLayout, replication_factor: usize) -> Self { if replication_factor != layout.replication_factor { - warn!("Could not build ring: replication factor does not match between local configuration and network role assignation."); + warn!("Could not build ring: replication factor does not match between local configuration and network role assignment."); return Self::empty(layout, replication_factor); } - if layout.ring_assignation_data.len() != replication_factor * (1 << PARTITION_BITS) { - warn!("Could not build ring: network role assignation data has invalid length"); + if layout.ring_assignment_data.len() != replication_factor * (1 << PARTITION_BITS) { + warn!("Could not build ring: network role assignment data has invalid length"); return Self::empty(layout, replication_factor); } @@ -77,7 +78,7 @@ impl Ring { let top = (i as u16) << (16 - PARTITION_BITS); let mut nodes_buf = [0u8; MAX_REPLICATION]; nodes_buf[..replication_factor].copy_from_slice( - &layout.ring_assignation_data + &layout.ring_assignment_data [replication_factor * i..replication_factor * (i + 1)], ); RingEntry { diff --git a/src/rpc/system.rs b/src/rpc/system.rs index b42e49fc..4b40bec4 100644 --- a/src/rpc/system.rs +++ b/src/rpc/system.rs @@ -9,10 +9,10 @@ use std::time::{Duration, Instant}; use arc_swap::ArcSwap; use async_trait::async_trait; -use futures::{join, select}; -use futures_util::future::*; +use futures::join; use serde::{Deserialize, Serialize}; use sodiumoxide::crypto::sign::ed25519; +use tokio::select; use tokio::sync::watch; use tokio::sync::Mutex; @@ -22,9 +22,9 @@ use netapp::peering::fullmesh::FullMeshPeeringStrategy; use netapp::util::parse_and_resolve_peer_addr_async; use netapp::{NetApp, NetworkKey, NodeID, NodeKey}; -use garage_util::config::Config; #[cfg(feature = "kubernetes-discovery")] use garage_util::config::KubernetesDiscoveryConfig; +use garage_util::config::{Config, DataDirEnum}; use garage_util::data::*; use garage_util::error::*; use garage_util::persister::Persister; @@ -119,7 +119,7 @@ pub struct System { /// Path to metadata directory pub metadata_dir: PathBuf, /// Path to data directory - pub data_dir: PathBuf, + pub data_dir: DataDirEnum, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -151,7 +151,7 @@ pub struct KnownNodeInfo { pub status: NodeStatus, } -#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy)] pub struct ClusterHealth { /// The current health status of the cluster (see below) pub status: ClusterHealthStatus, @@ -171,7 +171,7 @@ pub struct ClusterHealth { pub partitions_all_ok: usize, } -#[derive(Debug, Clone, Copy, Serialize, Deserialize)] +#[derive(Debug, Clone, Copy)] pub enum ClusterHealthStatus { /// All nodes are available Healthy, @@ -666,9 +666,9 @@ impl System { let update_ring = self.update_ring.lock().await; let mut layout: ClusterLayout = self.ring.borrow().layout.clone(); - let prev_layout_check = layout.check(); + let prev_layout_check = layout.check().is_ok(); if layout.merge(adv) { - if prev_layout_check && !layout.check() { + if prev_layout_check && layout.check().is_err() { error!("New cluster layout is invalid, discarding."); return Err(Error::Message( "New cluster layout is invalid, discarding.".into(), @@ -702,7 +702,7 @@ impl System { async fn status_exchange_loop(&self, mut stop_signal: watch::Receiver<bool>) { while !*stop_signal.borrow() { - let restart_at = tokio::time::sleep(STATUS_EXCHANGE_INTERVAL); + let restart_at = Instant::now() + STATUS_EXCHANGE_INTERVAL; self.update_local_status(); let local_status: NodeStatus = self.local_status.load().as_ref().clone(); @@ -711,20 +711,21 @@ impl System { .broadcast( &self.system_endpoint, SystemRpc::AdvertiseStatus(local_status), - RequestStrategy::with_priority(PRIO_HIGH), + RequestStrategy::with_priority(PRIO_HIGH) + .with_custom_timeout(STATUS_EXCHANGE_INTERVAL), ) .await; select! { - _ = restart_at.fuse() => {}, - _ = stop_signal.changed().fuse() => {}, + _ = tokio::time::sleep_until(restart_at.into()) => {}, + _ = stop_signal.changed() => {}, } } } async fn discovery_loop(self: &Arc<Self>, mut stop_signal: watch::Receiver<bool>) { while !*stop_signal.borrow() { - let not_configured = !self.ring.borrow().layout.check(); + let not_configured = self.ring.borrow().layout.check().is_err(); let no_peers = self.fullmesh.get_peer_list().len() < self.replication_factor; let expected_n_nodes = self.ring.borrow().layout.num_nodes(); let bad_peers = self @@ -799,10 +800,9 @@ impl System { #[cfg(feature = "kubernetes-discovery")] tokio::spawn(self.clone().advertise_to_kubernetes()); - let restart_at = tokio::time::sleep(DISCOVERY_INTERVAL); select! { - _ = restart_at.fuse() => {}, - _ = stop_signal.changed().fuse() => {}, + _ = tokio::time::sleep(DISCOVERY_INTERVAL) => {}, + _ = stop_signal.changed() => {}, } } } @@ -890,20 +890,47 @@ impl NodeStatus { } } - 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())) + fn update_disk_usage( + &mut self, + meta_dir: &Path, + data_dir: &DataDirEnum, + metrics: &SystemMetrics, + ) { + use nix::sys::statvfs::statvfs; + let mount_avail = |path: &Path| match statvfs(path) { + Ok(x) => { + let avail = x.blocks_available() as u64 * x.fragment_size() as u64; + let total = x.blocks() as u64 * x.fragment_size() as u64; + Some((x.filesystem_id(), avail, total)) + } + Err(_) => None, }; - self.meta_disk_avail = mount_avail(meta_dir); - self.data_disk_avail = mount_avail(data_dir); + self.meta_disk_avail = mount_avail(meta_dir).map(|(_, a, t)| (a, t)); + self.data_disk_avail = match data_dir { + DataDirEnum::Single(dir) => mount_avail(dir).map(|(_, a, t)| (a, t)), + DataDirEnum::Multiple(dirs) => (|| { + // TODO: more precise calculation that takes into account + // how data is going to be spread among partitions + let mut mounts = HashMap::new(); + for dir in dirs.iter() { + if dir.capacity.is_none() { + continue; + } + match mount_avail(&dir.path) { + Some((fsid, avail, total)) => { + mounts.insert(fsid, (avail, total)); + } + None => return None, + } + } + Some( + mounts + .into_iter() + .fold((0, 0), |(x, y), (_, (a, b))| (x + a, y + b)), + ) + })(), + }; if let Some((avail, total)) = self.meta_disk_avail { metrics diff --git a/src/table/Cargo.toml b/src/table/Cargo.toml index d0776945..08ccec72 100644 --- a/src/table/Cargo.toml +++ b/src/table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_table" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>"] edition = "2018" license = "AGPL-3.0" diff --git a/src/table/data.rs b/src/table/data.rs index e76836ca..bbfdf58b 100644 --- a/src/table/data.rs +++ b/src/table/data.rs @@ -34,7 +34,7 @@ pub struct TableData<F: TableSchema, R: TableReplication> { pub(crate) merkle_todo_notify: Notify, pub(crate) insert_queue: db::Tree, - pub(crate) insert_queue_notify: Notify, + pub(crate) insert_queue_notify: Arc<Notify>, pub(crate) gc_todo: CountedTree, @@ -80,7 +80,7 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> { merkle_todo, merkle_todo_notify: Notify::new(), insert_queue, - insert_queue_notify: Notify::new(), + insert_queue_notify: Arc::new(Notify::new()), gc_todo, metrics, }) @@ -203,14 +203,14 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> { ) -> Result<Option<F::E>, Error> { let tree_key = self.tree_key(partition_key, sort_key); - let changed = self.store.db().transaction(|mut tx| { + let changed = self.store.db().transaction(|tx| { 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 = update_fn(&mut tx, Some(old_entry.clone()))?; + let new_entry = update_fn(tx, Some(old_entry.clone()))?; (Some(old_entry), Some(old_bytes), new_entry) } - None => (None, None, update_fn(&mut tx, None)?), + None => (None, None, update_fn(tx, None)?), }; // Changed can be true in two scenarios @@ -233,7 +233,7 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> { tx.insert(&self.store, &tree_key, new_bytes)?; self.instance - .updated(&mut tx, old_entry.as_ref(), Some(&new_entry))?; + .updated(tx, old_entry.as_ref(), Some(&new_entry))?; Ok(Some((new_entry, new_bytes_hash))) } else { @@ -270,14 +270,14 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> { let removed = self .store .db() - .transaction(|mut tx| match tx.get(&self.store, k)? { + .transaction(|tx| match tx.get(&self.store, k)? { Some(cur_v) if cur_v == v => { let old_entry = self.decode_entry(v).map_err(db::TxError::Abort)?; tx.remove(&self.store, k)?; tx.insert(&self.merkle_todo, k, vec![])?; - self.instance.updated(&mut tx, Some(&old_entry), None)?; + self.instance.updated(tx, Some(&old_entry), None)?; Ok(true) } _ => Ok(false), @@ -298,14 +298,14 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> { let removed = self .store .db() - .transaction(|mut tx| match tx.get(&self.store, k)? { + .transaction(|tx| match tx.get(&self.store, k)? { Some(cur_v) if blake2sum(&cur_v[..]) == vhash => { let old_entry = self.decode_entry(&cur_v[..]).map_err(db::TxError::Abort)?; tx.remove(&self.store, k)?; tx.insert(&self.merkle_todo, k, vec![])?; - self.instance.updated(&mut tx, Some(&old_entry), None)?; + self.instance.updated(tx, Some(&old_entry), None)?; Ok(true) } _ => Ok(false), @@ -339,7 +339,9 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> { .map_err(Error::RmpEncode) .map_err(db::TxError::Abort)?; tx.insert(&self.insert_queue, &tree_key, new_entry)?; - self.insert_queue_notify.notify_one(); + + let notif = self.insert_queue_notify.clone(); + tx.on_commit(move || notif.notify_one()); Ok(()) } @@ -347,9 +349,7 @@ impl<F: TableSchema, R: TableReplication> TableData<F, R> { // ---- Utility functions ---- pub fn tree_key(&self, p: &F::P, s: &F::S) -> Vec<u8> { - let mut ret = p.hash().to_vec(); - ret.extend(s.sort_key()); - ret + [p.hash().as_slice(), s.sort_key()].concat() } pub fn decode_entry(&self, bytes: &[u8]) -> Result<F::E, Error> { diff --git a/src/table/merkle.rs b/src/table/merkle.rs index e86d0251..4577f872 100644 --- a/src/table/merkle.rs +++ b/src/table/merkle.rs @@ -108,9 +108,9 @@ impl<F: TableSchema, R: TableReplication> MerkleUpdater<F, R> { self.data .merkle_tree .db() - .transaction(|mut tx| self.update_item_rec(&mut tx, k, &khash, &key, new_vhash))?; + .transaction(|tx| self.update_item_rec(tx, k, &khash, &key, new_vhash))?; - let deleted = self.data.merkle_todo.db().transaction(|mut tx| { + let deleted = self.data.merkle_todo.db().transaction(|tx| { let remove = matches!(tx.get(&self.data.merkle_todo, k)?, Some(ov) if ov == vhash_by); if remove { tx.remove(&self.data.merkle_todo, k)?; diff --git a/src/table/queue.rs b/src/table/queue.rs index 0857209b..ffe0a4a7 100644 --- a/src/table/queue.rs +++ b/src/table/queue.rs @@ -12,7 +12,7 @@ use crate::replication::*; use crate::schema::*; use crate::table::*; -const BATCH_SIZE: usize = 100; +const BATCH_SIZE: usize = 1024; pub(crate) struct InsertQueueWorker<F, R>(pub(crate) Arc<Table<F, R>>) where @@ -53,7 +53,7 @@ impl<F: TableSchema, R: TableReplication> Worker for InsertQueueWorker<F, R> { self.0.insert_many(values).await?; - self.0.data.insert_queue.db().transaction(|mut tx| { + self.0.data.insert_queue.db().transaction(|tx| { for (k, v) in kv_pairs.iter() { if let Some(v2) = tx.get(&self.0.data.insert_queue, k)? { if &v2 == v { diff --git a/src/table/schema.rs b/src/table/schema.rs index 5cbf6c95..fc1a465e 100644 --- a/src/table/schema.rs +++ b/src/table/schema.rs @@ -6,6 +6,8 @@ use garage_util::migrate::Migrate; use crate::crdt::Crdt; +// =================================== PARTITION KEYS + /// Trait for field used to partition data pub trait PartitionKey: Clone + PartialEq + Serialize + for<'de> Deserialize<'de> + Send + Sync + 'static @@ -29,6 +31,8 @@ impl PartitionKey for FixedBytes32 { } } +// =================================== SORT KEYS + /// Trait for field used to sort data pub trait SortKey: Clone + Serialize + for<'de> Deserialize<'de> + Send + Sync + 'static { /// Get the key used to sort @@ -47,6 +51,8 @@ impl SortKey for FixedBytes32 { } } +// =================================== SCHEMA + /// Trait for an entry in a table. It must be sortable and partitionnable. pub trait Entry<P: PartitionKey, S: SortKey>: Crdt + PartialEq + Clone + Migrate + Send + Sync + 'static diff --git a/src/util/Cargo.toml b/src/util/Cargo.toml index f72051b9..6554ac13 100644 --- a/src/util/Cargo.toml +++ b/src/util/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_util" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>"] edition = "2018" license = "AGPL-3.0" @@ -20,6 +20,7 @@ arc-swap = "1.0" async-trait = "0.1" blake2 = "0.10" bytes = "1.0" +bytesize = "1.2" digest = "0.10" err-derive = "0.3" hexdump = "0.1" @@ -31,7 +32,7 @@ rand = "0.8" sha2 = "0.10" chrono = "0.4" -rmp-serde = "0.15" +rmp-serde = "1.1.2" serde = { version = "1.0", default-features = false, features = ["derive", "rc"] } serde_json = "1.0" toml = "0.6" @@ -39,7 +40,7 @@ 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"] } -netapp = "0.5" +netapp = "0.10" http = "0.2" hyper = "0.14" diff --git a/src/util/config.rs b/src/util/config.rs index 1da95b2f..ad5c8e1f 100644 --- a/src/util/config.rs +++ b/src/util/config.rs @@ -1,4 +1,5 @@ //! Contains type and functions related to Garage configuration file +use std::convert::TryFrom; use std::io::Read; use std::net::SocketAddr; use std::path::PathBuf; @@ -6,6 +7,7 @@ use std::path::PathBuf; use serde::{de, Deserialize}; use crate::error::Error; +use crate::socket_address::UnixOrTCPSocketAddress; /// Represent the whole configuration #[derive(Deserialize, Debug, Clone)] @@ -13,10 +15,20 @@ pub struct Config { /// Path where to store metadata. Should be fast, but low volume pub metadata_dir: PathBuf, /// Path where to store data. Can be slower, but need higher volume - pub data_dir: PathBuf, + pub data_dir: DataDirEnum, + + /// Whether to fsync after all metadata transactions (disabled by default) + #[serde(default)] + pub metadata_fsync: bool, + /// Whether to fsync after all data block writes (disabled by default) + #[serde(default)] + pub data_fsync: bool, /// Size of data blocks to save to disk - #[serde(default = "default_block_size")] + #[serde( + deserialize_with = "deserialize_capacity", + default = "default_block_size" + )] pub block_size: usize, /// Replication mode. Supported values: @@ -66,12 +78,19 @@ pub struct Config { pub db_engine: String, /// Sled cache size, in bytes - #[serde(default = "default_sled_cache_capacity")] - pub sled_cache_capacity: u64, + #[serde( + deserialize_with = "deserialize_capacity", + default = "default_sled_cache_capacity" + )] + pub sled_cache_capacity: usize, /// Sled flush interval in milliseconds #[serde(default = "default_sled_flush_every_ms")] pub sled_flush_every_ms: u64, + /// LMDB map size + #[serde(deserialize_with = "deserialize_capacity", default)] + pub lmdb_map_size: usize, + // -- APIs /// Configuration for S3 api pub s3_api: S3ApiConfig, @@ -87,11 +106,31 @@ pub struct Config { pub admin: AdminConfig, } +/// Value for data_dir: either a single directory or a list of dirs with attributes +#[derive(Deserialize, Debug, Clone)] +#[serde(untagged)] +pub enum DataDirEnum { + Single(PathBuf), + Multiple(Vec<DataDir>), +} + +#[derive(Deserialize, Debug, Clone)] +pub struct DataDir { + /// Path to the data directory + pub path: PathBuf, + /// Capacity of the drive (required if read_only is false) + #[serde(default)] + pub capacity: Option<String>, + /// Whether this is a legacy read-only path (capacity should be None) + #[serde(default)] + pub read_only: bool, +} + /// Configuration for S3 api #[derive(Deserialize, Debug, Clone)] pub struct S3ApiConfig { /// Address and port to bind for api serving - pub api_bind_addr: Option<SocketAddr>, + pub api_bind_addr: Option<UnixOrTCPSocketAddress>, /// S3 region to use pub s3_region: String, /// Suffix to remove from domain name to find bucket. If None, @@ -103,14 +142,14 @@ pub struct S3ApiConfig { #[derive(Deserialize, Debug, Clone)] pub struct K2VApiConfig { /// Address and port to bind for api serving - pub api_bind_addr: SocketAddr, + pub api_bind_addr: UnixOrTCPSocketAddress, } /// Configuration for serving files as normal web server #[derive(Deserialize, Debug, Clone)] pub struct WebConfig { /// Address and port to bind for web serving - pub bind_addr: SocketAddr, + pub bind_addr: UnixOrTCPSocketAddress, /// Suffix to remove from domain name to find bucket pub root_domain: String, } @@ -119,7 +158,7 @@ pub struct WebConfig { #[derive(Deserialize, Debug, Clone, Default)] pub struct AdminConfig { /// Address and port to bind for admin API serving - pub api_bind_addr: Option<SocketAddr>, + pub api_bind_addr: Option<UnixOrTCPSocketAddress>, /// Bearer token to use to scrape metrics pub metrics_token: Option<String>, @@ -183,10 +222,10 @@ pub struct KubernetesDiscoveryConfig { } fn default_db_engine() -> String { - "sled".into() + "lmdb".into() } -fn default_sled_cache_capacity() -> u64 { +fn default_sled_cache_capacity() -> usize { 128 * 1024 * 1024 } fn default_sled_flush_every_ms() -> u64 { @@ -266,8 +305,6 @@ fn deserialize_compression<'de, D>(deserializer: D) -> Result<Option<i32>, D::Er where D: de::Deserializer<'de>, { - use std::convert::TryFrom; - struct OptionVisitor; impl<'de> serde::de::Visitor<'de> for OptionVisitor { @@ -312,6 +349,50 @@ where deserializer.deserialize_any(OptionVisitor) } +fn deserialize_capacity<'de, D>(deserializer: D) -> Result<usize, D::Error> +where + D: de::Deserializer<'de>, +{ + struct CapacityVisitor; + + impl<'de> serde::de::Visitor<'de> for CapacityVisitor { + type Value = usize; + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("int or '<capacity>'") + } + + fn visit_str<E>(self, value: &str) -> Result<Self::Value, E> + where + E: de::Error, + { + value + .parse::<bytesize::ByteSize>() + .map(|x| x.as_u64()) + .map_err(|e| E::custom(format!("invalid capacity value: {}", e))) + .and_then(|v| { + usize::try_from(v) + .map_err(|_| E::custom("capacity value out of bound".to_owned())) + }) + } + + fn visit_i64<E>(self, v: i64) -> Result<Self::Value, E> + where + E: de::Error, + { + usize::try_from(v).map_err(|_| E::custom("capacity value out of bound".to_owned())) + } + + fn visit_u64<E>(self, v: u64) -> Result<Self::Value, E> + where + E: de::Error, + { + usize::try_from(v).map_err(|_| E::custom("capacity value out of bound".to_owned())) + } + } + + deserializer.deserialize_any(CapacityVisitor) +} + #[cfg(test)] mod tests { use crate::error::Error; diff --git a/src/util/encode.rs b/src/util/encode.rs index 1cd3198f..a9ab9a35 100644 --- a/src/util/encode.rs +++ b/src/util/encode.rs @@ -8,9 +8,7 @@ where T: Serialize + ?Sized, { let mut wr = Vec::with_capacity(128); - let mut se = rmp_serde::Serializer::new(&mut wr) - .with_struct_map() - .with_string_variants(); + let mut se = rmp_serde::Serializer::new(&mut wr).with_struct_map(); val.serialize(&mut se)?; Ok(wr) } @@ -22,7 +20,7 @@ pub fn nonversioned_decode<T>(bytes: &[u8]) -> Result<T, rmp_serde::decode::Erro where T: for<'de> Deserialize<'de> + ?Sized, { - rmp_serde::decode::from_read_ref::<_, T>(bytes) + rmp_serde::decode::from_slice::<_>(bytes) } /// Serialize to JSON, truncating long result diff --git a/src/util/lib.rs b/src/util/lib.rs index 15f0f829..7df77959 100644 --- a/src/util/lib.rs +++ b/src/util/lib.rs @@ -14,6 +14,7 @@ pub mod forwarded_headers; pub mod metrics; pub mod migrate; pub mod persister; +pub mod socket_address; pub mod time; pub mod tranquilizer; pub mod version; diff --git a/src/util/migrate.rs b/src/util/migrate.rs index b9cce08a..45147c74 100644 --- a/src/util/migrate.rs +++ b/src/util/migrate.rs @@ -19,7 +19,7 @@ pub trait Migrate: Serialize + for<'de> Deserialize<'de> + 'static { fn decode(bytes: &[u8]) -> Option<Self> { let marker_len = Self::VERSION_MARKER.len(); if bytes.get(..marker_len) == Some(Self::VERSION_MARKER) { - if let Ok(value) = rmp_serde::decode::from_read_ref::<_, Self>(&bytes[marker_len..]) { + if let Ok(value) = rmp_serde::decode::from_slice::<_>(&bytes[marker_len..]) { return Some(value); } } @@ -31,9 +31,7 @@ pub trait Migrate: Serialize + for<'de> Deserialize<'de> + 'static { fn encode(&self) -> Result<Vec<u8>, rmp_serde::encode::Error> { let mut wr = Vec::with_capacity(128); wr.extend_from_slice(Self::VERSION_MARKER); - let mut se = rmp_serde::Serializer::new(&mut wr) - .with_struct_map() - .with_string_variants(); + let mut se = rmp_serde::Serializer::new(&mut wr).with_struct_map(); self.serialize(&mut se)?; Ok(wr) } diff --git a/src/util/socket_address.rs b/src/util/socket_address.rs new file mode 100644 index 00000000..f01225f6 --- /dev/null +++ b/src/util/socket_address.rs @@ -0,0 +1,44 @@ +use std::fmt::{Debug, Display, Formatter}; +use std::net::SocketAddr; +use std::path::PathBuf; +use std::str::FromStr; + +use serde::de::Error; +use serde::{Deserialize, Deserializer}; + +#[derive(Debug, Clone)] +pub enum UnixOrTCPSocketAddress { + TCPSocket(SocketAddr), + UnixSocket(PathBuf), +} + +impl Display for UnixOrTCPSocketAddress { + fn fmt(&self, formatter: &mut Formatter<'_>) -> std::fmt::Result { + match self { + UnixOrTCPSocketAddress::TCPSocket(address) => write!(formatter, "http://{}", address), + UnixOrTCPSocketAddress::UnixSocket(path) => { + write!(formatter, "http+unix://{}", path.to_string_lossy()) + } + } + } +} + +impl<'de> Deserialize<'de> for UnixOrTCPSocketAddress { + fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> + where + D: Deserializer<'de>, + { + let string = String::deserialize(deserializer)?; + let string = string.as_str(); + + if string.starts_with("/") { + Ok(UnixOrTCPSocketAddress::UnixSocket( + PathBuf::from_str(string).map_err(Error::custom)?, + )) + } else { + Ok(UnixOrTCPSocketAddress::TCPSocket( + SocketAddr::from_str(string).map_err(Error::custom)?, + )) + } + } +} diff --git a/src/web/Cargo.toml b/src/web/Cargo.toml index 423d3829..88cf1486 100644 --- a/src/web/Cargo.toml +++ b/src/web/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "garage_web" -version = "0.8.2" +version = "0.9.0" authors = ["Alex Auvolat <alex@adnab.me>", "Quentin Dufour <quentin@dufour.io>"] edition = "2018" license = "AGPL-3.0" @@ -27,5 +27,8 @@ futures = "0.3" http = "0.2" hyper = { version = "0.14", features = ["server", "http1", "runtime", "tcp", "stream"] } +hyperlocal = { version = "0.8.0", default-features = false, features = ["server"] } + +tokio = { version = "1.0", default-features = false, features = ["net"] } opentelemetry = "0.17" diff --git a/src/web/web_server.rs b/src/web/web_server.rs index de63b842..73780efb 100644 --- a/src/web/web_server.rs +++ b/src/web/web_server.rs @@ -1,4 +1,6 @@ -use std::{borrow::Cow, convert::Infallible, net::SocketAddr, sync::Arc}; +use std::fs::{self, Permissions}; +use std::os::unix::prelude::PermissionsExt; +use std::{convert::Infallible, sync::Arc}; use futures::future::Future; @@ -6,9 +8,13 @@ use hyper::{ header::{HeaderValue, HOST}, server::conn::AddrStream, service::{make_service_fn, service_fn}, - Body, Method, Request, Response, Server, + Body, Method, Request, Response, Server, StatusCode, }; +use hyperlocal::UnixServerExt; + +use tokio::net::UnixStream; + use opentelemetry::{ global, metrics::{Counter, ValueRecorder}, @@ -28,9 +34,11 @@ use garage_api::s3::get::{handle_get, handle_head}; use garage_model::garage::Garage; use garage_table::*; +use garage_util::data::Uuid; use garage_util::error::Error as GarageError; use garage_util::forwarded_headers; use garage_util::metrics::{gen_trace_id, RecordDuration}; +use garage_util::socket_address::UnixOrTCPSocketAddress; struct WebMetrics { request_counter: Counter<u64>, @@ -68,7 +76,7 @@ impl WebServer { /// Run a web server pub async fn run( garage: Arc<Garage>, - addr: SocketAddr, + addr: UnixOrTCPSocketAddress, root_domain: String, shutdown_signal: impl Future<Output = ()>, ) -> Result<(), GarageError> { @@ -79,7 +87,7 @@ impl WebServer { root_domain, }); - let service = make_service_fn(|conn: &AddrStream| { + let tcp_service = make_service_fn(|conn: &AddrStream| { let web_server = web_server.clone(); let client_addr = conn.remote_addr(); @@ -87,23 +95,56 @@ impl WebServer { Ok::<_, Error>(service_fn(move |req: Request<Body>| { let web_server = web_server.clone(); - web_server.handle_request(req, client_addr) + web_server.handle_request(req, client_addr.to_string()) })) } }); - let server = Server::bind(&addr).serve(service); - let graceful = server.with_graceful_shutdown(shutdown_signal); - info!("Web server listening on http://{}", addr); + let unix_service = make_service_fn(|_: &UnixStream| { + let web_server = web_server.clone(); + + let path = addr.to_string(); + async move { + Ok::<_, Error>(service_fn(move |req: Request<Body>| { + let web_server = web_server.clone(); + + web_server.handle_request(req, path.clone()) + })) + } + }); + + info!("Web server listening on {}", addr); + + match addr { + UnixOrTCPSocketAddress::TCPSocket(addr) => { + Server::bind(&addr) + .serve(tcp_service) + .with_graceful_shutdown(shutdown_signal) + .await? + } + UnixOrTCPSocketAddress::UnixSocket(ref path) => { + if path.exists() { + fs::remove_file(path)? + } + + let bound = Server::bind_unix(path)?; + + fs::set_permissions(path, Permissions::from_mode(0o222))?; + + bound + .serve(unix_service) + .with_graceful_shutdown(shutdown_signal) + .await?; + } + }; - graceful.await?; Ok(()) } async fn handle_request( self: Arc<Self>, req: Request<Body>, - addr: SocketAddr, + addr: String, ) -> Result<Response<Body>, Infallible> { if let Ok(forwarded_for_ip_addr) = forwarded_headers::handle_forwarded_for_headers(req.headers()) @@ -168,6 +209,17 @@ impl WebServer { } } + async fn check_key_exists(self: &Arc<Self>, bucket_id: Uuid, key: &str) -> Result<bool, Error> { + let exists = self + .garage + .object_table + .get(&bucket_id, &key.to_string()) + .await? + .map(|object| object.versions().iter().any(|v| v.is_data())) + .unwrap_or(false); + Ok(exists) + } + async fn serve_file(self: &Arc<Self>, req: &Request<Body>) -> Result<Response<Body>, Error> { // Get http authority string (eg. [::1]:3902 or garage.tld:80) let authority = req @@ -207,11 +259,11 @@ impl WebServer { // Get path let path = req.uri().path().to_string(); let index = &website_config.index_document; - let key = path_to_key(&path, index)?; + let (key, may_redirect) = path_to_keys(&path, index)?; debug!( - "Selected bucket: \"{}\" {:?}, selected key: \"{}\"", - bucket_name, bucket_id, key + "Selected bucket: \"{}\" {:?}, target key: \"{}\", may redirect to: {:?}", + bucket_name, bucket_id, key, may_redirect ); let ret_doc = match *req.method() { @@ -219,10 +271,23 @@ impl WebServer { Method::HEAD => handle_head(self.garage.clone(), req, bucket_id, &key, None).await, Method::GET => handle_get(self.garage.clone(), req, bucket_id, &key, None).await, _ => Err(ApiError::bad_request("HTTP method not supported")), - } - .map_err(Error::from); + }; + + // Try implicit redirect on error + let ret_doc_with_redir = match (&ret_doc, may_redirect) { + (Err(ApiError::NoSuchKey), ImplicitRedirect::To { key, url }) + if self.check_key_exists(bucket_id, key.as_str()).await? => + { + Ok(Response::builder() + .status(StatusCode::FOUND) + .header("Location", url) + .body(Body::empty()) + .unwrap()) + } + _ => ret_doc, + }; - match ret_doc { + match ret_doc_with_redir.map_err(Error::from) { Err(error) => { // For a HEAD or OPTIONS method, and for non-4xx errors, // we don't return the error document as content, @@ -308,30 +373,45 @@ fn error_to_res(e: Error) -> Response<Body> { http_error } +#[derive(Debug, PartialEq)] +enum ImplicitRedirect { + No, + To { key: String, url: String }, +} + /// Path to key /// /// Convert the provided path to the internal key /// When a path ends with "/", we append the index name to match traditional web server behavior /// which is also AWS S3 behavior. -fn path_to_key<'a>(path: &'a str, index: &str) -> Result<Cow<'a, str>, Error> { +/// +/// Check: https://docs.aws.amazon.com/AmazonS3/latest/userguide/IndexDocumentSupport.html +fn path_to_keys<'a>(path: &'a str, index: &str) -> Result<(String, ImplicitRedirect), Error> { let path_utf8 = percent_encoding::percent_decode_str(path).decode_utf8()?; - if !path_utf8.starts_with('/') { - return Err(Error::BadRequest("Path must start with a / (slash)".into())); - } - - match path_utf8.chars().last() { - None => unreachable!(), - Some('/') => { - let mut key = String::with_capacity(path_utf8.len() + index.len()); - key.push_str(&path_utf8[1..]); - key.push_str(index); - Ok(key.into()) - } - Some(_) => match path_utf8 { - Cow::Borrowed(pu8) => Ok((&pu8[1..]).into()), - Cow::Owned(pu8) => Ok(pu8[1..].to_string().into()), - }, + let base_key = match path_utf8.strip_prefix("/") { + Some(bk) => bk, + None => return Err(Error::BadRequest("Path must start with a / (slash)".into())), + }; + let is_bucket_root = base_key.len() == 0; + let is_trailing_slash = path_utf8.ends_with("/"); + + match (is_bucket_root, is_trailing_slash) { + // It is not possible to store something at the root of the bucket (ie. empty key), + // the only option is to fetch the index + (true, _) => Ok((index.to_string(), ImplicitRedirect::No)), + + // "If you create a folder structure in your bucket, you must have an index document at each level. In each folder, the index document must have the same name, for example, index.html. When a user specifies a URL that resembles a folder lookup, the presence or absence of a trailing slash determines the behavior of the website. For example, the following URL, with a trailing slash, returns the photos/index.html index document." + (false, true) => Ok((format!("{base_key}{index}"), ImplicitRedirect::No)), + + // "However, if you exclude the trailing slash from the preceding URL, Amazon S3 first looks for an object photos in the bucket. If the photos object is not found, it searches for an index document, photos/index.html. If that document is found, Amazon S3 returns a 302 Found message and points to the photos/ key. For subsequent requests to photos/, Amazon S3 returns photos/index.html. If the index document is not found, Amazon S3 returns an error." + (false, false) => Ok(( + base_key.to_string(), + ImplicitRedirect::To { + key: format!("{base_key}/{index}"), + url: format!("{path}/"), + }, + )), } } @@ -340,13 +420,37 @@ mod tests { use super::*; #[test] - fn path_to_key_test() -> Result<(), Error> { - assert_eq!(path_to_key("/file%20.jpg", "index.html")?, "file .jpg"); - assert_eq!(path_to_key("/%20t/", "index.html")?, " t/index.html"); - assert_eq!(path_to_key("/", "index.html")?, "index.html"); - assert_eq!(path_to_key("/hello", "index.html")?, "hello"); - assert!(path_to_key("", "index.html").is_err()); - assert!(path_to_key("i/am/relative", "index.html").is_err()); + fn path_to_keys_test() -> Result<(), Error> { + assert_eq!( + path_to_keys("/file%20.jpg", "index.html")?, + ( + "file .jpg".to_string(), + ImplicitRedirect::To { + key: "file .jpg/index.html".to_string(), + url: "/file%20.jpg/".to_string() + } + ) + ); + assert_eq!( + path_to_keys("/%20t/", "index.html")?, + (" t/index.html".to_string(), ImplicitRedirect::No) + ); + assert_eq!( + path_to_keys("/", "index.html")?, + ("index.html".to_string(), ImplicitRedirect::No) + ); + assert_eq!( + path_to_keys("/hello", "index.html")?, + ( + "hello".to_string(), + ImplicitRedirect::To { + key: "hello/index.html".to_string(), + url: "/hello/".to_string() + } + ) + ); + assert!(path_to_keys("", "index.html").is_err()); + assert!(path_to_keys("i/am/relative", "index.html").is_err()); Ok(()) } } |