Migrate peertube to home02
Some checks failed
/ check (push) Failing after 11s

This commit is contained in:
Oliver Davies 2025-11-24 23:46:07 +00:00
parent d81dfb8606
commit 4701206195
16 changed files with 173 additions and 175 deletions

View file

@ -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}";
};
}

View file

@ -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;
'';
};
};
}

View file

@ -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;
};
};
}

View file

@ -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;
};
};
};
}

View file

@ -10,6 +10,7 @@
nginx-oliverdavies-uk nginx-oliverdavies-uk
nginx-ponthir-taekwondo nginx-ponthir-taekwondo
server-forgejo server-forgejo
server-peertube
]; ];
homelab.services = homelab.services =
@ -20,10 +21,19 @@
forgejo = { forgejo = {
inherit cloudflareTunnelId; inherit cloudflareTunnelId;
domain = "git.oliverdavies.uk";
enable = true; enable = true;
domain = "git.oliverdavies.uk";
sshDomain = "ssh.oliverdavies.uk"; sshDomain = "ssh.oliverdavies.uk";
}; };
peertube = {
inherit cloudflareTunnelId;
enable = true;
domain = "videos.oliverdavies.uk";
};
}; };
nix.settings = { nix.settings = {

View file

@ -39,8 +39,13 @@ in
] ]
++ [ users.opdavies ]; ++ [ users.opdavies ];
"secrets/peertube-postgresql.age".publicKeys = [
hosts.home02
]
++ [ users.opdavies ];
"secrets/peertube-env.age".publicKeys = [ "secrets/peertube-env.age".publicKeys = [
hosts.nixedo hosts.home02
] ]
++ [ users.opdavies ]; ++ [ users.opdavies ];

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -1,27 +1,27 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-rsa LHsxYA -> ssh-rsa LHsxYA
dsjOPIccU9GDYBMAxFpmZCgvYU1/UxtsA1H+CaSMQF1TFUGmWvvI6eaDxuxv3Gzm j1OREhdvpiyMYw3rEjF2PvzDDfaprgwWYApqU6GVffgKNRmg4gDTx1pXcvJVDiaw
+bfV3Hg1YA5yFQGKMdC2Vw8pQ342MRCd3XiF/PVTGkKR01MezRfg3027N29gbTWb 6kihL3P7XgzImdKDinQQcgqgjiYKG5B9Seg4LxjKQ1kniGCST6eiUMv3pSoimyhI
K2/MV1E3W9r59UmtqwBB7uIdcrqiiOqnS1GzKK8rYn2t7a2rCK46YEpZeO/Q5mPJ M0VgJZtef1O73ccrH8g0Ir6dC6hmQJqKBfr1KeQTgnDUdFpERtOz3Z4vqg5wwA7E
ClYnXZBW8cwOLeUtK7S05lXrJPQZNbcMEMkrcmOgCzf/U+iOxT7SjVoiC7igVuiI qlHICFfgV4ErNJ74Re6PIrkRhEl/mHnPxcSUDTd17/MZB3k7hYftRvbTVDi88PHk
L26mAGH+hqfwsw1rxBZhTQE7L7EJ4ZPY29S4o5fcf+mPCZt0S5927nk1yh0u2pcX y65qhtXC5BCLudIAoHp4QlEfIHSMrsKfXCloMb8EvRqpWSXhk7OltXEW9J62qL/d
p2o7FtwIawtZHrDfQ3bcIoNVXAJQZMS0Fre6t0oxSuAU7DpNZv0gwclRwEHlvLNz YrCw2uKSibtZGggV7n1V8WUuTxB69Hs184AkpPs6TmQ+oS4kiaFgnd0GUt9ILZeN
b5NaN3blSskfOxAYhODW7XsqD4vR9+myCnCsawJIJQ2d53Qmh9atGX99Qs0YGPNf +UZx9TenvnDsLG3TLSzeljmd7oVAsA5iGVdj7Mc+H6d8anS84h+TIj5ZnnobL6DO
Q0bajjfP+LsU75hOx/uG/sS/YB/RpXjWuIrC6Ex4cfSJuRAMIuMw5Ydo1/LUHYu7 aNBeS9JxhCetSLHzK0N96Kxy8mTXUGQOh0w9Y6zpdsSqpB75hiiExEi62QClk3KZ
YbFiqFNA+t5KEEtIVPK6tXWJErxlJa7Y+LM/elG3EmZ03o8njVk9oSZeS5lQpcmG /Hr1QX421mxq7CJMDc66MkePV/J0kZp04+HeqycE7rtkESpwmJ23C1HNThEZB+TU
GfYookw3LRe+6uG0pgPGKYXyzHChPdT6BWSGp6HPT/oGdoMl5FRUbj+DtMYEhjLW ws1mwATxC/nYrj1jD3beRmu29HLQuDUWpQhmyodR/jSFAOPDvcwvsgklFHrO6vFz
Nxe4YnZ1elD87HM4wUmRycZkVI5uIbdRhMOMgtz0aA4 91wmTv8bkj6ynODlj4G0ztqEPtixrltm0Oln5/7ZurQ
-> ssh-rsa +vTWQw -> ssh-rsa +vTWQw
s4N7DCR3C8bJM+S+XifygvVoklaJC3RviZghhgwizz5GSyj3jn8h7nrN5VC2EMBB ZRoYEUwx83na/kpUUKHhAfbw29pH4PlMUjpNsoOev6ABkGlntIPE0Jd7zTp0s2nB
oxf8rc+IHWoNIDK6NZU52/BXbFdklLVJhVF6CqZq6MNjcpmkWXC6/qNmuHZ+b8e7 RUwYtqKG5JZX204dtweBFvcFdRZANjj4SmFth0Ld8X1zZK8TwYhWAQzlmld/TDYJ
tzMN3RVDKCNlzk5g1LGVUSYwPHiXfmTz3EKoXL1NMlEwBmq2ZIh0BI3+/+Tb5nK1 0jyzaSzvXEiX4/XKGz+bFbPUvzkwZB1XEFgMJ0z7taCXNmjfytmAO3LBwBnGDsxo
XWv0GgxwrVKGtM4V/AN3sfTsp6M6IpnXtUdGXYlOnQffTsoEooiKFgDt/auswu89 F4JTyc5TnITfYGGEOs/dLXMBW/IX2sJ9PPFtQ7HKeb8m/bJ1mYECSHXkVRg2aYma
vyQlg6MNVAFporQ2KF+HwsfgAjkhzhKxYW/O5P3zlZEM0AyfSprq/etzgBnWIjiu ZCwxwx2dA42VC/OJay4S9Jbg7ZlA/xjySPXTlQ39z6xEmDmzU69+y/n3TJ5dGK34
sdWXAdS4Gm7zJICTEkn7TgoxCGumiAVM5nBR1pscwOX7QtHLt7XXktnzKIk65zuo iQHTpsdBDXI6Ygl7+5IPFbm+c/29BEtxth+h3EW4tF1BgX+OmTtMZl/PYKwsmij/
ohuxSoZtBXBudsyNUBoW704VXtxScCehNkk8+uTIPVi39mAI6/viTLWo7S4HoaWJ QkohDODh6Em4tzLK7Rk8X7LjVmLx60rvY/XGGQIc+0jAzpgSZgiKlG40aEpaFsg+
u6tSYW/EBEZVOBdQ2V1VSVFLyGovsmbUVma4t7u+ajy/477QpEJKGYLLlzj4KsuV q3zbZZLK+54YPRoRQtTTDO9vbhj5qj+TrB1OIrMKO/yjhTywN2F0bj2WsgxOnmXo
7vQ5kTEKRexiVkEZn82iw0mbwhK/sxugCqsO3bkUkHUYSKQgC260pQ2p5LC5Ij4a kwDK5KivYPWBaNsKnaC0LPB/Ek6tqP73lCmpNUQcXMoj2PKzdqEaTRFimF3V+csi
hZZs4xK98eMBtYc8j2ti4B1or5eJ8C/8gFUX5uQ8fGX+zifUG8cNlIt9pkqfvsmC /kPyDGt0fDpz0zGL45+ejs2+27tupq4xhg4FzsUepCaPCKEmGcXJdcjOM5QLibXb
00Mznp6iHdIBnpoLNlfsIP5SCfg7A9w1S2hN1cYe+Xg l9/U8ZgfBYh67HUeILRTXKiPz+E49byf4AcaHivlAZQ
--- m6ysIMe9qjwui6eXnfgq5f1DawXK0PBTKufFPcafh6I --- bIOX6PrFM0yQl7KKCzBVwq60AaZLL5UEwSjhz8egwNU
Yì#=ja¬<61>Hy:h³áªhÐnÆ»G«×¿!!C‰G{ëÀº<E280BA>K—#MÎøh竌 6¦O-´Ù‰A<>lxoçMýõí²RRË?<3F><0E>@ù8 Fgïë …õ$Ä…*èOР”‹á

