diff --git a/hosts/nixedo/modules/forgejo.nix b/hosts/nixedo/modules/forgejo.nix deleted file mode 100644 index 7a8b4f18..00000000 --- a/hosts/nixedo/modules/forgejo.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ config, ... }: - -{ - services.forgejo = { - enable = true; - stateDir = "/var/www/forgejo"; - - settings = { - server = { - DOMAIN = "git.oliverdavies.uk"; - LANDING_PAGE = "explore"; - ROOT_URL = "https://${config.services.forgejo.settings.server.DOMAIN}"; - SSH_DOMAIN = "ssh.oliverdavies.uk"; - }; - - service.DISABLE_REGISTRATION = true; - - ui.DEFAULT_THEME = "forgejo-auto"; - }; - }; - - services.cloudflared.tunnels.${config.homelab.cloudflared.tunnelId}.ingress = { - "${config.services.forgejo.settings.server.DOMAIN}" = - "http://localhost:${toString config.services.forgejo.settings.server.HTTP_PORT}"; - }; -} diff --git a/hosts/nixedo/modules/jellyfin.nix b/hosts/nixedo/modules/jellyfin.nix deleted file mode 100644 index 8dc57fb0..00000000 --- a/hosts/nixedo/modules/jellyfin.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - services.jellyfin = { - enable = true; - - group = "media"; - openFirewall = true; - }; - - services.nginx.virtualHosts."jellyfin.oliverdavies.uk" = { - forceSSL = true; - useACMEHost = "oliverdavies.uk"; - - locations."/" = { - proxyPass = "http://localhost:8096"; - recommendedProxySettings = true; - - extraConfig = '' - proxy_buffering off; - ''; - }; - }; -} diff --git a/hosts/nixedo/modules/peertube.nix b/hosts/nixedo/modules/peertube.nix deleted file mode 100644 index 25c90a01..00000000 --- a/hosts/nixedo/modules/peertube.nix +++ /dev/null @@ -1,68 +0,0 @@ -{ - config, - inputs, - lib, - ... -}: - -let - inherit (lib) - mkEnableOption - mkIf - mkOption - types - ; - - cfg = homelab.services.${service}; - homelab = config.homelab; - service = "peertube"; -in -{ - options.homelab.services.${service} = { - enable = mkEnableOption "Enable ${service}"; - - url = mkOption { - default = "videos.${homelab.domain}"; - type = types.str; - }; - }; - - config = mkIf cfg.enable { - services = { - ${service} = { - enable = true; - - configureNginx = true; - enableWebHttps = false; - localDomain = cfg.url; - - database = { - createLocally = true; - }; - - redis = { - createLocally = true; - enableUnixSocket = true; - }; - - secrets.secretsFile = config.age.secrets.peertube-env.path; - - settings = { - webserver = { - hostname = config.services.${service}.localDomain; - port = lib.mkForce 443; - }; - }; - }; - - cloudflared.tunnels.${homelab.cloudflared.tunnelId}.ingress = { - ${cfg.url} = "http://localhost:${toString config.services.${service}.listenWeb}"; - }; - }; - - age.secrets."${service}-env" = { - file = "${inputs.self}/secrets/${service}-env.age"; - owner = config.services.${service}.user; - }; - }; -} diff --git a/modules/homelab/peertube.nix b/modules/homelab/peertube.nix new file mode 100644 index 00000000..765d112e --- /dev/null +++ b/modules/homelab/peertube.nix @@ -0,0 +1,74 @@ +{ inputs, lib, ... }: + +{ + flake.modules.nixos.server-peertube = + { config, ... }: + let + inherit (lib) + mkEnableOption + mkIf + mkOption + types + ; + + cfg = config.homelab.services.peertube; + in + { + options.homelab.services.peertube = { + enable = mkEnableOption "Enable peertube"; + + cloudflareTunnelId = mkOption { + type = types.str; + }; + + domain = mkOption { + type = types.str; + }; + }; + + config = mkIf cfg.enable { + services = { + peertube = { + enable = true; + + configureNginx = true; + enableWebHttps = false; + localDomain = cfg.domain; + + database = { + createLocally = true; + passwordFile = config.age.secrets.peertube-postgresql.path; + }; + + redis = { + createLocally = true; + enableUnixSocket = true; + }; + + secrets.secretsFile = config.age.secrets.peertube-env.path; + + settings = { + webserver = { + hostname = config.services.peertube.localDomain; + port = lib.mkForce 443; + }; + }; + }; + + cloudflared.tunnels.${cfg.cloudflareTunnelId}.ingress = { + ${cfg.domain} = "http://localhost:${toString config.services.peertube.listenWeb}"; + }; + }; + + age.secrets."peertube-env" = { + file = "${inputs.self}/secrets/peertube-env.age"; + owner = config.services.peertube.user; + }; + + age.secrets."peertube-postgresql" = { + file = "${inputs.self}/secrets/peertube-postgresql.age"; + owner = config.services.peertube.user; + }; + }; + }; +} diff --git a/modules/hosts/homelab/home02/configuration.nix b/modules/hosts/homelab/home02/configuration.nix index 2e64a3f0..75f07bb7 100644 --- a/modules/hosts/homelab/home02/configuration.nix +++ b/modules/hosts/homelab/home02/configuration.nix @@ -10,6 +10,7 @@ nginx-oliverdavies-uk nginx-ponthir-taekwondo server-forgejo + server-peertube ]; homelab.services = @@ -20,10 +21,19 @@ forgejo = { inherit cloudflareTunnelId; - domain = "git.oliverdavies.uk"; enable = true; + + domain = "git.oliverdavies.uk"; sshDomain = "ssh.oliverdavies.uk"; }; + + peertube = { + inherit cloudflareTunnelId; + + enable = true; + + domain = "videos.oliverdavies.uk"; + }; }; nix.settings = { diff --git a/secrets.nix b/secrets.nix index 6db08713..3c1311ee 100644 --- a/secrets.nix +++ b/secrets.nix @@ -39,8 +39,13 @@ in ] ++ [ users.opdavies ]; + "secrets/peertube-postgresql.age".publicKeys = [ + hosts.home02 + ] + ++ [ users.opdavies ]; + "secrets/peertube-env.age".publicKeys = [ - hosts.nixedo + hosts.home02 ] ++ [ users.opdavies ]; diff --git a/secrets/cloudflare.age b/secrets/cloudflare.age index 5b919d10..9709e6ed 100644 Binary files a/secrets/cloudflare.age and b/secrets/cloudflare.age differ diff --git a/secrets/cloudflared-credentials.age b/secrets/cloudflared-credentials.age index 6288e3d0..f6afe0d2 100644 Binary files a/secrets/cloudflared-credentials.age and b/secrets/cloudflared-credentials.age differ diff --git a/secrets/cloudflared-credentials2.age b/secrets/cloudflared-credentials2.age index d42e9e6b..85812f88 100644 Binary files a/secrets/cloudflared-credentials2.age and b/secrets/cloudflared-credentials2.age differ diff --git a/secrets/forgejo-runner-token.age b/secrets/forgejo-runner-token.age index 1781312e..70b3b945 100644 Binary files a/secrets/forgejo-runner-token.age and b/secrets/forgejo-runner-token.age differ diff --git a/secrets/freshrss-password-file.age b/secrets/freshrss-password-file.age index 1282e4f7..2c8087ba 100644 --- a/secrets/freshrss-password-file.age +++ b/secrets/freshrss-password-file.age @@ -1,27 +1,27 @@ age-encryption.org/v1 -> ssh-rsa LHsxYA -dsjOPIccU9GDYBMAxFpmZCgvYU1/UxtsA1H+CaSMQF1TFUGmWvvI6eaDxuxv3Gzm -+bfV3Hg1YA5yFQGKMdC2Vw8pQ342MRCd3XiF/PVTGkKR01MezRfg3027N29gbTWb -K2/MV1E3W9r59UmtqwBB7uIdcrqiiOqnS1GzKK8rYn2t7a2rCK46YEpZeO/Q5mPJ -ClYnXZBW8cwOLeUtK7S05lXrJPQZNbcMEMkrcmOgCzf/U+iOxT7SjVoiC7igVuiI -L26mAGH+hqfwsw1rxBZhTQE7L7EJ4ZPY29S4o5fcf+mPCZt0S5927nk1yh0u2pcX -p2o7FtwIawtZHrDfQ3bcIoNVXAJQZMS0Fre6t0oxSuAU7DpNZv0gwclRwEHlvLNz -b5NaN3blSskfOxAYhODW7XsqD4vR9+myCnCsawJIJQ2d53Qmh9atGX99Qs0YGPNf -Q0bajjfP+LsU75hOx/uG/sS/YB/RpXjWuIrC6Ex4cfSJuRAMIuMw5Ydo1/LUHYu7 -YbFiqFNA+t5KEEtIVPK6tXWJErxlJa7Y+LM/elG3EmZ03o8njVk9oSZeS5lQpcmG -GfYookw3LRe+6uG0pgPGKYXyzHChPdT6BWSGp6HPT/oGdoMl5FRUbj+DtMYEhjLW -Nxe4YnZ1elD87HM4wUmRycZkVI5uIbdRhMOMgtz0aA4 +j1OREhdvpiyMYw3rEjF2PvzDDfaprgwWYApqU6GVffgKNRmg4gDTx1pXcvJVDiaw +6kihL3P7XgzImdKDinQQcgqgjiYKG5B9Seg4LxjKQ1kniGCST6eiUMv3pSoimyhI +M0VgJZtef1O73ccrH8g0Ir6dC6hmQJqKBfr1KeQTgnDUdFpERtOz3Z4vqg5wwA7E +qlHICFfgV4ErNJ74Re6PIrkRhEl/mHnPxcSUDTd17/MZB3k7hYftRvbTVDi88PHk +y65qhtXC5BCLudIAoHp4QlEfIHSMrsKfXCloMb8EvRqpWSXhk7OltXEW9J62qL/d +YrCw2uKSibtZGggV7n1V8WUuTxB69Hs184AkpPs6TmQ+oS4kiaFgnd0GUt9ILZeN ++UZx9TenvnDsLG3TLSzeljmd7oVAsA5iGVdj7Mc+H6d8anS84h+TIj5ZnnobL6DO +aNBeS9JxhCetSLHzK0N96Kxy8mTXUGQOh0w9Y6zpdsSqpB75hiiExEi62QClk3KZ +/Hr1QX421mxq7CJMDc66MkePV/J0kZp04+HeqycE7rtkESpwmJ23C1HNThEZB+TU +ws1mwATxC/nYrj1jD3beRmu29HLQuDUWpQhmyodR/jSFAOPDvcwvsgklFHrO6vFz +91wmTv8bkj6ynODlj4G0ztqEPtixrltm0Oln5/7ZurQ -> ssh-rsa +vTWQw -s4N7DCR3C8bJM+S+XifygvVoklaJC3RviZghhgwizz5GSyj3jn8h7nrN5VC2EMBB -oxf8rc+IHWoNIDK6NZU52/BXbFdklLVJhVF6CqZq6MNjcpmkWXC6/qNmuHZ+b8e7 -tzMN3RVDKCNlzk5g1LGVUSYwPHiXfmTz3EKoXL1NMlEwBmq2ZIh0BI3+/+Tb5nK1 -XWv0GgxwrVKGtM4V/AN3sfTsp6M6IpnXtUdGXYlOnQffTsoEooiKFgDt/auswu89 -vyQlg6MNVAFporQ2KF+HwsfgAjkhzhKxYW/O5P3zlZEM0AyfSprq/etzgBnWIjiu -sdWXAdS4Gm7zJICTEkn7TgoxCGumiAVM5nBR1pscwOX7QtHLt7XXktnzKIk65zuo -ohuxSoZtBXBudsyNUBoW704VXtxScCehNkk8+uTIPVi39mAI6/viTLWo7S4HoaWJ -u6tSYW/EBEZVOBdQ2V1VSVFLyGovsmbUVma4t7u+ajy/477QpEJKGYLLlzj4KsuV -7vQ5kTEKRexiVkEZn82iw0mbwhK/sxugCqsO3bkUkHUYSKQgC260pQ2p5LC5Ij4a -hZZs4xK98eMBtYc8j2ti4B1or5eJ8C/8gFUX5uQ8fGX+zifUG8cNlIt9pkqfvsmC -00Mznp6iHdIBnpoLNlfsIP5SCfg7A9w1S2hN1cYe+Xg ---- m6ysIMe9qjwui6eXnfgq5f1DawXK0PBTKufFPcafh6I -Y#=jaHy:hhnƻG׿!!CG{K#Mh竌 \ No newline at end of file +ZRoYEUwx83na/kpUUKHhAfbw29pH4PlMUjpNsoOev6ABkGlntIPE0Jd7zTp0s2nB +RUwYtqKG5JZX204dtweBFvcFdRZANjj4SmFth0Ld8X1zZK8TwYhWAQzlmld/TDYJ +0jyzaSzvXEiX4/XKGz+bFbPUvzkwZB1XEFgMJ0z7taCXNmjfytmAO3LBwBnGDsxo +F4JTyc5TnITfYGGEOs/dLXMBW/IX2sJ9PPFtQ7HKeb8m/bJ1mYECSHXkVRg2aYma +ZCwxwx2dA42VC/OJay4S9Jbg7ZlA/xjySPXTlQ39z6xEmDmzU69+y/n3TJ5dGK34 +iQHTpsdBDXI6Ygl7+5IPFbm+c/29BEtxth+h3EW4tF1BgX+OmTtMZl/PYKwsmij/ +QkohDODh6Em4tzLK7Rk8X7LjVmLx60rvY/XGGQIc+0jAzpgSZgiKlG40aEpaFsg+ +q3zbZZLK+54YPRoRQtTTDO9vbhj5qj+TrB1OIrMKO/yjhTywN2F0bj2WsgxOnmXo +kwDK5KivYPWBaNsKnaC0LPB/Ek6tqP73lCmpNUQcXMoj2PKzdqEaTRFimF3V+csi +/kPyDGt0fDpz0zGL45+ejs2+27tupq4xhg4FzsUepCaPCKEmGcXJdcjOM5QLibXb +l9/U8ZgfBYh67HUeILRTXKiPz+E49byf4AcaHivlAZQ +--- bIOX6PrFM0yQl7KKCzBVwq60AaZLL5UEwSjhz8egwNU +6O-ىAlxoMRR?@8 Fg렅$ą*O ” \ No newline at end of file diff --git a/secrets/peertube-env.age b/secrets/peertube-env.age index 3250ab2b..b468ee6f 100644 Binary files a/secrets/peertube-env.age and b/secrets/peertube-env.age differ diff --git a/secrets/peertube-postgresql.age b/secrets/peertube-postgresql.age new file mode 100644 index 00000000..5d670bac --- /dev/null +++ b/secrets/peertube-postgresql.age @@ -0,0 +1,27 @@ +age-encryption.org/v1 +-> ssh-rsa d9s4lg +P+CN/o33Pdi+9o7pr5vayKdU3+oyxDSwL2zvvSuqvRAMb7sWGeMsuyajpkQ9xmQ9 +vx7a4kmUa9fym5zUqMAfkksAIBn9w4YgIIuY3EQ2NVGm9sJBgFwb9XiyuD338TnT +RnEh7QetFK3suA+gFL6K78Nj+ZIy8nUgu1Qo6fKS9JqMxcSM/nLXardbithnja6v +CBwwd04mm0B9NXR8D6jqSoaxCzhsNph+K3CquxVWIuz9mq6LjRNz2g9lFzdxITP2 +aABiq2t0V41PFShe6ljIWQqU3oycwgdwlzyGAIeElNRLctTeN/oJuBGlO+U+647H +NPCmQdW0XBtd0q/PKPDWIiFrYtM+v4+z3Sj9EWs/1dWL8WwjttCNJFk2/OERlAoo +SiZ/JjkCKEFPvDHztjC7KRzDzU5wZyK6jkx8WmObN0i8197RgMfQvV01MLoL8Eof +Ke1rDE63EmlQmydp8hBb963kKjjjI1bAgC3OaAeFvb1xV6v+kIOq4q1WSRHaXAev +6pNgEj33BHGDPhvfrClGhgtxlAOtN6wmAhTrdiDTySVHqm7hX9pQOgE52p6/JK9y +JcWCE1kz8OTCYuOBQpomkTDZfzB5parwE/dtIlBCeN5Q0RyQat4FG9CpuNZ5OVP0 +OoIFyXXxhOugoD0EN1VrOD2utmL8XGqDbuJBpEFJvdo +-> ssh-rsa +vTWQw +MOprL8YVEVDjiV1z6VEW28iWv2GR66PoDhFb6EU6kubJwjg82njxjFbVjhHmzdUT +TK3Gmw3rnMMW2i462ErJOZNs1iE3dtRmTTfQKNsY1d730l9aw8SoNa4q37CtNsjm +lxhgYI7a8I+Xsx/of9SmzzuYuLjV5vIojXxBF6LqjMvj0p/YucJglYpnJLAzaIVh +l3cH30+SlKxIF8lwnbZyDohtUCXdKRfiS/raxXoZGuV0kcuZxnAF1QByWgUjn+p7 +uqySgcFBDzBsG+hTfyJykoSqzlxRjBu43Pc+2AN63ISeBE7B2eaen/3CMgam9eEc +DFagP7iUgPp4jV+D/ekoDhMYQFlF7GlsVpGnz0cfYFyw8cIU6QIxTm/wIFRwFj3D +q4MKkYMee/Rfi8n3OGQdArCyn7KrQ7ZTUtN37C54yVRY+w88FV9kJDt+jNXOxmch +H6IghmmiEkAxXPCVIo54KGVpI9OZhQKYDF+I10Dfp2+VOrfYSX8mm7nVxFr+r0qi +FRpcCLzPyrFTsrKdJmwk8dS4FH1pjYdPehw8xsklwYkwVwU1VTi+LRkDzUNBry2h +iBuZS3soTOODpnL4xKXlUKmfl6n9uXDJqpuk7NU9dxpvrYLCsdT1R9hUYhyWB3xk +9umfPlJcR30c4B4ej0W4a9g8Btf6hJ30f6ETcwUfyhg +--- vr16kY/SuUucPj5lPOJQDgYTWc95V8kDBVC13fDZ/Q0 +9Jq&{t@t»*Ԋb91Z`IDv>gHR&k#+@]fXe?{a/ \ No newline at end of file diff --git a/secrets/tubearchivist-env.age b/secrets/tubearchivist-env.age index 10941d47..a01df33d 100644 Binary files a/secrets/tubearchivist-env.age and b/secrets/tubearchivist-env.age differ diff --git a/secrets/vaultwarden-env.age b/secrets/vaultwarden-env.age index 646406d8..9fbb43d0 100644 --- a/secrets/vaultwarden-env.age +++ b/secrets/vaultwarden-env.age @@ -1,20 +1,17 @@ age-encryption.org/v1 --> ssh-ed25519 IsVD3g 5gSpvGTdqHOcI8Kj0fBgI3U83gcDqx8byKp6i2yPGWk -X+5vDb4/mCLENgiwfNaOUuLEgakb0mNNcaXon0Eh0PA +-> ssh-ed25519 IsVD3g bjfZSHmDn8PuWln9U/qviUQ/9pe2hoSlZzZyyb6BICs +APKtdXuFVV+oD2czoh3DZo/ylDTGWfQQPDqYaHr6ZA8 -> ssh-rsa +vTWQw -VECWZU1kb3rVIugTUknoMPyf8LzRsf0AksD9/TtFVkEzstGsUmA+wdsBs4/53ylm -tAXZBdcqwWJu4fFv+j6RxLiDA87/nxM2mTy7tkOOuR6s8SmaXKnzKu5KLVNyUQ5r -T2xN8sSkyb1FNTmrpXcXGryFLZRIYxTnXol+5iv/SAk/xkga3qFOZJh6cEEg+ldw -kzRIVkqdIGeVtQIEGUqvyX91zCfTuFgvtV2rtjtD5bLXj9HzwGujCTn7dkkNHL4s -uwGf1+uXE837Cgd3P41U7uGYLO/aEZnl09M1FvW+JxvkRrBqHnocuLjstmZJqKz2 -Q9AT0tRXBVI7sK6lXV4XYkdddqqaciIO2IhGvdchRTnm+ulxcP8BcggBAqLcwmPT -kLIm2JTsixQY58EOWTV0ennmASNTNJcsCUDR1bKzC0FXMolLzfzvE3fb0A0ktZ1s -04zwlz19Q6XheJS24nQh/qJb4/WXJyTFK7B+qLe8/Rs8PuUc88JAb2BLmvwiVFK+ -yd6/uCnpidGXw33D/xKDIotQ/9LHBs8s6AtE1mUxQ1ta7nmxzMRFc1R9pLCWzm2Z -lt7b9rhs0fr3jRxmOdwDPRoyOaWYPrmAGlEgeKZ431SqwJgPiTBOJ0LIPzuSZS73 -8HID3Ocz9hdqgpdpKZ/dj9Rs1JI73rO5Ja1iX+13jcs ---- Godk6+qRPOlLf6ndLIKUB0mmiRhiAvZM2y6kVRYx20w -leO3>,@tvd,gݘݤ -]@I EHú\/j2A8\wK/sֲU"T~Y/X?SA)վPNGŔG _?=Ø -r|kBc֎I D4iZF-ؿiZY7V23ta=bcSImVwD%8b11hk7[d!SA"%J`1*OTwe廉luE[į6cNvtsD\ \ No newline at end of file diff --git a/secrets/wifi.age b/secrets/wifi.age index 74d16d39..f0f7509c 100644 --- a/secrets/wifi.age +++ b/secrets/wifi.age @@ -1,17 +1,18 @@ age-encryption.org/v1 --> ssh-ed25519 IsVD3g OgUk/1XzP5iKxGQ0eH5piMXWApTmvTsw3nuWKVzGowk -4/L3oacHwEPeJP+32I9w2u+6GIGiyKHYLZUU9yJk42M +-> ssh-ed25519 IsVD3g pFvPtSZjJiFnV3Ygd0czwFXPgZ03Ir9G2UrmOgb+Sng ++z6MbHoLH8BFwjg63NGVbY0Cq1K2J0ImQnE/QZcztNg -> ssh-rsa +vTWQw -rkvZUW1MnCF9e/e2lcrD/Qcti2TJKfe6023Z+4OCAQHPkQoOy56Z4IJBPnbLq1ip -LCDDvGGCMb8Ss39qRPtxKgdJY4vkBAhQwpNk7qMUPOMPpZm1+ogxzOpq6e3ai3iN -J04PbEtKBJzJTDj1aZ7NBO65rhRC7I2YV2gJ3BjetqkqGh2ZkE+k7z66mIGjcJ1Y -sp/4te6U2ALiM60N75p9pzHwONHRgtHVjpKnFs259OvoIITgqItDVqi9+76G0j82 -8kzjugAUkpSUlIeSNVZN9inD9hF2VWfs09nnlJJv/oMfMijZaX0jJkf67QUqmrFn -drK3TYv1tuSGnPXOLcc32QhAMg/DWajynk7JuBPfLMBkQ5ZXeWi8Ktu+NZZUhkB/ -kZ7isKHxQZQ3RXBbWPyvdbaYjYzV8ZV2fGb4m/Z9pPIbICzMZBk7CcRnJsC5vryT -9bwV2WkZiNl9IIIaWVQ+LdFsy4ynAGL1lRMHTxj9asSG07aOhlitH5FhWtKr1Qau -GMBJXCHStxwAowAtZrN8wy0DV4Bb60xzUWFTyjH5KucBBj7xA4B+7fXhcfMvh83h -gw2ot+Lq8GY58qSIzUx6+viiMgVNhlm+QswWQ7CNA6OpXBfyYnLBZ+B2uvLQXnq9 -v4FfB8UpvCZpG1/exNAsO9xTfQLyL5g+N5qyuDQ3l6A ---- UCP4UXUZidBLODFARyHXyABkYbE0qgDig1eNnFXQPx4 -4yP5itncA+;N^/eDm=5{͠)foi-iNm[%De2l \ No newline at end of file +NbgHGYRen1V1kzeVFMk9Do2CXLxrel1sbA3KADVKsnbmJZbDyE9YIlAdcy+L0Jux +li6TjUvhLz6ZJw6yEuaH/+82z7kKYDPbwrzgqZOrTJfn/a/2Efr4b6zydoO8bbZz +es6eA7akwPy5xUzjiB2gIcZy4z/xdJRFjXE2LM9STXPRPz4Dx/FDOLuarYI3NuSk +H8e6fIiqaGAn688j23kp2hqYYo9NQN/L3RtVQhkMr3OmTb67Y61d8FA2BF2DrW5b +KswLYrPN86D+vxKTDJkfjmDu4w/w7MevUTFC2nizFtRDAtcRk+HkH3mAbhs87al9 +4GLU8+gq0O/EL/1RO+gYEGPjESbWjqPrI4btHPgCRziaMtYq6DaQuxJJ19UYM8Og +o0EKrwz7FeXTnST8dm/fGa2qlpEhVCAjifTx+aqCb2kkV1X0VawtUmQdxlt8RcHp ++ZOF3GkaPI8U0PDcWpu4LLUOVOUzqLrHi7GE5t/e7o3/61q5q5Jlf2dadiAxY188 +oopUkirGAyI5I9uruw973l7I4TXDIT8MNmT6XeIvFoYVepCYr/1rR7eDzv5yK3LO +38LSv1RHCULvsDthRhziD1CUlbjIgAZ5YV0ZYK07ZYsnlS8Ms0tWjI8HZ8bQV08V +h11bTlnWuPAUlAW5UVHmg38uEChFog8rJ3YwbtK2ajg +--- Yw9P1zum7z+ag0WxG5dZ4fiUi64l6dLhQhQLTdKIOxs +<O;.iZ9 K88p\%W1!Iƥ^ +<!~ߓfz"ˠ DD0- ,H$K֚1J8f/ \ No newline at end of file