Binary file not shown.

View file

@ -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
9J¿ôqÌ&å{étÉ@t»™*«ÔŠb91<39>Zê`IDv>gº¢HRô&k#+@Ó²]ƒàfÐþ¼XÛe³?ƒÔ{aú/

Binary file not shown.

View file

@ -1,20 +1,17 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 IsVD3g 5gSpvGTdqHOcI8Kj0fBgI3U83gcDqx8byKp6i2yPGWk -> ssh-ed25519 IsVD3g bjfZSHmDn8PuWln9U/qviUQ/9pe2hoSlZzZyyb6BICs
X+5vDb4/mCLENgiwfNaOUuLEgakb0mNNcaXon0Eh0PA APKtdXuFVV+oD2czoh3DZo/ylDTGWfQQPDqYaHr6ZA8
-> ssh-rsa +vTWQw -> ssh-rsa +vTWQw
VECWZU1kb3rVIugTUknoMPyf8LzRsf0AksD9/TtFVkEzstGsUmA+wdsBs4/53ylm EkwsFUVC6fLeja+JpF28Mbc4te0JzVQhyqn8OdIxtouzO3LV/W98jDK70jSLbUnT
tAXZBdcqwWJu4fFv+j6RxLiDA87/nxM2mTy7tkOOuR6s8SmaXKnzKu5KLVNyUQ5r 6GxUbdaVtB8VSXwXqS43dniKApxou4qJAx8gQUM5omfrb1AJ33aMZ+2/pA9newxw
T2xN8sSkyb1FNTmrpXcXGryFLZRIYxTnXol+5iv/SAk/xkga3qFOZJh6cEEg+ldw CbFZ8pFvMiFesMFU/zyzJHtbPcULUqj0x+C8Q+Ay4DjGGzKfEK48S9gr67E3eWM8
kzRIVkqdIGeVtQIEGUqvyX91zCfTuFgvtV2rtjtD5bLXj9HzwGujCTn7dkkNHL4s XvT50aHLRhSBN6qxO7OYi3/hI+NrJ7wZeD3bwKXmE4U5thaxrKJzx/p3CFLofsir
uwGf1+uXE837Cgd3P41U7uGYLO/aEZnl09M1FvW+JxvkRrBqHnocuLjstmZJqKz2 ORfA5Bt6Qs3fRhvET1rYAz4ZaHNdX11wwC6ybnNmmfK+oxco+D/vtvq9RNo0r/gs
Q9AT0tRXBVI7sK6lXV4XYkdddqqaciIO2IhGvdchRTnm+ulxcP8BcggBAqLcwmPT 3QDMpI1NKJTjzQqvBxPzmw8JE7oUEdjLmulFvXPUfU96EFIRtJq6EhNIS1UPSbyv
kLIm2JTsixQY58EOWTV0ennmASNTNJcsCUDR1bKzC0FXMolLzfzvE3fb0A0ktZ1s epWlN7uZDS8sEWr0yKOugpJMlEgoARv4Xl5eoE9+5rbIIc15BaQFL90fC62dA+qx
04zwlz19Q6XheJS24nQh/qJb4/WXJyTFK7B+qLe8/Rs8PuUc88JAb2BLmvwiVFK+ JXORWaDK6CNGBssIpjNbtheUlJIGiqRm/bAlhCSSSNfJiHyTbwUIsfqqCShbW8qV
yd6/uCnpidGXw33D/xKDIotQ/9LHBs8s6AtE1mUxQ1ta7nmxzMRFc1R9pLCWzm2Z Bj8B3D8fvDBHyayvl+VEQoktUY7YyUMsDSsrayS2DM1QqTqBfs5UQWExiokCSFQA
lt7b9rhs0fr3jRxmOdwDPRoyOaWYPrmAGlEgeKZ431SqwJgPiTBOJ0LIPzuSZS73 BoIfpDEMpH+WchF90SgB5ujEJHdTmZShTyduC2E+4N7rxtwxd0ssJBTM/3qcCqNq
8HID3Ocz9hdqgpdpKZ/dj9Rs1JI73rO5Ja1iX+13jcs 1bjzPFBtp7Aev6j376C3nIVT5dH4Pd6zuHIPSdJDprg
--- Godk6+qRPOlLf6ndLIKUB0mmiRhiAvZM2y6kVRYx20w --- /LB9KNgFyE8fDKrGuWM8C9heaUA7TW7by81cB7CxCMo
lå¶ÚeO3Ÿ÷ç>,@ŽtÍvód,ýÌgÈݘðÑݤ M½uŽÔä²q\¾ÑŒtYÚ&b }<7D>_®å;Û<>ЯEž§žÔ$Paš1á¾v±Q2ãÅðÃãâ6<N7á”÷xbÑ¡røšAc+³8Rvö™iì m˜Îšìòo™}î‚øÕñ§æµ+}£v>cSÏÍImVwDø¡Ê%8 ¼b1§1h—‡kž7ˆ½ƒ[ùì­dú!àÙÔSüáA"®áè%§Jþó…`1*OîTówà€×e®å»‰÷”lÐÖuÀê±E°[įú6cN²„£v¨ts™„D\¾<>£
—˜]@I ¼÷E‡Hú©ÚÃ\/jå2ÖAâ8\wçK´/sÖ²U"T~íú¿åY/X?´SçéA)ÝÕ¾PN×GÅ”¶G ÍÚò_Ü?Ú÷ñ£ó=Ø·
”žr÷|kù¥Bªcþ¤ÖŽIÔæ ûD4ŒiüZF-Ø¿iZY7»V2´3ð‰tøa•Ò=b<yb<><E280B9>v³XÇŽº1ÚLno
$iWD8µ„:ö– †9Û0Cþ³î(grD

View file

@ -1,17 +1,18 @@
age-encryption.org/v1 age-encryption.org/v1
-> ssh-ed25519 IsVD3g OgUk/1XzP5iKxGQ0eH5piMXWApTmvTsw3nuWKVzGowk -> ssh-ed25519 IsVD3g pFvPtSZjJiFnV3Ygd0czwFXPgZ03Ir9G2UrmOgb+Sng
4/L3oacHwEPeJP+32I9w2u+6GIGiyKHYLZUU9yJk42M +z6MbHoLH8BFwjg63NGVbY0Cq1K2J0ImQnE/QZcztNg
-> ssh-rsa +vTWQw -> ssh-rsa +vTWQw
rkvZUW1MnCF9e/e2lcrD/Qcti2TJKfe6023Z+4OCAQHPkQoOy56Z4IJBPnbLq1ip NbgHGYRen1V1kzeVFMk9Do2CXLxrel1sbA3KADVKsnbmJZbDyE9YIlAdcy+L0Jux
LCDDvGGCMb8Ss39qRPtxKgdJY4vkBAhQwpNk7qMUPOMPpZm1+ogxzOpq6e3ai3iN li6TjUvhLz6ZJw6yEuaH/+82z7kKYDPbwrzgqZOrTJfn/a/2Efr4b6zydoO8bbZz
J04PbEtKBJzJTDj1aZ7NBO65rhRC7I2YV2gJ3BjetqkqGh2ZkE+k7z66mIGjcJ1Y es6eA7akwPy5xUzjiB2gIcZy4z/xdJRFjXE2LM9STXPRPz4Dx/FDOLuarYI3NuSk
sp/4te6U2ALiM60N75p9pzHwONHRgtHVjpKnFs259OvoIITgqItDVqi9+76G0j82 H8e6fIiqaGAn688j23kp2hqYYo9NQN/L3RtVQhkMr3OmTb67Y61d8FA2BF2DrW5b
8kzjugAUkpSUlIeSNVZN9inD9hF2VWfs09nnlJJv/oMfMijZaX0jJkf67QUqmrFn KswLYrPN86D+vxKTDJkfjmDu4w/w7MevUTFC2nizFtRDAtcRk+HkH3mAbhs87al9
drK3TYv1tuSGnPXOLcc32QhAMg/DWajynk7JuBPfLMBkQ5ZXeWi8Ktu+NZZUhkB/ 4GLU8+gq0O/EL/1RO+gYEGPjESbWjqPrI4btHPgCRziaMtYq6DaQuxJJ19UYM8Og
kZ7isKHxQZQ3RXBbWPyvdbaYjYzV8ZV2fGb4m/Z9pPIbICzMZBk7CcRnJsC5vryT o0EKrwz7FeXTnST8dm/fGa2qlpEhVCAjifTx+aqCb2kkV1X0VawtUmQdxlt8RcHp
9bwV2WkZiNl9IIIaWVQ+LdFsy4ynAGL1lRMHTxj9asSG07aOhlitH5FhWtKr1Qau +ZOF3GkaPI8U0PDcWpu4LLUOVOUzqLrHi7GE5t/e7o3/61q5q5Jlf2dadiAxY188
GMBJXCHStxwAowAtZrN8wy0DV4Bb60xzUWFTyjH5KucBBj7xA4B+7fXhcfMvh83h oopUkirGAyI5I9uruw973l7I4TXDIT8MNmT6XeIvFoYVepCYr/1rR7eDzv5yK3LO
gw2ot+Lq8GY58qSIzUx6+viiMgVNhlm+QswWQ7CNA6OpXBfyYnLBZ+B2uvLQXnq9 38LSv1RHCULvsDthRhziD1CUlbjIgAZ5YV0ZYK07ZYsnlS8Ms0tWjI8HZ8bQV08V
v4FfB8UpvCZpG1/exNAsO9xTfQLyL5g+N5qyuDQ3l6A h11bTlnWuPAUlAW5UVHmg38uEChFog8rJ3YwbtK2ajg
--- UCP4UXUZidBLODFARyHXyABkYbE0qgDig1eNnFXQPx4 --- Yw9P1zum7z+ag0WxG5dZ4fiUi64l6dLhQhQLTdKIOxs
4yP<EFBFBD>5i¥ütn<74><6E>c÷Ч£ö+«;¡¦„Ž<E2809E>§û†ûN^¶Ë/ÒÎßeDŸ“mÇö=¾5{Í ÿ–)¨ foiÆÚÈ-ÑiNm[%<25>ºDeÎá2·læ ¾<¬ÚOÄ;.iZ9§ Kã88p\¬%W•ý1!IÄÆ¥^Â
è<EFBFBD><!<21>~éß“f‰Òü<C392>ŽózÂ"¡Ë <C38B> ‡ëŸØD¬D0Õ- »æ“,åÎH$K…”ÐÖš1·J8òâf«/Äó