Compare commits

..
Author SHA1 Message Date
stb
816c7497fa Merge branch 'main' into jitsi-docker-compose-role
All checks were successful
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Successful in 5m9s
/ Ansible Lint (pull_request) Successful in 5m46s
2026-10-08 11:12:38 +02:00
8bf5690275 Customize with our logos
All checks were successful
/ build (pull_request) Successful in 30s
/ Ansible Lint (push) Successful in 2m58s
/ Ansible Lint (pull_request) Successful in 3m15s
2026-10-08 10:50:48 +02:00
610a1faca8 Allow UI customization 2026-10-08 10:50:23 +02:00
86e793c624 Use jitsi role to configure jitsi
All checks were successful
/ Ansible Lint (push) Successful in 3m47s
/ build (pull_request) Successful in 44s
/ Ansible Lint (pull_request) Successful in 3m45s
The host has been manually cleaned up (removed old packages and config) and this config has been deployed already.
2026-10-08 10:24:38 +02:00
dbac5ede16 Add a role for Jitsi in Docker Compose
We need this role to follow the recommended deployment approach from https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker/

This role enables us to keep our config and customizations separate from releases of the Compose setup the Jitsi project publishs.
2026-10-08 10:23:17 +02:00
28 changed files with 965 additions and 493 deletions

View file

@ -44,7 +44,6 @@ keys:
- &host_auth_dns_ansible_pull_age_key age18zgt4y2sd75hxnpe333zz39048ctxpr0q8a3uqh3jajjkyawsdrq8yg5ve
- &host_forgejo_runner_ansible_pull_age_key age1az0k6cadssk6r8qcqxfr8cyu5mndy59pwt8yqq6w065ew6au4ezsmg2vkf
- &host_forgejo_runner_external_ansible_pull_age_key age1pq1jqrcp3te50xugmv5wst3s9ahj0d38rfktxt43wlcqz7vnwyn3y2h7kyfr6rckrvmuk9m7yvp4efjnfsuxx6d8r9gn222r2eal5593arywrjwrgeypf745wyuvf3z2xk9tm5fgnwckftuvdggk66fph59rw69nt5dpjeewuww4vzt9gs4xelre952s7zjz56qv8tvesg2c89sp8rmy9dvhwfd6tucjhs6sjr6yp2njjra2u6w7c7f0sch3rwkw3wf2dc9su9aaa9q2f22sh5yf0fqejxa2qqpq4pg752589st5xsa5g8tpkjglj4tn35gd4hjj0xet9cjwhydmkmmkffy3nr8zdtctqu6pqsyf7aphvktryez39ru3qe7m6nvr465ffxr0ltvr85nddzxvcwpwpac64nu5tdfrxgjfqzc99vr3zxv8carpsw5evmruqlvrq6v6a4m2cwsz5gqw7nyk3jlj75kp5cnafzjn5dyrf8ppfhp5g5s34zsl7pejmmx2uuudjt7ru2y7as9mtagykrgqgt80fvp3eeh4gsmmd3ujgtp0ranq28aq9x0xdekqh49pfhhprjj6zqdfac5gxtjj736kh5jktc4ls4mjs3p33rzt6ze54uqsfept3qhua2pmugypup6hm6j2ek5sgxjnwvqyfj2l8vz4yfgkaxf699v7jqlwf7g68ang5kzqrjsu78lyardm4zen8zhrr24j334qdgs4zr8dhsfsnmvx9cdvu0swx27tcz8txs46zds9kekgmua7w7fnw3l2lf6zla956ssycac4zjy87rawr4thusxtcqgfzfzh2za9np0s34e5dwkp2l2k06cq09myxqfe7ze6a53d8sl5j43qcekh6kfvl9k0t7903q99pc35630zwm3hwxgnw354du5gngnz56skq9zx3pcnkr5eyh8r8t0dqudmvrrwmxreu6tgrklxw7yvu3zkjgt3gyjhc8kqcrevlukay45sz4k9zqxx9yrs88hzt4h52r2g74alf3cedes3atufy06q4lfq3nxdlnve0kqcwstzr6z6u7fqpqvacezdrr62ycteju6dqawkpthu0drtlxj547htfjcsnrmhgvhskwtuhk6yp7wp30p7qc5vkk8fegg6qx5kc9xs4trx7hj9xgydu7vd30hkceuxsczywjs9v2fl3svkwfypg62882yq6ltv7gfj4ajuy8ezd76g0z7juwspe7q6zs5ceshd6038tvvh2nlpjty6rg6a9qfzhgmjx9s6hynyk7xnq9zra6hxstg8p58x75hapd2mk6rapfunlnnkz5dsxjf4ud4dsvgjfjpzxcdy7sp8dzxtengrsdyu4824mqlw8p63d7m2z4mcyme4tm2qkugtdgrkyphe7akk2geukf6xkfkzd2pkdq5s3qm9fkvfkgrv6yw5kdgjak8xcgesg6tumans4fs8yrxtqlvv2z3emdvwchrjfq4xpzsj27yt4gdg8pknwz9tqpjkjxq6lysutrvwkvt2fwyj8wvv8wtmdl6fk6rsd9kq9a6wkhuq7vvrgwgj3xg2s229sprj4g2vzhy2dfesrp403gs64jqkrjuezwm4zd6uw2x4e2qkj8xqcf7c0zprdzu959x23u878vqqetgpjwt0z3kedt8l6dgpm0rf5dmrya5h3wgzfa0jjvgjphyxgxrwlrzpv4czgal933zs64tn90ks66ejjdaw4t67sch8r3q0kljeqnpdgmw0cpj6arc6k46wcqaccygczy76zt9362vslakvzqqv33tv3sjldp6qxprharmpm9uykgpx66343wuur5xj2aw0rgutpm4ztjzycn3a8d2jq2zpdzwmevezm7mkp9dmndkc3qz0kklgkxq9yehrk5ayfly97umhws0jll8qqg0r7gzxgw5vv76
- &host_matrix_sync_external_ansible_pull_age_key age1q7kz3pnfq6cvtn56rlfgs52efcvtcmaq4xny0va3x5wxj4vpgccsenwxk6
external:
age: &host_external_age_keys
- &host_status_ansible_pull_age_key age1p546j6whqsyfkjuf674lawrnk2ex653fuvwhcwt46gkrspkq59sqzm5y87
@ -234,12 +233,6 @@ creation_rules:
- *host_forgejo_runner_external_ansible_pull_age_key
merge:
- *admin_keys
- path_regex: "inventories/chaosknoten/host_vars/matrix-sync\\.sops\\..+"
key_groups:
- age:
- *host_matrix_sync_external_ansible_pull_age_key
merge:
- *admin_keys
# external hosts
- path_regex: "inventories/external/host_vars/status\\.sops\\..+"
key_groups:

View file

@ -4,452 +4,440 @@ sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHFyYkk3dyBuYkk0
ZzNwWGVvSnEvWjEwREpaTGpvRUVCOGZuRTVBK1ladVA5ajY5ODBRClFXY1ZYMElU
Mk54WUV4SXdUWmNpbVMvREhld3JTVFZ5OGxoVStYSVlNd0EKLS0tIEJUTFdRVlNI
cXV6bWpibEFYdEZVRnhIcDIvOXBzQkdYVUQ0RElxVHRqS00KueMwxtalr0DlYylv
lu8yuu/igntcbN8G+tyj28GstQJsVPJk7WKQ6TIX2xmuCDrhS5HykH9sUTxE1o+m
36UgzA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHFyYkk3dyBtb2wv
QUxXU0tZUzBBc0FXQ0ZpaWRsUjdCZGVzYW5yZllCQnBCRUlobUdRCkt2Z05NY3l0
TUpOODJZUUJDUS84WlJ4cG9yaFNzZDVKa2JBWjRYVFY2RXcKLS0tIFJ3K1puSng4
UUk5aVMwY3dLMVJ3RTgrenhzTFNBYnl4UzRYZTVKeUwxOHMKXg/vQz4w4t9+dmoS
1E7usTgQS5hIRPE1q/KfUJYctpJMo516nnBOUPZGzEQrT8yUV2uf23j0e9KTjzeY
FwAFuA==
-----END AGE ENCRYPTED FILE-----
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBQgnQAq6FUSDK8bxtYPjx3oRCAKG+xy9J3Gas2ztJk
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHBpdi1wMjU2IFZoZXNPdyBBc0p0N1g5
SXNacmViRTFubnpDV2UvWFhxTGg1QXpqcjhXbHM4cXU0ZGJWNworaXc4Z09QM3FX
amhlb3ZmeXJXdFhDd2x3WnY0Tmw3QVVISkJSeUJaRW1zCi0tLSB4SE13MlNablZu
YlVDWTEzOXRvUWszS2prcHpZcmVROGVHeU8zUUtMVEhFClk080enyfNCdttCqXaP
c1y6DPlMX3nf87yOPbjfAKp6fMU3BY5GNGheJFnsaMgakCF2QKlPRxOFY75/+TxL
qFY=
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHBpdi1wMjU2IFZoZXNPdyBBcUgvUTZB
OGlxTlpKNUFmZTRxODlwZ2RvU2Nuck9pSWc3RjNwaWZHUUJPZwpETkFJUW9zNzIv
U2o0enJvQzlmVnJiSG5yTmlWYVFiWUdUajAwL2tmQi9BCi0tLSBhbzdpSTNkOGto
RnF2U1ZpOEYvRy9iRWJEK2lEeUdXQ1BhNWIzVDZHRUNRCrmfKVOX6l1pDs6hOR6E
w/6Xex1yrxY84rv0wRfudyb4KyTbmnbqLIDMiH7pMMz5DARHFxTEnf4gdQXE9vFx
b3c=
-----END AGE ENCRYPTED FILE-----
recipient: age1yubikey1qv7jkffslarpma2fxjm9gnq43xfvwdws0m6y3u58h033edwdyg0uzt8jl5n
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtQThlRTJLeUh1dHlZTE5z
aGlhb0JqSWNZRjFFR25PMVR3dHZ4MzZ4R0UwCjQ5Ly91ZE5jQWJQZWFQUjJIejd5
QlZWKzNSaEhlN2NUOVh0ejhqK3NZK2sKLS0tIDRGWllIZWZQdUc0MkRCaWk3SGNE
d1RLcmY2bys2ZzlOZnV0cUtORnRnWE0KbHZfpiERwKLar7Qi62mp/kpaK60OwRon
n33HbK727DbaB7vGXx4jFZsB4vMqddWVfNq+ByxtJ6YfSq2cUtkLJw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEZXBNVnI3alVqY3VTamU5
WFBXTUFRN1dhZ3F3UFdnT3Zkdnl3SGFJeXlBClVkTzF3NmlVbmJMTlNWRUhPWTBz
MnQ0S0ZLbTRlMnZucy8zZElZMmFNSDAKLS0tIGZNTjlGbHlWWnpPNitjTVRZZjNW
T0wyN001aWhCNDdzWkYva3hSZVRRS1kK2TCbV5dde4tHTVfQerRuUfixxU2Z5aaQ
1rOxf5GdqmIu3HouAt/ALFtYHRPJXNsS81NUJeOJJ0KVq45TeCQy1A==
-----END AGE ENCRYPTED FILE-----
recipient: age1ss82zwqkj438re78355p886r89csqrrfmkfp8lrrf8v23nza492qza4ey3
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBUVDZsUjl0ajlwR0wzRUZE
V0tNZnJLREdlUjMvV0pXVzhWd0hORVlhdGxvCm1EUm5mM1lseXhQR0xISCtFZ21s
aXJ4TFlhelRsWGdSUFAvazI5L2w2ak0KLS0tIDcxYzdaWTN5OHh4R3FZK05oSWZV
M3hmMGNHY0t3WlN1TVlOOUZXY0ljc2cKHqdX4VkprUIgo9X3TIZfpZJ7m6wMtWxR
PO36ykssCrQ3fHCfhS+Dd8QjCNsQ4PFYa5LK1FdbwN3FVS2C90aGcA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmb3VnMjV1VVhEdURxdjB6
QlN3QzVKdlZJTG15YWgvWHJyTmllK0pOaFJRCm1HelJtaW5JbXh3bzBLcm1DQ1VU
Tm80aUxoSWlvODJLb2ZwclNQejQvQUEKLS0tIHNwNGtaYlhRWEF0eDFTS2xtKzBB
Y3p3aDdFcHBuaGRrN21Od3pybzM2TTAKpEGKYhhqLbu17zO1QKvuVzpmienlFIEW
KXOL5ZEQ3IDAWJkbq8anAIzNzXUo1Wez2KjMGBkB8Y1mgGC8MxSykA==
-----END AGE ENCRYPTED FILE-----
recipient: age1gdfhx5hy829uqkw4nwjwlpvl7zqvljguzsnjv0dpwz5q5u7dtf6s90wndt
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBZUEdZQ3lHb2QrbHZXQnZo
SkZmRmpCdW9XaWRjdkdNSWZyM3d1NUR5TVRJClhETGtoT2ZFSWFjek5JR0hQMi9I
Ukowa1ErRDdpQWtodUFsNEN2VzBSMHcKLS0tIHlEbDhrWkRnSXh4a2xVZUNzTjlk
NDY3Ty9rSHVBNzFLTUtXbE0wZ1ArdGcK1XSryr6gUZX3L33mROMaeOApnZeLQQ0G
HPr4sQJgrjVUL0vig8hiOvxDKfOE5eGgOtdrxMZLXD2cHUJjZMPqww==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAxbkE0a2YrQ2NBeXFwV0lU
ZWZEcU5uVHh5RXhoelkxM0ZlYUdRUWwvNTNFCnp6ZDkxczFBUE1lK1pvd29MOVFL
VlZCSzBFN0gvaVNyVHBwcVUyUGl0aDQKLS0tIGdOemVKTFAyVitiRGFpZGhXbEdk
MEF6Q3E0Qkswa0pwWGk0eEdKSUZXdGcKvEQSMlSepBlHKbB7/2JuCuJzbrg+jU/m
1c77UgPnVqbXGKW53BydebcE5R+wn5hvTKJXjWPBd3KtMiz+17nC9g==
-----END AGE ENCRYPTED FILE-----
recipient: age13nm6hfz66ce4wpn89fye05mag3l3h04etvz6wj7szm3vzrdlfupqhrp3fa
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRai8ydGVidHBrdXk2QWV6
TEd2d0p6S1lKeWlmRk9sOFhpUkRqeC83VDNJCkhqdEwyaWdwdkQvOVJZZUdURUQ1
bTB3SitrT21HNXdvRWVOcGRYYUtrb1EKLS0tIDJ6bDFMOXJxamt2Skt2VVlxa3Bu
K3MzQ243TkQ0SCt6dDVkV0xJY1I5M0kKD6Y73NEAQYUs5vWeV1GeIPZ2i1FJI3ci
Z5g2FbXtAONIJ4Nwg3FFqdK/q41sMpPa5/f3PwlvXEbK4eBrtdHWRQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSOExieTFabkkyM2puSEpw
dmVOVHJUamphRXNuSFFuTFZGSFBvMUFYeUFRCkoyalN1cWdyZlVxMUJwQ0VtNDdV
clM4TG5TM1g0ZjVVWDREd3BtMWgwck0KLS0tIFhCOUJobXRENm03U1lCT25KZDgw
QURXMDBldkhIMWtNUzc0SWo2ZE1OY2cKP2YLKg0JO3bIX9zE8GXIboSqVHtO5q2l
r7mTt3c7rCI0mRv2bhm9YkcBBhm+uAaEehDRxQ5lRZHXAWVTKTT6iw==
-----END AGE ENCRYPTED FILE-----
recipient: age1jtusr294t8mzar2qy857v6s329ret9s353y4kuulxwnlyy4dvpjsvyl67m
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2OFRxMmZMRkV5dkttQ3Y5
MFVqblo5V0tTaFpUaXBFanRoanpmWndSeEVrCldaTjhqS0xwWlpycWkyaHBZMVlI
MFFBaWMxQmVkQkdDdGovRXdtMVMvSk0KLS0tIGRiVkVjQkdZb2pubUoyL2VOVmJl
OHVmTG5iWWt2bkxvenBSdUpsK3JwK0EKZwjNeJiIMhDtfPYDOLS1vM76ddWw/756
k51dAKcT9WOmrBsxTMxLyZv2i0gs3XAoF2umi6CtbLu5wV3JSj8I+w==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJVDE4Vk5wbnZpTEdkeWZ6
WnNLdFlOWUI2SnRnbVRJMzVJaEs5ZmMybGxZCjBTeld2Z0Q4czZycmxac3VlKzIx
NEZZOWpuL2FqRlVGKzFwb3duR1BJM2MKLS0tIGQ5R3BmVzZ2aHhxcDVjbzh2V0tL
c1VZNmNGajNWVXg4QUsreDU1b2MraWsK/8c8FC+QLFiSJaqQDHWyG9LD80bMncyj
Yo0EQxNIDLEJjj5yMnSWL+rzO66HxQMfnQocoJKUvYqnv23kdChzpA==
-----END AGE ENCRYPTED FILE-----
recipient: age1a27euccw8j23wec76ls8vmzp7mntfcn4v8tkyegmg8alzfhk3suqwm6vgv
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtcU0zZXNNMXFWOUxyY2Zt
WkErUFIzTEFGeUtkMmRldlNmemY3aFBQQ3dJCmJLK2k3MGJHcUNvWUplNEZmVWN6
UUZ2anY4QkkwazNzcURGdTRQSDh5RkUKLS0tIDFVdnBNMDhpZ1JIckk1YzQwUjFM
bDV0WXpaOHRLekNMa3FBTjdKdk1jSFEKyEW36xrJyJkD4yW6qfkhtlkn9j8uk2G/
FbWFVfWKVVPLefeeUNCG1hssphnQp44gn0n3IlYLRxzmdwzuSZ+YfA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxRHp6Vkw3Ry83ZFdoVzdD
a2Y1T3dPZnVxS0luS3RrbjNrR3FEQk9DQlhZCk11bjkxbjF2Snl6RVJ2eHNGSC9L
OVJrbFFlbTJlc1hRTExiYnhra3Z2NVUKLS0tIGpvb0JZMWg5eDNuWkNTSlJJei81
K3N1RUgyNXpDZWR3bjVqZjBmUWYvVXcKkIBP6wlWZypntZpeC8HDij2vLEomMH3X
IaVPhDRN4UTfzK7iSYoUeGG0s1rytpEJ7z2gMXKuPm77yxy1XmGXfQ==
-----END AGE ENCRYPTED FILE-----
recipient: age133wy6sxhgx3kkwxecra6xf9ey2uhnvtjpgwawwfmpvz0jpd0s5dqe385u3
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAyRTJydk9OZ0N3R25yN1hq
bEllVlo1MlhWZk96aFFMcVM5MjI3dnhpWVE4Cmk4cVhKaFNTQWFQaVU2eStiYmFS
R0pjZElVcTZxODJHaGlGendXNnFxNk0KLS0tIHozREt1RG91a3FOVXZJNTdHNUkz
Q3NJR3Q3NzRBSjVGVjU0ZnlUMzRWcm8Kyeam0hAhQM5Bx1nqKoDRdqdycdu7NPsE
5u0G4gLiKWwhVO3mzLmhBBvKjp4OIWs2bK3y7+POCSXQlhNgHwZdyg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkWEl3alpsSGpKQittTWVm
dmdLU09JWlFMWitGZ0ZVNC9zb05QZHU4L1VNCkpQV014SnhzSHB4eFo2eWd6Szlx
WmhKMjhJWGN0THVsMEdHajVzNVozK3MKLS0tIGtVR1Evek5lVkpFUjlKK01iZUoz
QjJ3Tnd0SzM3YVhVSit3NVk3V2FJN28KD8pkbpghiDdDydDjO3Tzn89Xg6SpwPoo
1JWbUcXwL5YMOz1ZLbWcP8gDzC+xGFoQEVGydzsiTRyzBndyF4scig==
-----END AGE ENCRYPTED FILE-----
recipient: age1na0nh9ndnr9cxpnlvstrxskr4fxf4spnkw48ufl7m43f98y40y7shhnvgd
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMdHNUcGVxV0VScDc2R2Rs
MTNNSUsyRU9TUlNRMWdiSWE5bjIzYnNXbm00ClVpVUw4UE9IVDlyUXRMWVZqUW1z
S25jQTQxcXBiN1RsSTNFbG5HWjc1NlEKLS0tIFFtWENqaDlWZ3BUbWo4ZWQ3Sk9V
MG1qTlRHSitJa0VjS0IwMHREMzJsM3MK33pKvGNISdlyofjZCSWtAp2TtEnkgDL4
1t2n/dKQ/N5B4A1GYbmezv6Rqk82CPqCR4aEEcAKNOQrkH6VSUhyxg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkNzNrK2doMzY4SWN2WHRC
ZjlTOC9HK3c2QnFXWkZLa2NJWURmSDJrL3hvCldCOXNOZ01YWjVkVCtLMzd2SDRO
SDgzQWduNWRMblNLMEpXNE4zNnhrYnMKLS0tIEVaWlFubGhZSDFhc1JSR0QycTZs
dHFIVkVhM2dicGpjdHdBM3Mvdm1YU1kKZ4nSq32LtQfToeRlTkPNQwK1vS0Sp4td
5A+if0MWHHeGLmkeVbczfboxzdqyqCn9SNR/HO2SwcfTAVh+X7D9zw==
-----END AGE ENCRYPTED FILE-----
recipient: age1sqs05anv4acculyap35e6vehdxw3g6ycwnvh6hsuv8u33re984zsnqfvqv
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzQzN6WXNIelF0SWU3bTRt
NTBmODljL0t0aUNwbksrdGpSanhhOHJFUW1zCjZLQWYrRklnb0xiZjN2cHBIOXZp
S2tvRnBwSFdiM2lsbENheHVOV2V6VEUKLS0tIGZXcCtZNjQyUU1NSnJFbUxkeVRM
M3B0ZDZDei9PMFFSWHdQYTBIRlhGQVkKfXKL6lBiErI8PUUsQgmLQasMuGcswdP0
KKXwKH9DQwpLJzUTCB6PPfFZggv5bmAFjUHoOUdPwHWpQFa9o2LNRg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFdEtKdTFxYzJXR0lZYXJN
ZU9CMGtYME5xTjNvOTJBY2hUTnVLVUFOd1M0CmYzQ2haNEsxRzhVU0szYVdLZ0Yr
dkJEQnM4ekk3TkFsL3Z6TzYwT3VTOU0KLS0tIDN1Wld1K2o5WGczWTZOay90d0J6
dFFtNE10aFFwbE9TdStncTZEdFBXSUEKjhbDMGLL/8qj2Mv+IACzzhfhINhsN1ko
/JDtoLtid40UxZXex8u7nuTK6DK7w3OkLVh3Zfg1oJYksCgM1CykuQ==
-----END AGE ENCRYPTED FILE-----
recipient: age18qam683rva3ee3wgue7r0ey4ws4jttz4a4dpe3q8kq8lmrp97ezq2cns8d
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvREVZL1BxdkhWVk92bUpE
MUFaSFRXb001bVd4V0hpV1dIMjVkNWhsT2hFCi9Pdm8ya0dGNlI4aDZUdGlpTllW
a0dDN3lCVGR2dzdtOEtEWER4L3d1UGsKLS0tIER2dTFTbGN4eTZ5dnE2TDBMSUF6
RGk5QzZVUjB1Q24vMWtoVXc4Umw0b2cKb1iHjrU5rFyCbbcXKX0DoZZeC9SQDimb
09oEzR/5bPb4zPRwWC5cUiI5TTjxKiW34p1Qo6eSMUNc8rh/5feNtg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAybklqRWMxaVRzRHhtTmtq
b2hNSy83QkdMMjRFZk1zeGFXV2YzVmxyV1M0Cmh3eEFWSTNHMVZWS0puUkJxMVZX
dXBnWTk1WnJ6MTlCVFY3VTVHU1ZlU0kKLS0tIDJxTXFlY0RuOThwTW1xR3cyZ1RM
SXlQNDkxV1cwckVSamlHN1QwTmUrMUkK4W9qh7HkfLzU1B14JbbhYHa/xCZLdlYn
rl7cOdxU1+4RFa4+uc1i2+pgcWZlQBfiDwIxN1+vn7cpiM/hmkcg9g==
-----END AGE ENCRYPTED FILE-----
recipient: age19rg2cuj9smv8nzxmr03azfqe69edhep53dep6kvh83paf08zv58sntm0fg
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDYTBybklnZW1QYjRzS3NE
RCt1c1BPS1RjZzlTZGlMY3hQZWI2bU9wamcwClNtSFZmZmlRMXpFQ2pyYW5hc00v
bjdpb05SMndiRlZJVGhEWk9GMEJTZ2MKLS0tIE5Fd0dLdjYvM2owWGhBcUc4Y3Ja
ZTlVSmlmazdKYkM1WU1YWldFNVMzUVkKr6FR6B2zLKjgiQhVPGAhVHJJfyTBTnfC
pw/Ox/qSDtniJWj2TD0rvM06+4lCVGDDcO44kgDLcILzX3mRFC70XA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMYjVaVXQvM3hMMUNRcUxI
YkRaQlVQK25BOXBJNjlLOW5nanRHNytGUTBNCkFiZHZYT25SRFB4MkZqcDBoeEh1
WTZLNGRHWm1KUkhkTnIyMkxGaW5mSzgKLS0tIGJBdWw5d0puN2dOSWtTSVBhamJ4
T1BwSEZHN2NEZDZCYm9GT2RFK1BuaXMKENs0hLQHkAYjwnFgvrjKJ7FeOwrdBckJ
uXd3Wg65AFDkghFS/1xPaxZq7kp0bTIbcnyLa6r9clO4rocy3t0IBw==
-----END AGE ENCRYPTED FILE-----
recipient: age16znyzvquuy8467gg27mdwdt8k6kcu3fjrvfm6gnl4nmqp8tuvqaspqgcet
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmNklDOUFFVUw1MGJpcGM4
Q3NLNEJUU3I3RDNXbmZSRkxrNXhVWm9lRGxBCmJOWlI5ZE1vZzJ5bnhmREFCZUxt
bitOVnF4d0k4MTFLQnJkQlZBL1B0NjgKLS0tIG1EWWhpdkZFQ05iVjFrajJzbUVF
WUgzQVErdFRiMG81dzRsK0VveGZwN0EKNaX190SiwMM7/vO7OBV9N++4/4ODGJJ8
Hk7761qSx7TTQp+dBck1zyW2gZ3viVZ32b/tkOizqBxOgKy1P6yCdQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3WDZGa2o4OGs5WEIySURn
MEpxUUlZM21MTkg5RVU3dGhsNkk2bTE1K0hFCkJ6akliSjZkSE1vMkplaTJMalJw
bFlpYTBVVHVTMW05ck1LTVBkaks3eUkKLS0tIEdvY1RUOWllSEc0cW1tVWpWd24w
TmJ1c2xQb1BtUGNUVG9uSk5uOXhOWW8K1KjTL7C86mix5jWvgtl95i1Xqpmb/4K5
J4fpJFblkBCQEvewWRh4+oQnXWOyj+XEpOIOKpCx8BUkiNgzoYhIBQ==
-----END AGE ENCRYPTED FILE-----
recipient: age187zdk64205lx7r83a4m26pfa8hq6khc8sf83k266jasngeq08v3sfqswfg
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBEQlJ0T3J5R0pucDV1VldB
ZU9JRmFBQWxnSndnZk9NRU54eEg4bzI5NjBRClFkWFdFZ1lzYXUwdk11d1pTMmhh
eERkeTVUVklFekJYNGlyckhuNVN5NTgKLS0tIG8wd0k3SE5jSEZFMFYwbGlhd3VU
dVNTQUx0YWxPVWtVMVltN0xFVTRxUlkKBk+C9FnnCrP+lftnl1QFHwnAe8E4QBnd
UX0DbVjz5KQ2Hi0j4RJk7e4uhKBtgIZEK67eko/G0oJ5rY+KD/JkMA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvNHMvY2YxaUlCV1RGWUxy
YzZxZGxIOU93SkdBa3IwM3VlRldqR0JSelhrCmlZdU5zczJQN3NFaGs3TFBIZGJo
ellaWjRQUUxUOUtkOVVvdHF6ZjI3RWsKLS0tIGZGMm82TXJ4TERpbklBcmRLblVq
eVEvbmJwVU1jWjkwdHdidDEyVEc3Um8KmDbOepcoAJ2JD6HqTEBYx8B/b+Dcrtef
U7NYNmCueIKIIBt1DbMUsK4Q88wqSpnKjnFmNrjv0oIu2ZVhsNgK2Q==
-----END AGE ENCRYPTED FILE-----
recipient: age1azkgwrcwqhc6flj7gturptpl2uvay6pd94cam4t6yuk2n4wlnsqsj38hca
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLWHR4RXpJd2NJVXQ5Rmcv
Yjl5dGwvdk5xN1B6SVdqYXhyRzhBVDFKRXdnCmExR2JQQlZTdUxNOHlnSlhzWUhS
ck5pWENJQUgyeVFVK0ljL1J5OGcwWDAKLS0tIFB2cnVKcjVkTlhDZmt5QjVoemh6
ZzNKTERYYTRoTmhyR3VRZE95aEU5U28K8cDg+1QeAoDMy4dOHDyGFC3I4EYURiou
0UgObnJV2dLEcegNBQQYVjoTU3dglO7xz7pfdOwhQ7oH3xro/9fLig==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBST2NLN0s3dHBHMWZTQitv
aGpFMjRmWkptVllnSW5CUFc2SjNxZFcwNHlZCnJQa1FFZGZST01tdEg2dDcydjFZ
SjZYYy9ONDhLZCtnb3A0cXI2V1VmZXMKLS0tIDR5eTYxWjJvdWpXZkZ5SzVJNk4z
ZWRKTDlNenRLOFNpRkxCaXhkUTRZVjQKFirSYfaGSzoQY4wkZy9S5gS43zkHzbCd
W03MKdooNXz2n9fdfyFdEqYpG6OgFhuQJLKLP1oR+MUaztm7lc7/cQ==
-----END AGE ENCRYPTED FILE-----
recipient: age17x20h3m6wgfhereusc224u95ac8aj68fzlkkj5ptvs9c5vlz3usqdu7crq
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5UXEzT1FxT1BYZGpvY3Qx
dWFSU3hDbjBtRCtkN1dxamppckpUdVBkeGwwCjlJOEowQkJMZkNhait4MDZ0RFV2
RGdFWmZOWFVVbTlBMDN5aDRwWndQaHcKLS0tIEZEZTczTDZwYzdYMFFMVjdUckdo
ZE1pTGU3bFpMZnEvY2xiYVlBT3Z4N0EKb2iDZvQ71/HLzUe+8BVwS1qhtsVK/zfN
GhjABKXnNNauf2bmpGwh3DUcflkfEp2awCgJh+TxjE5LFwMnIcoaqw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA4REdrakFDTHRmRVFGakp1
RWp0VUQyeWVIVkV0NVlXZjV6UU9YYU54eVhFClVmeE8zTDdOVDdnWFc0anhGTXd3
S0xtOFdXMnB6OFRNekVxV1VvbGEyS00KLS0tIDcrb0Y1Ykh0WnYwVFpDbmNSYU1a
QnhxVEIyY2s3WDlwTDRLQlZ4cXlwQTgK1iHO4k481GqGZR8K3J+5MEs6NsPwuMY0
Cr8XEgmymhZnQj1WrYbZIgg+VhzfVmvd62yOn+d45Vc6TOnX6d8hdw==
-----END AGE ENCRYPTED FILE-----
recipient: age1wnympe3x8ce8hk87cymmt6wvccs4aes5rhhs44hq0s529v5z4g5sfyphwx
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBFcGIwRUxaMStxMU1ieFZi
emJleW12eWVHR01aWVh0SitvSkJuNk04SUZJCmtRcitYTHBkNjk2RTdsRXdCd1pO
NDM4U0NvQUlUSUtxYWUvSHJaMHN0T3cKLS0tIFQ2THhUdmo0MzdQUjhuc0g3Rnoz
aXhtc09pVzdFa0pOaDFmTDVlaWFGZzAKWEpuBMLOv61vsvcu5Tflaxi4Lwy84pEM
YXq3kM3ETimoXB/Yh9XpXCPeq4y/lhifd9CkJKhxo4cbdbyq6uF4oQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTdTNveDAxWi9xUERqcUQ4
THJvczlHWDI2V2pOSHIyTXgxWmhRdlpJREhFClJjcWJXc01CSVNQQ0VGc2VzUG1E
UW96VlNENEwvSDAyQ3BnMnZBSjdPbTAKLS0tIE5kendXNE1BOElrMEk1U09qc0g2
SlpmdjlYVEVvS1ZMOXlXU1pQVWJheE0KZQR65sg6HyNsuF2X8wO5ZzfHdJJA7O8C
1AVefTdN9G2xGjvd9IwFww5MbvS1JcFdAratKyntpHA5e44poggNTg==
-----END AGE ENCRYPTED FILE-----
recipient: age172pk7lyc6p4ewy0f2h6pau5d5sz6z8cq66hm4u4tpzx3an496a2sljx7x5
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsdVR4bXVtcjBlZDdGa096
a2hXTFBob0t4UTVvdTEvem5MOFliK2FGYmdvCktLM3RBR3ZpS0dST29vOXExdGhn
ZVJZeHJHMXRVZ2FBVG5GU1Z0SmcycDAKLS0tIDZsNXVCUUNZcFY1Y0tCaW1pdzVu
cWQ4Zm0vMHg3ZmJUM21SYlI3dkNuZDQK0zMzDVtiBhi61fLHUnS2lQ0Am5JUrh4R
Yr+KuxPftoCww7X6m/Hl5pwhd6CDm+SOm5ysHHaiTTUSFATr7ci7hQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5WGd2dHh5TUZ2QlEwOW9i
VGdKVG4rVXVaWFE5MTM4NWRCaHh4U0VwVkNJCitRc3VQa2lUUTB5V3I1ZmszRVZI
a2tBRWkyZnBsbm1KZXhYLzcyZncvelEKLS0tIFRaaTh2SytQUDJ3c2lnN2YwVGVB
aHg3V0V0ajh2d0Zna3lpTWJYNzVMcWsKNI/JHvi/GpNScjK7lykO7Gwdfmi6jqj1
MfOCHrNJvanFandggCZb0cIbH0heHIQPFauvFTzSmM45W/bWh52sHw==
-----END AGE ENCRYPTED FILE-----
recipient: age1p7pxgq5kwcpdkhkh3qq4pvnltrdk4gwf60hdhv8ka0mdxmgnjepqyleyen
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1WlVseTA4empPWGtkZ293
bXVTNm9iMS9iSGxCNGk2MFNjeDJ2WkhBOFJFClArOUl5bEk0MVV5eVd4bWk0WnhS
czR3VFFacHVSOVV1dTc2blQvOFZpR28KLS0tIFBZdGxGTjhtSmdiTGlDeEhWYndi
d3RIL1lpL1h6WGVaYzZpWERRQTR2cWMKIUoagSG8+i4g1RDa+fbXGVAjJocyMVkA
fLpm9lAwUDs+9RQ95LMduj6xoPW8vtNL9CQ70Ai5hAZaUgL9HtL0XQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTcWp2Qm9qM0tzSExBejZw
YUwyZS9NNzZrRU0rS3VCR2tDK3piZm1zaUYwCnBVd2V0VkZlUFBPYklPYmlyanZm
N2QwTjhjczg2NW1DNHA2WjEzTDVUQkUKLS0tIE9JcE9zV2hlVkhyRXNWVm5lejQ0
UmFEUWRqdm5lY0hGYlIxSTIzZXZaWEEKDPUpngncY8J2jF/zLPVypu2XE7hrh+c6
9Ibr6H7D6G15emm8ifDbcjbcI84URnVcG0ti31/FzAeAmxnTiv/B+g==
-----END AGE ENCRYPTED FILE-----
recipient: age1sv7uhpnk9d3u3je9zzvlux0kd83f627aclpamnz2h3ksg599838qjgrvqs
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5WVJIVUFpYmphdnBITGFR
dk1vRnJwdFluVW9TZFBjc0RwTG9JS0l3dWdzClRKVUQrSno5czR0MVd0eEk1Sk1X
SWNxTEI0bktGVGgzK3hFZzJ2NlR2bGMKLS0tIERtVFFOS0J2WVRJbVNzWTNTL2ZZ
Ym5BL2xZRjFpYW9GNFNCbXBTODh4UXMKnZQGe1jhdPDp89w6LdfoRm5qBMaAzuTZ
bwg3QeBHDPYYpB2b4q+mD3XxdIRZh87l+KdrdvrM/7IA9VF0ZNZWsQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhWWYxOFQxeFNndE1reWll
dlJJK2VCaUlkWDZtaXlpS2d0ZDVhNlpqdFJNCnRyL2JWWm9JWWJyM3owWVpJUmdR
UjljdXQyN2dBZ3Zvd09ReFA4Vk9iS3cKLS0tIENRYnhtZUtMV0pkZ3dhU3MwaFhq
L2RZK2tsRW1FUkhaczZHVmVkeU5UcGcK2FZFoBXcCJPd+qc9HVbgmF29Z1JlYDVF
lmGDnSSIxQ3e7fgBVSmuSdVh6kNOx45P++RY0MCEKmmmSg9voRFEmQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1dkecypmfuj0tcm2cz8vnvq5drpu2ddhgnfkzxvscs7m4e79gpseqyhr9pg
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkc1V0bUtXYWFSVHVnNFYz
MWlIdVFtSFhvQUd4Q2tRMjQvMlcxWmhwQWg4Cm5xS05kcjVRU2VEa3VYWFZHVGxH
eUh3Yzl5VEF2YjFBdXNBejVTN0tMRG8KLS0tIDJVUEFhNlg4cTJrZCt4UDgzVWVn
SjQxSVo1eklzWm8vVjgxR3F2VXViUncK97WqQpdVMds+gmf1TNC1TCQFFuD7jk0Q
sqdCOxceIaQudTM+1M0YYGn6l2sKuBzL290wLVfEDYA31lyu2/ubaw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsdCtjYjVsVFNuRm1WU0FK
b0hMSURXcndycXlyVURJaTNIeGFUSXNFZ3hFCk1sdkVvUE1vaVFXSHNWQlZKK2Jn
VDlBV3lybllpaTlVVEl0alAzbk51YjgKLS0tIEJkMXNDcXd1WUtueXdjOFVpQ2tB
Vk8zclE3RW1mcUxmUnZ5R1R6ZnJUK2sKyQUbyKtNgyJ+GmCYCnXuLp2GvqhIB6Ln
xFpNeY0WN9nQyYKht0RRbczbwPEm+CUqpVfc4Y3rnaaZ4xfXm+HSIg==
-----END AGE ENCRYPTED FILE-----
recipient: age1mdtnk78aeqnwqadjqje5pfha04wu92d3ecchyqajjmy434kwq98qksq2wa
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBDSlAveWFBckpyYVNNR0xP
OUh1SFpjVkl1WXk3RXRjMWRweVVlRXppd21RCnJFbkU3OXM2dDc5bDRiVDQzNjdC
aGhvdldWUkgyVVp5a1BndGV0K0xUSUkKLS0tIDR5OXpFcFFJNmwyWmVvNGFOWEFn
Z25FL201YUlNT0N5WnR2UnE3ZHpKMWsKuX+ARk/5fo0w8nG1eqhdpZ8KDQEaVh3S
8nf/jJ39QrJwnukQP3+4JvLKl/tp5NihlP/eQ3ZUmvTNqQOsXpTY2g==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBkQ1pOSWhIOHFlelZjYzQ0
Z08rcEVveDBTLzNKQjE1aUpkNFgxY3phOUdnCmVxZnVZYnJScGZ2SU5ISlkxd3Rn
aE5QVTQ1VlYwL3piZUZHSHpQcndnOG8KLS0tIDJ5NXI0ZjIwZ0dTNndxR2pkSVBr
NXh2dTdWTTRIRkF4SEZZMndWTVphazgKEcXnLHGfKo0x3n4JMUdrxJ1ukluHz5by
uEyrZqD4H9NjzJEc0YWo992pqSn6t4c2vf3bu4uMUANIi/24R2L3ew==
-----END AGE ENCRYPTED FILE-----
recipient: age16pxqxdj25xz6w200sf8duc62vyk0xkhzc7y63nyhg29sm077vp8qy4sywv
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBITTU3TVhZcTJGVDRlK1J6
aVhsQlhvMm9JdXcvbTc3eExxWjQxdmU0NFZVCmVqbkN0QS9QRHo2SzQ5T3FNTFA4
Vm9zdkg0THFaRzdsU0kwUDVMQUdDM1EKLS0tIGhtdXRMRWxDVVRUQXNCaEVPd0ts
Y1ZSOTNjV2ZhZTJzZk5IUENrMUVheFkK3WZbruOLBTzm0WghE+4iCT9l9ZX7LyVu
g2K39QgOva2VJPi8TKZ+SUPAJkTs+n++KiEtaanhSKJWhfoCa2hCJA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBubnBBeEh4Z21ZMzdnY1ly
V1BpN2dpd0trTXlBRHp6R3oraGcvQ3BLQlJRCndDbFJlUlV1VDBrYU9NOWhxdXY3
YjBVbzR5akN5Tlp2K2t0QjFyajNPOGcKLS0tIDBGdXc1aG9sWHJqTmRXakNQU2xG
MVZncGdlY015U2tRL2lPSzNldFRpRWcKx3D5/Nya5W4i2by5AeY6zNSBIe5gm3qK
FMJ1KgoasiHtgKkhumqAnGBqwbp2WFGM9tJK/huImuKeJd23i9G/2A==
-----END AGE ENCRYPTED FILE-----
recipient: age1hv7m3xypesdfm0dfzwgctde8v307g9xaunnfu2687y0lagcs5q7s3eg0kj
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrMmlUdE1XVjMvZ1k3SWRY
cTA4ZHF2K2F0VTU0dzhvM2k3S3NXRENJWGxFCnlWZVJ6d3p6eWFSeFFZdU9FRmZS
MWJRWElrTXI3SjRUZE5nVGVkZHFXdkEKLS0tIG9veHJjL0lIb25LTWhvcW9oY001
MzZWUHJnaUJiamI3S1RJd2lweG5FVzgKFb/9A1Ukx1aL51Tf987RMBD1H3Jiosba
XBqvr7B+8URqPO0rvFDvlCV/RtLAG9RhxmJqJ23+4Oqm0FzNCx11KQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBOWHkvMnVzRDBYYTZGZDNG
S2xHQVVIcGt0MHhDb0k0c2NDZlhMcDJ4SG40Cm52bUV5emFGMDNCUmVkTmZheW5O
RE56Q2g1Ymk2a0VtWDYyNDBDS0k0Q1UKLS0tIDlXa1gzZVhId3V0NHlqc2E0Sm1C
ZThwZmNRVEhJaWRkcXdocUNqaTlJbWsKt0qDpp+YTa2KaXbbRrXDnu6Jyc3e+6iZ
wwRg6nztr4AROglPcTopTFCPkct2bdA0Xcj0XozM/TNv1ztC9STNmw==
-----END AGE ENCRYPTED FILE-----
recipient: age1522f3qzddm82w63j7ajdkr0khvced6ht7tzp3grvp0j3hewtvesssr5kpf
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBrdXdrbU5hTnBMaWxwSHNx
emNyQTB6UHVmVUh0N3pnbERtWi9naTBnM1gwCnNnZ3ZEcUtVM1JPY1NnRUUzNElY
QmVtbVNiem9LbnFUazFlZW55U3pwZ0EKLS0tIFo2elRISEV0TDdEZlVHU2thclF3
SDgrekZBL0tRaTlYTVUxUzM1SVJ4VGcKUaA5Y+cZ99yary7gt5u5DxPcPhHVcpnd
/ffKgiuXQytnaqTjuK+LznHd0zFh3T4Wgt55ctLP31vr9O3iwzp5Ag==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5N1lxNkpoaEd4V2ZYZHJv
MThuQi9aZW8zZ1cwa2IxcWd5d29yZ0hpMlQwCndaNmlVY3ZTY1h0U3RkNVc1WDFZ
ZmtsbUJqbWk3MjU0ZzlLOGg2VGdmdlkKLS0tIGl0Tk1RRWg2KzkvcjlqMlg3NDRX
QTBEMnNVb2dkQlFMV2o2RG9FcTlCZ3cKm5L7odprrDvS1ufaZIemqgIb2WylDwgX
7gj2WXJzQMnnL7mYeJNXeL4tosgJJlrd9VScikn+GRcMUCRDFm13xQ==
-----END AGE ENCRYPTED FILE-----
recipient: age18zgt4y2sd75hxnpe333zz39048ctxpr0q8a3uqh3jajjkyawsdrq8yg5ve
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvcWMyRytmR3R0clBEUHZy
N1hLV1Q5VnZ2TWJNSE5pelozN2lBVU8vc1VvCmh5bkVoQUo2ejhBVU1hVkNtc3Vs
ZnVGQnFaMFV5ZDZacnoya2k3SXFSWEUKLS0tIDVxSUUzTlR0WmpxalBVLzRyYmlq
SzRVODNGQU1MeHIrZWQ3RnYzNFAwQzAKFVFt6uESNx6nQwSCqoVt3CFIIykKjz6R
AwVU03KFdfTMSHx2KBTDhOnFGdh33m3axIw/CxDFaI5NB8MMa50lBQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBiellEVllHL3pacUVhUVVD
Rmg3SjNxOEtnQlh3MWIrZzkvOCsrTys3aTBNCmRIanptazlDZ1VmelVabVc0b2pv
VkxkakFCdkdnZ1QvTk5SUFF4V2N3V00KLS0tIHc3TnNaWm5xSWNranFBNTlPM2NX
NUszTW9VOThVcmhROUJuNEdDUWM2ek0KH5BTMYDwSnhO0MA2/4KgCe1IZABMePX4
WF/4r3DJ6cPVIyYx2GkxIpr0DVdlTb3KphxL/LBiUoGwHn/F/sfR7A==
-----END AGE ENCRYPTED FILE-----
recipient: age1az0k6cadssk6r8qcqxfr8cyu5mndy59pwt8yqq6w065ew6au4ezsmg2vkf
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IG1sa2VtNzY4eDI1NTE5IEREcjlDL0Zp
eEh5bE9wOGt2NTRYd21HbTBQWWFrZ2xCTSthc0hRcmJ0V1Q3UUNXbFRKa25UNWo0
UUFBMHlLTmdaaXpvOHZiOFpmWk5DMUVZbHdRaUdvQks2cEZKZ0dncnlGb29nb2pU
MG5LUEVWelFNTGYvRWN1Z2xwTzE0bG1VVzZHeXlGZXZjaGw1OFZoTGsvTmZWNkM2
bkcvbVNpSmhjN1hFVG5nTk5YTTJqVml0MktQcXdnQk9ROW1HV2I2dTMrb29MUDY5
U3dsWXpBdVdNT1VPV1RUSTZhSGxUUUxPeTVrUU04Wk1jMERNWFZ6VGZ1dVlxaHVa
amNQd3d3RGZ5bnpWS2ZESEFwdXdtRVpad25RdFUvU0pCQm1rak1YbVprSVFLT0w1
V3kzdDdYTjNOdnpFdkN0NlFOeXRTb0NxZkdpdkJTdDhQTVlSWmF4bHpDd21hVkhZ
OGJwN0VxT1Z0RTBxeThjL1h3N2RPM1o1S3hrWk1YeHN4dmdpQ0daaWtXc3I2SmQy
Tm9LdUs2cXdsL2FkWnIrcFBnazY0dnluaEl4KytYclRmSDRhT0M1Rkx0T3MyOU5U
eDVPNW5RY0tsVE1tMDc3dzc2TU90Lzhzd2E5VjVjcnRua3FEeHVEeDBjVXAzcW5a
K0VDOEx4VlNUNmszZ0QvTFRsMlRySHNpM3M0STVyeXJmaklUV2pFakZDMjIvQUNH
MVNkLzZ3MXpONEM2eE4xSmllR3Y0SVhlSG4vSlVHNytMeWVpY1F3bmZZNWh4SklQ
R3VOaUdvbWtIeHhzUkxxazAzOXVEckVISGN4RHZnRzdKU0hUNGJqSi9tN3JJR3pk
U0JzSVhXWHB5amxCTUhvTFdLTzZEODhtNXJBZkQrWTd0NUxVWVlleENLNlp3bzlX
NmxWV2NsUERzbGVHdm4ya2Y2RXhLaDV1dHFFV3FqaHlHQVNlOC9hSlgrVWlGOXlD
eURoMjNBOVhUZC9iQmdIZnlYZXAxNXhuWlBTbjNkZmdsMmlZUVBEeW9wb0ZFaVpF
UERta0FpdnQ4ZVExQ0dzeGx1SHBIdGJQRkVsZTMwM0lHVUcxOUc2bWNIeEFSN1BN
MjZQU3crc0luZWNtaTVESldLK1cwVWZwOXhlR3JtRm9weTNMOHh1aEFSNnczb0Zl
dWFXelpjRkI1T0JaTzJVSGNsRmx5bUFzR2dFSUVUNXZTS0ZjTEIxT1BVYm5VUmFY
SlVLc3dQYmRWTUIvUE5Fa3l6clBCaUdhMVBVQm5tV0sxamNYNko0UGxjcHR3SkVv
dXk1Mlp0ZXJTMUFoejI3NXVTa3FzVVhEQ3lWMmJPdFVFZ3dKbDR0b1phYSs5OXVY
WnptZ1ZNZ3NHSjBVanpnUmd2em5weThjaGZpekZTUUpPQVRaa2ljVUR3UjVvYmlw
a3NXWFBpdnl2YkNRZTdzdGI1OUhQSW1DcHRNSWlGS09yL1krc3BOaXljSFc4eDRq
R0w4TnJSR3I0OThDT1RpaWtPM1NKYlZRQUhGekk1ejN4eEIrZmN1c3pSVnpZa2Zp
SmVqa2VmZzRJN25NcUF1RGU3ZTltdTIwVzVGaXlZazJnL3VKanplTDUzb1JDS28z
eDcwUGRnTGs1dzEzdWFXOHJKazB3eWtyTEJyME5aV3QrMDdaVVMxSi9rYW1vUnZo
YTJGbGNuYlV2Snd2b2E4QjhPVit3d2J0S0dpa3R3L21uMm1sTUp3ekdGcmFNRURV
OTBkaHZ6czU2emlmVjk3dFREUjBkQTFXVVZSVFphcWt0L3lHK21jNGt6ekJoWFVu
dGN4eW5HT3NIZnNqWDBHZVZlQ3kvZUNZRUJsckJITmY0MnAveGFMcnppT205LzR6
UG5zRUF1bGxYdHc4QytHZllHdFhMaHp1djQzU0RlOVFCTFFKRXczNzlxbmYzdEI5
VlBzRGlJdEVwTWlhRVR4S2srczNVbVVWTkt4RWpFWk9oSjduZC9xd3ErWUZYdwpJ
Y1owa1hUL3BZMFg1Zlp1dTJWSDVWZWYvcUttZk1YM0N0S0ZvbXBlUXU4Ci0tLSA5
R3hGbHdFYmVtcU9EVk11VGcwL3NmVUdRTzl6QXYxeHZSTU5URTJJUzY0CuZDGfZX
dFRT0LZDTdxOUWHEjhn8koUBE2R8qRRWD81Zk21P7V7gOuvfNHGnPPAp4AGBwz8y
FONEUqwbdjuoU6M=
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IG1sa2VtNzY4eDI1NTE5IDBDcFJqSjYr
MjFvTEJVWmZpUlkvMGQwRm1EcVJQSWpmUHZ2QXZCV1lKL1pQN2JqRUw5KzNvcm9v
dmoxNFJYaGdXeW9CNnhXVU51VlZoTGFFd0dralVrcmNRbDFwVHJlcHRQMzNyNkN2
bERFSGtBWG9wUzhPOFBDS3d1T0wzR2lXeWdFa2ZzbGg4MkxLeStiV0d2V0FSOHhn
cG1WV1hTanFycE9RZ2NUT01vWm5UNTJYTHVIbWExbm9OYTdqcVAvVDJUa1AvRUhS
aHBObVBJa2t2Qk1lT0xWeGNIcitMMExJSXhkcDFHUDdpb1I3VHpxRU54ejBwcmRV
dHovK1VmN1V0c0pkVnlWbjhlS25hNi9oTG5YMHlBbkxxVUdRN3lhOU9uOEVZVFlF
bWphNTR6M0xValM1cUxIZHJiRVZ1YUg1amY1ZERBNTZyR3lab0owdml0LzlkZWtz
dnREVTBjYVNsdFNaZGx2Tk93ZUpBQWQwK25UZHRsclVlcThGS1A5ajU4TEN0cXh0
eERqbWkrOUk3aWZ1T2tadWNWc01sbDg5c0lsUVpzb2xSUFphYThhN1FONHM2ZjJT
Q3ByQlMxN1JKbldYZkJ1RjJRT2R6cHVVVmJ1YTZtU1dkRitJQzNOTllTZnNZTlBx
amFpWVVEd050T3ZSM09SQnZIdFgzMlFVS0YvU0FXUS90OHVpY3lSNmpFamJzZ2pD
T2FVVVBUMmNRbU9tUW5Md294dWEyRDcvTEw2TWtQZ25HNEFuMENuUGcxbnNJT0ZB
YkxGUnhUdFllcXRVdUVyUlhpWVRITUh3N2VGQkFDYUxiNjRZSkhtbk1uN2l4VzBP
TTd3TisxZzU5N0pITERYbEd5c1JMcjJ4QjhPVTI2Zk1wQmJIZk82aVdYcWhQT2p3
c2I5SzBGVmxDWC9XNGNmcHI3b3N3Q2JRdG9oK053SnlPMFMyTHhlWEdjbmVjWTlD
a25ZRTFxejZYcnBlcktzT1NCLy81aUczNlo3RXNOQWF6bTVhZ0ZZdXh6VmQ4U2R2
amZHcUJsZGg2V2VnU0RwRnJTNEpRWlFSUjFmbmZ0R2kvbzFEL3dHdzQ5dFo5UkNa
NGhVRC9QZFhUZmpSNm94cEIvOTNRR25DL1pmNkowdVg1dkFZbTMzRDJWQjlPYS93
ejRYZE5oaVdOSFFvUjFrRFY2ZGlQUUhmNkQ4VUxUWHRtSkJSTHR2QWR4V0xHeDBU
QUZNWVVhVXlXZ2R5TUdCNHBocHllSE9rdzBxRTl4MGNzRzc2eXVsVWRNTThER2pC
UXROd2d5SWRGYXhXT2owSEN3K1RBK20wK3EzRzk4emlvK3AvaEdxSGNDNkJEblhs
VW1HVG1hbzNIUjlqVTdodTlWVzkxQWNGRTVLZkV3MnB0VmpUWGM3eXNZd21ZNGlx
eHMvRzl1M2xWTWJuM1k5SUIydG4rNTdTM2YvcTlrYng2QXRkSFl3WTc5L2w3Rktq
M1JwaGFjUjFielFZekt4YmE4K2JVUHhTR1hkd3E2QzNzTlFTeitNZDgvOW0wdE82
RndzVTk4WVFZT3c1LzdES0N4YVBrN0Qrc1RjcXJOcUZqZnBYaGtQaHB5Yk1oWSt5
ZGloZGtPUkpINUZsTEtxS21RWXJpdVI4OUtGYUc0Qi9JcmNudGxiOTVFdFN4R3gx
U0tqM2h2N215YzlROGRXUVg4cklLNlBLNWxpejJtejRTSTdXblZRNXRqMXBiRElq
NlM5WFp3UVVsMUJGTm1MZW1NVnVqNnQ0b0lZWE8wNlV6RVI1a2M3clRNbE5kMm42
M3Y4UGlZOTlWL3JMWFhTSFBHblZ4dGljNDVLRlExUHZOTGpaOWlQTUFGR3JTeTBI
R2YvcFlGR0NtOTEwZGJSQlJlSWM2a2p1NnFnV3BXbFEyT0NrN21JS1BtNEw4QjRu
bGtRTy9sQm1JQkpWRGFWaTNhc2pyU1hzZDJia242TDYwNGdXbHpCRmpkQlFFUQpN
UDlNSVBFcnd1dUJZS2lLK2ptNnFYSUZ6bjR2ajZtbEZQL3ZuTThKdTRzCi0tLSBF
U3U0bm9oMXlJeUJVL2FEeG9HRzN5c3dUd0NjdUl1MytwaHdVajdHTjBvCgpBoZIr
TmMzsSHAr+AszkWpzSgnQw4Yr53dfP3JFertkzbeKeYVC4SsBnNafpPmqikq7l0C
RQGoDZ1GYgj0BQ4=
-----END AGE ENCRYPTED FILE-----
recipient: age1pq1jqrcp3te50xugmv5wst3s9ahj0d38rfktxt43wlcqz7vnwyn3y2h7kyfr6rckrvmuk9m7yvp4efjnfsuxx6d8r9gn222r2eal5593arywrjwrgeypf745wyuvf3z2xk9tm5fgnwckftuvdggk66fph59rw69nt5dpjeewuww4vzt9gs4xelre952s7zjz56qv8tvesg2c89sp8rmy9dvhwfd6tucjhs6sjr6yp2njjra2u6w7c7f0sch3rwkw3wf2dc9su9aaa9q2f22sh5yf0fqejxa2qqpq4pg752589st5xsa5g8tpkjglj4tn35gd4hjj0xet9cjwhydmkmmkffy3nr8zdtctqu6pqsyf7aphvktryez39ru3qe7m6nvr465ffxr0ltvr85nddzxvcwpwpac64nu5tdfrxgjfqzc99vr3zxv8carpsw5evmruqlvrq6v6a4m2cwsz5gqw7nyk3jlj75kp5cnafzjn5dyrf8ppfhp5g5s34zsl7pejmmx2uuudjt7ru2y7as9mtagykrgqgt80fvp3eeh4gsmmd3ujgtp0ranq28aq9x0xdekqh49pfhhprjj6zqdfac5gxtjj736kh5jktc4ls4mjs3p33rzt6ze54uqsfept3qhua2pmugypup6hm6j2ek5sgxjnwvqyfj2l8vz4yfgkaxf699v7jqlwf7g68ang5kzqrjsu78lyardm4zen8zhrr24j334qdgs4zr8dhsfsnmvx9cdvu0swx27tcz8txs46zds9kekgmua7w7fnw3l2lf6zla956ssycac4zjy87rawr4thusxtcqgfzfzh2za9np0s34e5dwkp2l2k06cq09myxqfe7ze6a53d8sl5j43qcekh6kfvl9k0t7903q99pc35630zwm3hwxgnw354du5gngnz56skq9zx3pcnkr5eyh8r8t0dqudmvrrwmxreu6tgrklxw7yvu3zkjgt3gyjhc8kqcrevlukay45sz4k9zqxx9yrs88hzt4h52r2g74alf3cedes3atufy06q4lfq3nxdlnve0kqcwstzr6z6u7fqpqvacezdrr62ycteju6dqawkpthu0drtlxj547htfjcsnrmhgvhskwtuhk6yp7wp30p7qc5vkk8fegg6qx5kc9xs4trx7hj9xgydu7vd30hkceuxsczywjs9v2fl3svkwfypg62882yq6ltv7gfj4ajuy8ezd76g0z7juwspe7q6zs5ceshd6038tvvh2nlpjty6rg6a9qfzhgmjx9s6hynyk7xnq9zra6hxstg8p58x75hapd2mk6rapfunlnnkz5dsxjf4ud4dsvgjfjpzxcdy7sp8dzxtengrsdyu4824mqlw8p63d7m2z4mcyme4tm2qkugtdgrkyphe7akk2geukf6xkfkzd2pkdq5s3qm9fkvfkgrv6yw5kdgjak8xcgesg6tumans4fs8yrxtqlvv2z3emdvwchrjfq4xpzsj27yt4gdg8pknwz9tqpjkjxq6lysutrvwkvt2fwyj8wvv8wtmdl6fk6rsd9kq9a6wkhuq7vvrgwgj3xg2s229sprj4g2vzhy2dfesrp403gs64jqkrjuezwm4zd6uw2x4e2qkj8xqcf7c0zprdzu959x23u878vqqetgpjwt0z3kedt8l6dgpm0rf5dmrya5h3wgzfa0jjvgjphyxgxrwlrzpv4czgal933zs64tn90ks66ejjdaw4t67sch8r3q0kljeqnpdgmw0cpj6arc6k46wcqaccygczy76zt9362vslakvzqqv33tv3sjldp6qxprharmpm9uykgpx66343wuur5xj2aw0rgutpm4ztjzycn3a8d2jq2zpdzwmevezm7mkp9dmndkc3qz0kklgkxq9yehrk5ayfly97umhws0jll8qqg0r7gzxgw5vv76
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBtVktpa0YxTFlYc1hVM2dP
NFZtbFpERUhuU2FENTFkTVpkQ3lXNzFlMHhVCld2cUQ4Vmc3YmtvVUZYOFFBZUFn
R1g3b1pHWFpXVndUNUpKcW5jcGRnaVEKLS0tIGRqUnltQklEczFzbjJ0Ymx6OENa
S2ZRMWxlbVQwS01EWmV3aHdDWjh2V1UKXfo7ZYYZXIjolTKc+aXHpi0P6QxzpaKA
5wi2gYOF5RdoyOyfjPYsIxCLFc+HO12X3BD2osomsT0yUGD12xWu5Q==
-----END AGE ENCRYPTED FILE-----
recipient: age1q7kz3pnfq6cvtn56rlfgs52efcvtcmaq4xny0va3x5wxj4vpgccsenwxk6
lastmodified: "2026-01-25T18:06:26Z"
mac: ENC[AES256_GCM,data:plHNLOgGWwNWbakKG6X5EOxwERE3rvYO4EOAzY/sz+uM7cZBEnqU5LZwjlD8B75hgRHqpnDBF0JbHgsEwVxfJJRL1phkeMJFOapQMjZVWMz6j7eb1hOwpdktd+bpuimy4XCD1aOxOoInKpFSK33usxLfyqSxjFDM5+i6D22qBTs=,iv:/iOIfNuSIDsa/UKLP0d63tpOrYMFO3Bk1qPssY0AzuI=,tag:k+824MXD+r0lNUcuvisudw==,type:str]
pgp:
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMAxK/JaB2/SdtAQ//YjXqHd2fkAaaW3+lpKubSFc0EDoBfVqLm3rF1TSBjmLW
wC7Xm+Q7TANTVAWSjdvsHhuMVKRtkZHvkM5BWPGAJ3kgv4ATplGg4NQFQCgUMaXm
JynCePI9yeFtMJuXIjMdcxdEK4TW5QzLpUPyEPsaL2N6yWAQuhNeF0mgxpPwaFYq
9BTGHzz42JZciJ8CZzBS88fhxdH7vEFAb1jj4Gjz3NHqphaIDHB27Kk7rWVtr5+d
Xem/pGd5op16LDeJkYbWwB/H1IwlqnGMEj1cfet0mdvTAR34mhKTXi5goA4DvL11
eXjFwIsJaXmoqrATkRFjh5MblxQ1T/Xi7s0pf18AY6VpgLTeCEODwZRtRTzw3oh2
/ZNVKrpY9LAlAGJS+2PKNyI1N/s88gtE9PFPQV6mKlkTGrKh/VzSlUI1FY0D2vhZ
6I9qZ7kM+B+D4+nZazc9RCangZjFQOss2eK0XFaAD7p7Ea40Xmv9QJvYO1DIhl5O
8SA2ibRcOZijvtMxZh6HE3kwmtDdrPV3rxO53QlgXOTnmcuvqKB/pviF73EkPpI6
wdRZ/Jouz3EEpkrMwSX/+sfKJkTYiPF+2savWX6f2Rt7xuWD4REC9vKFPgRp7rrW
bkk9NAgJ10G1VaRCjK5kH2P4+ODsGXSumE/yNgPaYa8fILgw/zA/A9Hrm2+DMPHU
aAEJAhAvMlG604H1bleSNePoqXi1No2wFvOUAPd0jnDKPasKQRbBzXcIVXSa5Gs7
BG59T5ntp9G1dSkGJwt7IFdnyEVJgQ+/LxhlneK0Ql6WcCvki6CieM92aekMJzGK
jFFdoOk8OPHo
=DOii
hQIMAxK/JaB2/SdtAQ/+KTrL4s2iT7FbW5ofNIj/jzDf5Xq6W/pb4oN2Lfea3ZhK
l9fegZDwR0y7Pq4lmzENeIlt4mqHWoINngpQXxuyul6vsIUgJyeYg1FdBWf3t7Oy
ToHEYEwxd/SajYQE0JKqb5rpVJUvnGSIpj4MsYgg94+PlsOYFMU08OuJ62w4Ko8F
e6lRgBqm8xf6X8apNTTMHgsLrtVWnwGL+Lb1Z6Ro7h7L9vt7QNkFEZPgKhRk8gAQ
0OkEB1YerrKclxvq3tkIEwncpdzc3KIaeoVIXHzmr8IkDQ89SJue4TtgsKDlaSkv
QYG7da7IK9eIJQN6y2PTlZlVdscTrPvEFzIZl6yfI/ZoaAXb4NSTXdXn8mT0h0On
rWLlntBANQR1lulYADKjy1XZmqu/SqlzQmD5FVVrKs3sLOycnxqYJc/ulafAZoe+
7fQirvNf3sMIowhE4KXJ0ZdMoIVmcKnqYkhKxXIHztUFeHb73zi3mtOTsuOX0rki
kd+KH8h3ZBqJNvjVwLE2gPZmdrphEyD355ojpc8MglgH8c25IaFHouJKNqLMM+03
s1wpOJ6/SPqKhdjqdHkILYWOfjSNhQDv0/swPxQJPLHwk6+mt1lE5wOpKycyIvtT
2EiTTTyyFF+WVZB2/D0FPkz6HFlrZSH6QVreCuC+KrZT6WU8sgp6qE/F4oaH9RTS
XgEc0Q/RwSScOs3YXmJUp/1JTiDs+jlPQJpKgR2JrljVNozs/EwqeNS6iQtaOfRf
V6VzxveUMnYPh9vE3VtiYRtQPu7DLzvS67bJukSXwjx5TCLnQgyulAu/XP/wQYg=
=dOub
-----END PGP MESSAGE-----
fp: EF643F59E008414882232C78FFA8331EEB7D6B70
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQEMA1QflAioE8i3AQf/WEIasJedthFN+4ADOlvk6739WrA3tAG+Ml8IH5VguWWY
rhquIJ01No1uyWlBnjl+zY4u5KedzBNwiSGH9NqdoFl4T9PDyPzhjwNKdKydelA0
B9h4T1SNNNlhLzW7xwnaE2zzdVXc90MEzpsGXKGmaUjol3glxZGdLw2O/9lYakIJ
F68fW4NJSnQ3mDwFzO3fZBUMZxaMrj0eT2fXOFkzpLwO+k99QO5J+H6YDndFIrqJ
NMNeKAPoj/IBAe8gO+zvFqMP6iA+1zyN/WLsMfbRb5F4lnnVkLfcNc0wI2Fzv1p8
yWL3j7es1OYd3Zo6y9Oe/w7QmQJ+8h5+ginRmWic/dJeAU56lkfIB4pbCnGJBLgz
+nS6EsY7ok+yzG/HelqGEtQwJPfZ9HR6yK2WseP4eYdbIGmkOISnt53Ft3xZPDHg
FyylghYaF9KiEXknRY2b+fyRCfbHBBjnh6xVyILqPQ==
=ytdu
hQEMA1QflAioE8i3AQf/X7/YOb54Ll1t6jw4bDZrSoJKsJFkyK9LGwYhr5NikP+S
773YDCqAsBUCyklV/oyeK+K7lZHXKGTms6ETObWwejOr8Opd2N9mMefNVmxOUveo
0BShc+0pdstTPvDcqVInLZ1FU0XJG90imJ3rRdXog92voiXxipplrNwFBc9lASaC
AXQjuGZ9XzN4FP2k82MM3xNx8+sw926l7iJ/V0A6t1eswaPFaOlbZ/BTsIqQZX5G
M+Xiz1N3j9cH/OdKb50+gAEFGkW4r57qxJ9UNqrMhZ9IgjFANpRPuICb03sN7PyH
tHuNA9LLVazB7+hCUlGCPlbw1JHjko7Eu5zno7Kz09JeAdvAyK4qKWHtxshUsPgL
H+GxFb3Pb6sP6hqH8EbRqiqhHFKFZbL9VHvB2u501YGCzv5J8qfyOyCNH64qicsg
+RSQ7PSX263WI/RvFeJxq72coGAOCygfYvm/AbteFA==
=NLrv
-----END PGP MESSAGE-----
fp: 21C9579E6503CA815A68ABD8541F9408A813C8B7
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DsZXvxFXTXoQSAQdAY/QEMTJA1mP4qlWnMD9l3lYyEsF9LO+u0jeYwMR5c1kw
GFdqNpvhgbq56qmxgux1lCOcCgforwRZNrRV6zdQEccEpWLRUy/pmvqRBaSOYYe6
0l4ByIKrIab1smIea0ZeM7oZ2sRnzgNCOEo44ABuXQW3DoiFc+49DFKi1zM1+0mZ
uRbhv383SvMNWai5Tmf1JkrQHwfBwIuJT63AK98TfmEVrAu20qZ3E0TfB8cZ46PZ
=8UMl
hF4DsZXvxFXTXoQSAQdAdMgewk9kwTEHlJ4DrjEBDIQ9UibVAwcQGSDon5P71nAw
mOM7sg7H5GrtTxDN65MLl6P+IxeKkPSg1oWDCzRazfwbz04DKYBI+az1Mjgz0sD/
0l4BL3Ufun28luyJVc65sm8S9xZxCorQlUPlRSRuf3h87cY0xzNtZQE4sFmtTdKn
FlWirrr8GhxCmwOAuBk9334W7Em2ubSI7PFrr813JV6qSCdTp2GE6XSNMp/tc4Sc
=/15a
-----END PGP MESSAGE-----
fp: 9633412309CCB83BFA39BA5F2FEF746201D7FCFE
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DerEtaFuTeewSAQdAB+o7XTZVQJyJVV+5LDdF2qp3mViYE6srWmSBBQmplB8w
o411SxMsKEk8ow1VgNKCr7KQsVgYrMTHVjzt+fWT3/CNYYtIs7/ox1RISHBjmUUg
0l4BYqWvDsPEyjW1WXVjstuNOJtEgm1JOQwdKMNbBXKa245gFKmV1udAizGpI6DJ
xiIAOSSYSLxuCY2PzCWsv2jx36nHW8LvELMRWy/YeaSQt4PKMSzqPucXq+2H/dAJ
=bJQp
hF4DerEtaFuTeewSAQdABZ3azfwilO6LhvmIpSIynGRkdYj+pOFehD4eLc6IX0Qw
M8Lb1ThNCtEZLzYdxlVLxcQ6EaOcuwzzkNoW0u4Vtyw4ZTxxesr9fKUcjXHCeDS8
0l4B33eqQMOlQQcTWSaTqVX6+hbDZJhP04e+E6AM5j35+eZI5wf1/RyA8do2CDeH
mZRIThD5sWfQQYEGvqGb6N7xzQQL27lYP9K8jsHLK9xsTtnUh+1Pz+l179nxrtYM
=Oqyx
-----END PGP MESSAGE-----
fp: 057870A2C72CD82566A3EC983695F4FCBCAE4912
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMAxjNhCKPP69fAQ/+Lc3kfJqZabyEvtn0mT1uWm/TB9K7RcL0tfl7gZ7LVecD
0CS4vzNFtv52YsKYVJNAnjOWOPcgiXDCfBFAYQyuWINFqhKmeJqnjxCj6jki77j4
tZq3wx6MA7es3lzsyw2uSX1duX0AG96YOCxTKuaAufVzWzKuRaxaQSp6fwKYxkGK
dnhQNcAmcUqgn48zzHppFIotAO+BT8Q3Yl6jwPnU6ofZLruxjsE+KmakNebg4zJ5
8oc+KfgDF/907mxe7200nKmVRcuQas83q22SJS60n0Mf6S0nGowijqvkWSvDiQCa
3gBYuffrv1D8yjMPqf0qAz+OGdTz+75FEZYOIvCCspb5mgnMnkXTTOSzWQI8LeWu
Gx+1gQpGHoD3BGJ2wM744A5J1uVyR/vFF1LGcSXrK2ScGLd4z2ipjjptZOSCjE2D
Kua4WK5tf+oLPMKDSOz+i+UBwOA3vMTPHMoJs+jGqNGqwBjKcbcZneHt080ror3F
aQawOFtHAxOBXYr+pFsHfbMODXTB570dA3qViVneNUPn8XXYyOYwYkE7/L3XpBV0
b8qfW4ueZRLMl2/Iva7YofzzvBoWRsxCNxhejYKsXfBE/N51jVHwFvd/VFQTwNZo
FIeDB/VwwsTSGQCKGPvYkLM49R4jrkIYcfmPdkiitGB94VuyREncJZ3j0twWrl7S
XgHxOo1fzxBVy7UTRJCdjsxeoLBd1SFUAyzsRe0os5hO7gixCgacPIGvk47BHK1l
NtY/JjeNltphHX8FOS98wv9NASAB3SVylfpcU16+u5Viv9cTvU7Y9Lev6ukx+Pg=
=zXaI
hQIMAxjNhCKPP69fAQ//Wz08vnPeK/tq+a+1Y6YU/O6IJ7HP0X1a8rAAarRfdjb6
noO0y0ezum64yx5V63rTBHbDU34BbCu2+iFBt+tZFvCKNgF+O8wdJMu9sshGjp2v
2Gu/+bTcBdnD/gIYGR2zKKOoMCNskT6eZhxrjO5w7B3fV64AV7lLQxQY5bXLK5ot
mell741FmaZm9cWcI82mlC1QrHlrakTTreNpu5pktTpei66+O2SnVGmHjWrRKDfR
LCxk/u2bKjaMXDJq0Y+hSk9hEQsg1ZCgfyDmDNfdiqNxuidi5lUJyDPKHX8WZ7bv
b9CXzqDB3zQekBzIQ/6/VXQxz2bGGcpd/1ksVolP06sNGeJdxxfmbKb041O/rx87
mYkYFPffU/gOrYXrXkhBL8JPPKlBNJHdU101hjGkjdNr6CqHqPU3x1p6TnISQZvP
4jQH+IjXUa3RoTeiZwgtvilzNyKmIo9RsnIiFcf9BxeAfBXkx1Sw+hR8byBhW0UG
80B1Guug4Yq+VvKszNBDHRVhm5OkcDqZHy7dkZWb9BrioiRFK8sy7XtuK2EdbRO5
prHeoS4BtZ5d6e+IABr7p8Nvf4/fkRumJGQEAwSqelFKaU5CUTu0bSBwYfH7udZZ
EM1rQQJdVOeOEp+2hd9qeYSNX3McasYxYD4TqWgtu+94zMEdTN1vjrZCBbV0/ZzS
XgGV3em4L0ayFRC0LYxA2xVimD+Vw0evQ8Rl9YkneIteBW+w0cNIOBAYVtSAZzuf
ipmLlczYM/XLKzT67bprGl2rkOAucsQJL2yrjqyxo8t/ImCJ5poC3UBkbVPKR1o=
=+cdX
-----END PGP MESSAGE-----
fp: F38C9D4228FC6F674E322D9C3326D914EB9B8F55
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA46L6MuPqfJqAQ//WYtKlggqzpAwBFD8mXalq69/I60hzt+ByURt3/+3jbz0
+rJd8K4iWvcoNLFYeVJ2gQ4WYUUdFEKRfrrUkytswNddfMEkGMBu1KdHyJuimAqI
xrtf63nXUSjqsjtsKplybBBEKeyHBN1JU1yT7jSU2RYpdoihTVvGIq6ceZbjB8+v
iLWWXGio2sdPtmXrofQ79muWvH6p1XIUHcKfMDA+L4y3AtOyyFZ149S8YaacIKq+
U8Iba677T5yxAbQ1z7+7ftWGu7RU93oL72oN9tx4Y7jlqbUCn2KvwRgZbjkdksgK
6nfM7clX8EgbFxLermRy52WrooWZwFGuZw0U++fKxfrE/r5b1+uIli3EgNIw867r
FooXu/vHClnIuqzE2YO4IABb+jI1qCEyyrrFqIfZJhU/jiueQBMrFgJz9oHvGOTt
niqyAZAGR4j1No8l58ofeUc54TqmJRTgGtOlOJBI8AZPTZdhlN6jwqJl3yPkuRQj
qJrC/t5ZvJUDhuy52GTtZNu9Zyc3lLKPs7sIqm3E7ctq7W1sDudNHvEyQmttXtiN
FvF6vLyphMTlJWpqmEYfxsG2mFr+ScBFNdjqhmlKy1sPJ5b46yxkD38DsOYuDdSX
+RVHIj9awqqv/DpwSWbfTK/Ao5ZthJrmcbH277in/DngbleU4MRMitsAu7ZQHHLS
XgEdwO28fTGFvt7jVugFbBUa2HNl/SMBrMJFpMXKPhUv23J97C70cH1XyTNw0p0p
RIvbdopk87k8+xr7woi/mAZsBEE9wkNGzDoLgK6vzjA/7VbM9VRrPd9oDbZzkl4=
=KbFY
hQIMA46L6MuPqfJqAQ/+PSXVUk8+tOAvpSx+bzsIA6O6n2IOZ6dRnGO7dpydR08L
WpPIBQ4EcXEO+oXto6qrCOhiJfVc3DStAKUp+gSOE4OzE3Z+V1hRZL7PrxXWF+xU
bmB5/K5/52Mjn8tsdh4zLDJfEjw+n+pZabSrCaevcZg/SCnXZnUP5CsyaTlWpAWX
HZwDqtqpN8D2vNF2Rxv6ksksxcDzrMOVTvKimRKwmlHryFjrZ1fRJf0Fic0cDqg+
3JFi6yXx+bQwS8MkpDXzNRrL6mLx/HQEfvtEdqotWMhNiwO8n78CWvqaa/K5hdEe
QiZANSyAeuHsoHyDkcbRitfHLiVfHNHua2GEuJkD5YQMvMwhXCLqfzvDjrATSicy
jyFGIA6kKf76j/JoFBRUXq+g38hNfaY9NnTP2uFBZvNXmC6bmFQAp6VZBi8vAnPZ
zjJB1HOrova/dSVLv2Wy9hI0vITkHwINQi33k+F9AGPYGLgPDJgr4cxkGC1kacyE
/wwY5qBesoNJbDImKKPyH1OYuQwLSh3osWsinAcj02WSlWxe8OwZetAlLdBSINdC
6gdxcy1Z7pDyU2HNOebMMsONtbb9RKjsp+s80J/ivBC+MsMswmkiKRuVuXsSqBKT
eLut+lL2rVqs1tZOp6P6GN01LLVtmMGWagFptp/v1NaK7JlZoPBIdaCDde+hirLS
XgE5K2Qjt1QmrUMJFCsTvBXcw7BvL9eaxFoSgipv/o8188leq0dR7yMSfIn9Bzhf
SwIiMaKlw6T9H1ZXbukhAPioHo9QyW/yHIIQi/ALtHhrQcbrw4HHxhxkPCDRsvE=
=hLHn
-----END PGP MESSAGE-----
fp: 8996B62CBD159DCADD3B6DC08BB33A8ABCF7BC4A
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DQrf1tCqiJxoSAQdA44QMLrMf7v9+JsZLXyE3Qv5sOc+DmVkU6LvboKyV2Wkw
Mmm7BWQXJJV3Kc5rYLRUr7R7qg0QRVVekg2mh02TLqb6vcuCTgrKcWYq7ofez6w8
0l4B9Y5JV8sUH0uqnKq+TV4SyeGn6G6lSEGypPQ3YBmFSvMLuKzcf/SlR9bHYiHs
63g19HXDCAuO0bWP59hmwZL8DV0v55d6wqItA0KmlqreGQjM+11sEdDO5X90XsqL
=Xuqq
hF4DQrf1tCqiJxoSAQdAVfiZlPpOP0mdwHvOGku4Z34jRn12oEkqjdc2GmMyvWkw
EJUK2uWQAPtMwH+7aXdPfgfgWxG/KtKILV0r4naDG7T2MOJsz6aV2uX0PGWku4ps
0l4Bcpwwt6S4bs5WXjp7Hp+ctwnPhFlIZSJINB99za/aTfQn4+QJIkGuNH7rprml
omjF/EmOLddJOjy3JfD04xxGcTXse+kzpDUwo1M8OaVUZQAOodM4CHs5SLNy/UPp
=2tQQ
-----END PGP MESSAGE-----
fp: B71138A6A8964A3C3B8899857B4F70C356765BAB
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DzAGzViGx4qcSAQdA9Yi0ArgXI5MDjhB8mgruSNLl7V78N2QWolaQB0xhT04w
OLdslCiJJdsdmVJ1ctiD6uURznfn1fCFUL54mzciOF8C9/nHKrJEZt0WiPFXdEBx
0lgB5x1GK6zEo/HxyZ0AquRn+kZ0F0W7tYsMLziiDrGMqmc6gIjzA89JyP0fNTZQ
QNcKfhb97qPlka4XiLunRJyn7yE77a1m7WEW737HWndbYtcIRt5oRCFK
=vrvO
hF4DzAGzViGx4qcSAQdAvhCuEyTS1x2NpCUY8e5Ai6x46Ze3MVF1kQhEnb7jAnow
7Gxgei2A6gNOF/qFAWRcd2rYJWwJgAAabqxIR9oP4jP15o/3k6ybJzHNu02AGuIr
0lgBKQMurnFxnQxQ+ArAhuq8X1Bsr4P8YRkTXvuAMWXNo0Pntdb+Lo/b9/72W8dX
NoJhpQozsqszCXMlN/zgiEgpW6GDFQbsZU6wCw/FAXK86E5ER65ldm93
=BAcl
-----END PGP MESSAGE-----
fp: D2E9C0807BF681F5E164DAFC5EE1B61CD90954CD
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA2pVdGTIrZI+AQ//fH+BFkgjaT20AyGJHUsVfv9BSRi1T7+8ISBiv1yGQ+bA
TqiShHPcJsq/M++iN+CTRiLpLbZYfSN71mRgYwVsy/2ykGZIzLzEelYAtyfDk17M
GfMwbPSaux0rW/FnwYmYqRgz+4O/FT9N1HQ7uNErAYYoTT7McN1olQxT/qeCcqnD
pDsodxZxQBGAW8gBTAFodubhj0jNSpaKgy7FUPF5OGeYyF76FjSe7BdKRksTgCPG
LXMcJ1P//sMXuTvs3iLQa7mYtp6n+kHU6dIFRL2iM/skxqvfXjXe13FZ6zFJaI4e
QU0FVlm6Tnx0DrBl+gk6/y6+ajVOfY3T+Rj3gBGUoAPuPCNVCcQrg/pSTTV53TyN
FpVGwYf0f9kCVjqqviW/f0Bgy2KwqIwSKiTmWP9iFM3C7oEFonXWbtR97DG0OnuF
dyw3QeyOnIVXsgpnwouc4FtP7fb+sMZLKaSloo+XzzJSxjP/CWshOCnyZP2PWX7X
pqNXrAnJnZKu4rO79osj4VX8tVXf7vPjjKufzmpuXiErwuS6CNARnLS6PS717hse
wEkz4XLcRd3jVfBlYgkMgzyYiqlSMzL7hHYSyvE1nBP3xPCfKJ+LZ3dnJALT4Bmr
CovNtl4ZcHLHpSG0Uf1pXLEAJsNXMpfdSL6oFw0gS7e9rPoL8tAF1QROFRJ8lEzU
aAEJAhB1Cio/Bv4BJ74/4GOUJZFmA9oPAoXsJxlLRjNMdkSZEuHI1cQJsr9+TIuu
FOdzTax3Uo9tbCQbLgIh4SAIIl2s3HXzmBcpUg7j+TooYTJRbpeL5FlePysXyxSJ
TCSr2lu4uSj0
=VINh
hQIMA2pVdGTIrZI+ARAA2Lc60Bg71oWIpRdVRDkAxoPKQIJJt92TJT2EAOfjqFQQ
fZ3xJ9HkA2lLDd7187Ua66RYs79e50nD424TQncyeF5ixxhGuYWRg6fERdk7DYle
C0W9UPNSlra8vbpjIn2D2xxdgX08HKm0hk1nrrVBnGe+iyiKnoxfqn/L02QYoZ33
eK5RIWasOBJg1IWtumVoRtxPQ32I8mZCjfMx0yesR/IzIUqXYEAuw6dYlL94/QDH
Qh/d9hVIL2RZsw9fdIu3tqlOezhA8mBOQa+CpSZwys58ZESiAPQkkUfJm6/RNzoz
wF/AxQ+bZJWa30Uopm44JgSLJF8uQ0NYl2HCr94IGsAR+vbM1wdeh1xxyh4bZ/Gr
fDFZz9Nm2X4RRvfdC74PBQlgDBU9M+cQfpBgyr8coPkZhQW8a3gHbVDW+Abcm61C
Qdj9G3ip5OJh4wW+t9qfaXq0RAwYeud17cC5jgBBpGxlBQMG8veh51tAavqVbSCz
ASa1IMYlubIhlhAmgj6e444NhbpVBFXhpgRWAdSKQutSUovJHfUNVRhyKJ1YyWYB
4hH4DU/JPWB89+qcFbxSeKAic9GnlqeZWZhQG0nm7gs6GidqB+Dh5vGYQaHXLYw0
zaDDxlsJ6iD43T/lNWXMuHaDEtilXoD7K6SQH4jK6D9CpOjcqxYjS769CxIgEnXS
XgFG/n2Oige+Lhs71B/mr0vXO9eTj8bTCL3NFcLn6hZfI1PEim22mliCX6aq/gG8
ybF0q1+RXefUyVkm0AypjnAjxT4NcAyofVCSE/p0/ibKo4MAM0ieHFXFSM31CN4=
=8fSf
-----END PGP MESSAGE-----
fp: 878FEA3CB6A6F6E7CD80ECBE28506E3585F9F533
- created_at: "2026-10-08T12:21:49Z"
- created_at: "2026-09-24T19:55:29Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DKKbvh61jX5USAQdAi0Rv5GPtHE2h+nFFCxBAgIMtt5DmsvAHEd+ZK8BO7SUw
vKs6PtoSCJKsMcr94ZAMoIeJ/QhrmCEm5yK2Q9zB19wnCCJ4ec2KNISRGbFFEKsS
1GgBCQIQZe+/ScZmD8ShMUYQftcGfi89ylZrOq2ejDpPW/05XFcatLu3yvKa1DVG
myj1Svg4cW831BEUzeLLMwDVAD8Pg83SyFlzqwXxqReCEkylmHDBEkuXlG7hLriX
K5gy3LzBcHqjng==
=kqyb
hF4DKKbvh61jX5USAQdAtmcNNFbgzNqbJNDvVBU9/0LvPS/ZQPzUwdLMOKBYRB0w
KOj6IwFIjfpWPTp0Hl9hIUqjb+qp+kW/DhVBazi42ewI00ESTkEy55UXXx74LUmF
0l4BPW/ETSjjC6QWSrAqPN0k+uGY1tp/63lB28CK/4UKI4MykeATONRU8tvvYTS6
Z0x6Tba8zskvL+KzNhdrEljbXSfR8vVkGtd5Y1Do1lt4JjEMH25L+8pNA5YYC54/
=DXqm
-----END PGP MESSAGE-----
fp: 41FFAF3D519CF5C039FBD8414BCC213729AF0E49
unencrypted_suffix: _unencrypted

View file

@ -1,4 +1,7 @@
ansible_pull__age_private_key: ENC[AES256_GCM,data:8PCkZx76R5aWPITn5MCZCMckXvaLfVvnDgO70XmF/eeH5xLVOVx+EC3DZjmHxEoW7Kn4LAJTR4mWl/xP+p++elRvTMcHltV+vBQ=,iv:jKq07NLM84MSGU4CCyUS9ODmwiUMhlDONkKJ7P9P2DM=,tag:95yBZlwYdSNeX2O4t/h9kw==,type:str]
jitsi__jicofo_auth_password: ENC[AES256_GCM,data:a7y36RJUR4OBtVNzgmqlGEsg1hNRGgsuwG2YFJrDlMI=,iv:mnGlKOXtNltNe3wY34BnVCJ9CtLQ7aksr4xXbrTOnJg=,tag:j1N7MUTJG8K0JW/a6YESFg==,type:str]
jitsi__jvb_auth_password: ENC[AES256_GCM,data:xUFiIXAzY4pEpwgL/5LPBlhkx73RX6VFT3QJlG5QbFo=,iv:/XqENztrrpj1h3lBhEtJJo78lCrxrMWxRszNjSwx+KQ=,tag:+LRYmv9Tvt0muR47QTd6HA==,type:str]
jitsi__turn_secret: ENC[AES256_GCM,data:UPev9ND9Mf2gGK28huQuuxRyUZvPPCmFL9rU1f0zndSPPBMspSsnlgtMy0+VY/CsGEIEcWsy3eYDPcAW/EKFtA==,iv:ew0MKP5zdQvqfla2y7xkcXLm3qSMlf5sucn8Qu3G3Zs=,tag:dqe239LD+wPVqLQFF+nz2A==,type:str]
sops:
age:
- enc: |
@ -30,8 +33,8 @@ sops:
QzBBdJ6TiDwJ1rwwM211smfIbcYhWX6C/EfitI5XoIW8aS4ln1g1Ww==
-----END AGE ENCRYPTED FILE-----
recipient: age187zdk64205lx7r83a4m26pfa8hq6khc8sf83k266jasngeq08v3sfqswfg
lastmodified: "2026-07-29T20:26:44Z"
mac: ENC[AES256_GCM,data:dHiB768SBppBrjNoSpgDvriCgrSNzIkpSYzm9REx4otbnvNjHYPhP9OdsZ6zTcoFoX+41/zE13r4EoAz4F++jdJidv1+7DMFvVUKMuFNzp2VjDfB1ZNzzyM+px7l83L5eNhgNPp26mweOVMEz92NgB916KMY+5e3uUeSR+iIdho=,iv:7k8rugBXULjPSOZukQiufNn9Vs5uWVhcvFKIhD1o7so=,tag:IE+2uhzGS2xJJgFHuc94CA==,type:str]
lastmodified: "2026-10-08T07:56:43Z"
mac: ENC[AES256_GCM,data:CgD19xHN5nEg9TMQq/c4Xpv1LH0LfcXrkfBMUcbJiIn4FsSzQetLYxueeDXUVOujOb9ZSEin1nR+OZwa/nuwN9mTg37c0XZ6HV0UvNNEIrN/o4doUCQa2jLmbX8etxeNhF7oWJ84OgQIhPLvLwp3Z0A/+kPKbmtz3znQNgKoHQY=,iv:6Dt7z55az2SJovJ7ozG35Q99a08kOrKl/uQCUVcbq8c=,tag:M6p0ZJzoFnWgspnGknq7SQ==,type:str]
pgp:
- created_at: "2026-09-24T19:54:13Z"
enc: |-

View file

@ -0,0 +1,33 @@
nftables__config: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/jitsi/nftables/nftables.conf') }}"
# renovate: datasource=github-releases depName=jitsi/docker-jitsi-meet versioning=regex:^stable-(?<major>\d+)$
jitsi__version: stable-11248
jitsi__domain: jitsi.hamburg.ccc.de
jitsi__letsencrypt_email: le-admin@hamburg.ccc.de
jitsi__jvb_advertise_ips:
- 212.12.51.139
- 2a00:14b0:f000:23:51:139:0:1
jitsi__whiteboard: true
jitsi__turn: true
jitsi__prometheus_exporter: true
# jitsi__jicofo_auth_password, jitsi__jvb_auth_password and jitsi__turn_secret are defined in jitsi.sops.yaml.
# Branding
jitsi__env:
DYNAMIC_BRANDING_URL: https://jitsi.hamburg.ccc.de/static/ccchh-branding.json
jitsi__custom_interface_config_js: |
// Replace the footer with app store links with our own in welcomePageAdditionalContent.html.
interfaceConfig.DISPLAY_WELCOME_FOOTER = false;
interfaceConfig.DISPLAY_WELCOME_PAGE_CONTENT = true;
interfaceConfig.JITSI_WATERMARK_LINK = 'https://hamburg.ccc.de/';
jitsi__web_files:
- path: images/watermark.svg
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/jitsi/web/ccchh-logo.svg') }}"
- path: images/favicon.svg
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/jitsi/web/round-logo.svg') }}"
- path: images/ccchh-background.svg
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/jitsi/web/background.svg') }}"
- path: static/ccchh-branding.json
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/jitsi/web/branding.json') }}"
- path: static/welcomePageAdditionalContent.html
content: "{{ lookup('ansible.builtin.file', 'resources/chaosknoten/jitsi/web/welcomePageAdditionalContent.html') }}"

View file

@ -1,190 +0,0 @@
ansible_pull__age_private_key: ENC[AES256_GCM,data:/+Ub9S/CRrSAeWX9cXzIMHjmDXwAh7hPSzXDnSh8iIZMJg+zW9c7mHqJV5B1AtDp9EQ+pSKpC1TdWuM0qGUABIi+cgZolWISXiI=,iv:lfHLyKsIgNhSm1pVERHT+2uMsP8PP8A49C9OAGsYkL0=,tag:AHRK8KuJJCZst+MsS3wXsw==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IHFyYkk3dyBkU3pq
d2pwbWxYdVFPemtPODFrRVpVZldmWC9UNFZWajZSaGxCY3pVVEdvCi9USGZXbk93
Y0J1dlN1eUdnRWY1TzRadndlTElmZGp5ZzZhUG1wa0Zsbm8KLS0tIGhybHFzWlBv
bnZDWk5HVisrYjJPZkN6ZGFua1VPVEZCUVBlYWdCQkJ3OGMK1ZqF+UtpicLevUOe
LFZwLqDQwXV1lKm8n1+DAnLkObDc0Fi5tcPSouEiANCnE1QjJzOW6gSWv02qhVDR
EcIyEg==
-----END AGE ENCRYPTED FILE-----
recipient: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBQgnQAq6FUSDK8bxtYPjx3oRCAKG+xy9J3Gas2ztJk
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHBpdi1wMjU2IFZoZXNPdyBBbmw3SGt4
dEdLODhDQmZoV0VBWXVaNGJDSWNpVjF6ZXlLZW9oSzVKaEowUwphOWdtakw1TytC
R3M3S0l5eThRaGYzUlZTeFRYbHI0eGpwSFhuTVc4WTZnCi0tLSBnUGhXeWRUQi9Z
WXc3QWpkZU1zYW9OMnowZXFHMzg5dkZZS01XRTZLbUp3Cs0nUaGOZMEI06uupspL
6qkjvBLKjClmf5ve5P4v10NgOol1tlS1zSHfr8L8RKYMSlTFKaEKRoqVTO58OOsy
1dY=
-----END AGE ENCRYPTED FILE-----
recipient: age1yubikey1qv7jkffslarpma2fxjm9gnq43xfvwdws0m6y3u58h033edwdyg0uzt8jl5n
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5bmxKVk50T204VDVSQzZX
QjNGcmdCVmMxbTRtU2tXa0tsQkNrWjdtYWdvCk92VFE3ZUhnZEthMFYvMVl5dHlu
R3FHZ0ZYT3FMeEdsOG5ReEIxVUpLM3cKLS0tIGRpbXQ5ZHBGdzd1aVM4dzRWUEN1
Uy9kV3hScFR2d0RvS0V6aHc4bHJVbncKznrIswWDf4hULU1YM0ePpoTaU8wE3l42
qIJBztm2souvOZDMZSmbhKRptvwVcjIUrZ09uNqAWe+j22gYNlQMtQ==
-----END AGE ENCRYPTED FILE-----
recipient: age1q7kz3pnfq6cvtn56rlfgs52efcvtcmaq4xny0va3x5wxj4vpgccsenwxk6
lastmodified: "2026-10-08T12:20:28Z"
mac: ENC[AES256_GCM,data:3EAY9S9ZYjjXmqpV0DOZvc1ANHi4P2EhLM+WURsZPE0r1P8YDR0bAxbqilrCbm4U6WznACNfcoyn2esFy63t4va/TyVnLWfukqCUF0+xjd2ICMYTMsT2vzQDFDsBE1RDVJrWuCPC+hsZzBO0cRHrUBRgbWFuDa3eZHXxJl8YAWU=,iv:qNmzrSxrPozOSlh6re/czhUwnfgvAZfn9JQNADSqf3I=,tag:hQAb/WM1ytg3Avomt22P5A==,type:str]
pgp:
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMAxK/JaB2/SdtARAAjTbq4EiPuVnzvKLv4gq9zxoILQFrwx1/SD/oLg7H3Sop
Rg/0Q9MIIREUdxtgrMyurHNCzKkSKnczolPc09qPrRJJ4NwPM0vIcvgAzuazL7GG
UXwszt8aGum516NvABOb7Z1VYsobpHoj23b9kUvC74w2jmXlgnfpzxaHyv7026kP
fRclNkyP9oUpFTPz7Z3VqxeWn6ikEVggloRf/jw29rFtefII529oeIt7YbF+aFYi
CJBfLC5x58KQdVaWC5R/CNMaSNVt7KKnUm6MSkx0du9PpRMqjcZpB26BWb4REGMv
AWW5Lr99vstRBdbGBVHESwu/pkCTtLEA2wBZ7qDWCu7bkrL1p4q7IvQUXqSp4iWG
yagjS2X1ePdXOGgr9bkfcHMoXZw/grc8LFyL79PbuINrnbBW5/XeuaZmxUj73LoA
zGny0He3iMcOzOSrj9FLHODwYblEDMljOP8WEIE+bKhlJwfIRhuTZAzeFWbbV3FB
BH5Lyx3zzGazNxhebiDIuk3Pf3GyRdlWRlXZDtcCyI4wL1tBuFRr83p9IribeFx9
XT0q5+WPbgoLfH7FMdYrT0/rXCZlfRnhTO/lIcph7G10uIRvQxyrKBvTdKKPl/UT
+hWOH4tFTz4sNHiZmGQby7DdE5AYveCHKEgvMIbWa9Xf4O4N731YGjnF28mBE2zU
aAEJAhCvWojK90MZ533d5BPheM/OALJSzV4Rb2dvUF9Pxi0/H4Ur+Aelf6ROPgqg
nXulA7W5CSk+PI5cF1zxBU0SFKvM3Sxtd2HR9rgkfa6z1FVnkkg9nKYoBiPf6i+S
D+y3odZo6qpE
=mezz
-----END PGP MESSAGE-----
fp: EF643F59E008414882232C78FFA8331EEB7D6B70
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQEMA1QflAioE8i3AQgAtTqiXTWMOA5ctm97GM0o1lKPVgvLpmp78pLpE8mQOXzb
WKLInfAdEnBLcWThcEvVuBIvkJI14ZV3FBhLxuwO5mnOv5GbG0n0o6GyAtVOflUi
NycoWMZRzwaddXlPuLc222z+ADbv+7LyKb2gIIkmxj3+oD5BSEIIjjD0yNOMtu/y
jEi8xmuzXhIfHI05jnLMB1aWN1fyBlhTVyS7K7rqJ/8fttwZm31mx7fctq3Auy5n
aODdH7D70CzVulgpjG0v6S1HEO5tXCpPLCWLrKLnFpf1lXkmfJoGCHUPHH/6bag+
p2U3GMW1Hs2/gW7S15KCENMJCiIj5KKuXRWsiQ5xHdJeARvq7GCMXkd4wGwMBSpH
vx44gnqmK5oC/ThJycpZBvw/zWFCZ3SLhKzMXbAa7yHk9lTcLOlxY3QDPfAFmvvF
7AtkynXrwhAzi4K7AMQFl5bOTnIr2AUlNliLQtnzdg==
=GhBB
-----END PGP MESSAGE-----
fp: 21C9579E6503CA815A68ABD8541F9408A813C8B7
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DsZXvxFXTXoQSAQdAZHaU5wfL+FMNLhmZF3cBSgfo+2Y2HCpiGPpxSS4JPWcw
mq0T6O82EvGF2K1bzGeOOn/yNXQJxHGw27qwDcr0POsKR6FtkuSimlQL/p9TP43I
0l4BV+yTpOOBwG4EXxX0ynx6p0jT//W23AJ+wFpaTjbdYv52AYhoYNaCxBCjUo9b
2h37HLQHm7sgUt+sQTRbUB2PjJMmFrYelKXEu3h0LNsIvEGxDErzjgU5yVsYvz/W
=pk+i
-----END PGP MESSAGE-----
fp: 9633412309CCB83BFA39BA5F2FEF746201D7FCFE
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DerEtaFuTeewSAQdAF0xXSYZ1taiaFPSvCVwt2Jy+jl2wd25jGsUa4RC/cmcw
7hjeKkXHoM6kjzaTjsXjz9UWol3c5vkX/6fbSrXEUJijCA7IDYdc19HDIOO62Wk3
0l4BYTPcsD3+VrGifY/2lWoEU4lhS659VSQJEThgoRyBRtWuqx9Awhb5IhpR9lP3
h94Fkt5J4VPqBHKKk/tmA0e5FIodiU+U03kvOHH5cVL1SlQBF6GyyJLV1qhl8dYq
=rnX7
-----END PGP MESSAGE-----
fp: 057870A2C72CD82566A3EC983695F4FCBCAE4912
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMAxjNhCKPP69fAQ/+PDBjhWGJseOyYlKQI6NX8qbQa7+73sNVlw3hZkiYGKqY
081OM7MHg+ku3L+uVbYmYkKDFEFrCkcnlMJFiDa20igAf2S2+XpQ4DL1P19rsgPu
g3lmFxqmisB8TE1cT4Nv4myYpWfuYhecliUVqdx+uLX31mkqmG9c4aWIUf09bRWR
nFUihxHtl9ha7qvdyzpAf2qLu9rGUnAfvxWo2mr8IMYyiMMZu5RIS4AEbSgcDmci
zwS/rJvwZ3Lzykxgc81qDXk+Ajg0hW1QwIF6YtIqyg5SPj9TZyy3gHVpLO5zWbm3
XywYH3Ht5qjma9lOGDnWotaBazbCgA9wWmnghwPETwB/9XYtrUTuEu3YWGvpJ5bw
KY+Fak5QzSQD5VtQec1hGoRU7O6rclRGhe/2mF3lssmCwYolkYqZYOyxrhWrtnb9
HYx5ODihDBI5p6mgVhVsb5l7hJdM1qSCRmqk//CNoMUEBftqjKGKf6/c6OPRikr4
3KPPeyqBM85WNT0WbEmcKsPyDqd9UL26RHg6EDsP3pzGEZxgpgvHLWRw5fYfQQJY
rIb/+hbkl51CcJICUh0qiKST/5G78InwOVsAG88X3tK6QQYx3rl6TjD07JL/9Fow
EiSpQRyJaZM/GpbFdEJJN0ic/xnbSdS0SU7G6iuodn/XJQGkbTyfwa3ZQ7KFNATS
XgE74wKyqFmcG0kD6bIR/nxVnVKJBAqzvwIZrFbNdtK+TiaSXfLFKO89MP7fwA3f
w+TwIsvbx70sa/Icxjhzx5WfLUzTFuJiD/N41osLnfRPNLI2gtMw+Sk0b7Tv99w=
=gkl/
-----END PGP MESSAGE-----
fp: F38C9D4228FC6F674E322D9C3326D914EB9B8F55
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA46L6MuPqfJqARAAqw9fVa37NNtVI47ezmuNPHENvQMT5a2Ci3JXAHe4PqtU
J32K5G6kmKSQ0yiuEvJRebSgM5AmCX8yn3Wq0E1titURVbsyazVYWvxoFhm0uvyP
+0cD/HthRUUvnMGOVcFT4rtH83nrc50xvjAWvIRD7ey7ZnwYybJBSKmnIuEtWVlg
JRY3pCHmacEZER4P4zhPm4I2QhcxgNFI4EZCo66TPaeSe7q1Ai9ul+wCT74+z7pk
FXSON8SHYWZCTEXfOrv6U029xuEQRzu4ScvVsAHVsTtZ75b+7CuEwRv9qhpwsLHd
5vwrskhgD90TJ4JDdb3jeeTaqZoqmO02jhfXOdVR1lrQfYnK6qV9Y7gQxkdgw7Jx
Tus56EtLQvp/Z8Uw183oawe6WGnltSTHmShuvUMmwHgtUKWUw0LCHZYRKWmp5LCr
BBDZ5a5dnROVOJQjQq9vZMyg/HDT/OSE5YnfGuwBxkKcR11HKqwwFyu/MUasaVr4
B02gq8ahcEuXt9EeNDyb+pVCo1c7ws2e0X2zpzAVp49R8LQemicLWJlzEZ0/1D9W
WnYS15dPVjBUutBbWw4PeDaRkMsz/QKygWT5eUGdl1NaWtLfQ4GKIJW1M8qqphKX
e2H1aF5m7qi0ITH3Rol54muHRdkSppfofp04UJl7UI5nxnREHyq2Y9w35BEuBdDS
XgGpZd1cam7KeQFJs45KHKVwceVOpzh8isCd9BrDTPZC4yldaZ9mp9m2c9B9zTxL
/C3DtJ1Gn0dzi/+ILMmY/3cAdS1a+4pmeQIHSRTL0pIHIpzG0fiGQw/Ai4s+qI4=
=kFby
-----END PGP MESSAGE-----
fp: 8996B62CBD159DCADD3B6DC08BB33A8ABCF7BC4A
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DQrf1tCqiJxoSAQdAJH8Ygdx14onZM1SnDCTN1O6x9OmgRgzTEbI6qPNUclEw
HgLaTV80+rFn/ujuPfPyAiTM3XofVd1d8x+jHbjg/craf5cqz0plOfgsdFetKn6+
0l4BW9eo3BLtz5eL0UA+loM74k5tcntEYV9haS4KV+q0HQz39MkBgJoilBfxu/qx
gMfvWmyEYyMv+IgYlPbxkkudgpYRvA7hStpjpDOPtQmJoAZ3/MSUZulJZQVoauyk
=SWSm
-----END PGP MESSAGE-----
fp: B71138A6A8964A3C3B8899857B4F70C356765BAB
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DzAGzViGx4qcSAQdA8TY0wRPRbBddfSbKOg3IC5WrQ3bWrQhnAolz58UO80Iw
yJy4w50zMmD0cVo2l6lXdH0BFsEdIRJSYGdCln2hFIT3Sc45I9N6XtOI1HTgZQVb
0lgBafSzV6bjtbwa38Us6Rj8IeAw2gCclgLvoDgTYzw6HJ/BsnTfXCUQ9I/rVWuO
b6Be+eiYZZ49c2TsgSSJWFlZftM1dJXvKMK9TnbRxqES7Qbv6vklA9yD
=dpIh
-----END PGP MESSAGE-----
fp: D2E9C0807BF681F5E164DAFC5EE1B61CD90954CD
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA2pVdGTIrZI+AQ/9HrbbnAxvHFakxFXG6Ol7u6N4m872b6bCTo7gIF5z25yB
gstxCI1N8UL2kbbnHRb9WpJzJvkuwgnEnlB7zgf60g3bxD/L4uqSVVQ6M4rOUCp+
1TE4laYekMc1rHVEE4OLLC0yLmgTlD5M2not7aMZBigHMYkeqQFIlGrG2eIqIaPc
CYTnofD/AF8CkG7N3mCIv6Ssd/3DIugeRVnrJnOjQV3IzxLuetgYh328rb5mFoXX
gSOZSr++q6/1/8xUG51k/cp02hiZ3zWhRcZCmxLRJyiJem4StTgIZZCyWnQjJH14
i3+S1k6QXGMQ6kpRvpaChLLHbgHI0lXPQ5xoTA3WTT51S+tOiyiRdxUJ8qGq24vc
cNURS6JkRqaLSUnihSF6/ARargknRgVeKAZk9YEnanx5Me4ItTf3gTip7ublwIxE
E+Xvk6S7E7iYpL+gw4Iilu65IW+vyDNorY+RmsHEpPMeuv48USvKF/zj7TyXvXcS
DZvTNxryKpWoeA4LzGqJ8VcEIZU00AS0UectnfwNCBBbC9OpP56lXphjyjbFDP/P
e3SSy1+oTs1/cUcm1HXusZt6MdlA+du0I78ALw+krioFK1TpPkqyQ6ZQoAla1+Hp
4kyK9tQN9idnPlmKFJieuY6ZOLky9+MktSDDoL3/cqAHqje25LDpocq0EkBUiMHU
aAEJAhD+JlpnuW7EM9qYKAIN5lmiP7K0QbYyhfOYkswxmroGjtX+my5SQqxxr1MG
hJnzY7sYCateW5NkRm+PIAJOgZlCCHLPc5Y/lTmQwMioTe6o5z4BnQKSkpIONCQv
S+jtdlST1LjD
=hfRq
-----END PGP MESSAGE-----
fp: 878FEA3CB6A6F6E7CD80ECBE28506E3585F9F533
- created_at: "2026-10-08T12:18:55Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hF4DKKbvh61jX5USAQdAuJWl9BzoG4EgrKSWnaV8Q6syp6UK2cAd9LSZdcYl9k0w
FIXutszrxUFVq7+26KMogiSRn6D+MNF7+ECDV6HUMqSQKFi78xzvTsE2nSIcdhV+
1GgBCQIQivn/rlA7N4tsBFG0EYqTczeco9ujSh7s94l9Tgbd6vi5yTjY+M6dGQkk
s1C9k22rcMjeoeumUNZeY8gqh+IoEZyUDGk+faUf4TrXFc9Fmgxc6ME60U0t5Tnr
Aa5A2xoopylZeQ==
=DeqF
-----END PGP MESSAGE-----
fp: 41FFAF3D519CF5C039FBD8414BCC213729AF0E49
unencrypted_suffix: _unencrypted
version: 3.13.3

View file

@ -1 +0,0 @@
# tbd

View file

@ -104,10 +104,6 @@ all:
ansible_host: forgejo-runner-external.hosts.hamburg.ccc.de
ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
matrix-sync:
ansible_host: matrix-sync.hosts.hamburg.ccc.de
ansible_user: chaos
ansible_ssh_common_args: -J ssh://chaos@router.hamburg.ccc.de
hypervisors:
hosts:
chaosknoten:
@ -122,7 +118,6 @@ base_config_hosts:
jitsi:
keycloak:
lists:
matrix-sync:
mumble:
netbox:
onlyoffice:
@ -146,6 +141,7 @@ systemd_networkd_hosts:
router:
nftables_hosts:
hosts:
jitsi:
router:
docker_compose_hosts:
hosts:
@ -263,6 +259,9 @@ wiki_hosts:
netbox_hosts:
hosts:
netbox:
jitsi_hosts:
hosts:
jitsi:
proxmox_vm_template_hosts:
hosts:
chaosknoten:

View file

@ -110,6 +110,13 @@
tags:
- docker_compose
- name: Ensure Jitsi deployment on jitsi_hosts
hosts: jitsi_hosts
roles:
- jitsi
tags:
- jitsi
- name: Ensure NGINX deployment on nginx_hosts
hosts: nginx_hosts:!public_reverse_proxy_hosts
roles:

View file

@ -139,7 +139,6 @@ waybackproxy A 10.89.212.33
alnair A 10.89.210.23
TXT "Sun SparcStation 4 Retro"
ptouch-print-server A 10.89.208.14
;
; Public Club Services
;

View file

@ -512,7 +512,6 @@ public-web-static.hosts IN AAAA 2a00:14b0:42:102::17
forgejo-actions-runner.hosts IN AAAA 2a00:14b0:42:102::18
forgejo-runner.hosts IN AAAA 2a00:14b0:42:102::19
forgejo-runner-external.hosts IN AAAA 2a00:14b0:42:102::1a
matrix-sync.hosts IN AAAA 2a00:14b0:42:102::1b
; acme-challenges
_acme-challenge.sunders CNAME a5ee8a99-3cdf-4212-972e-c0b6fda1242f.auth.acmedns

View file

@ -0,0 +1,65 @@
#!/usr/sbin/nft -f
# Docker manages its own tables (via iptables-nft), so don't use "flush ruleset" here,
# but only replace our own table. This also means that a reload is fine, but stopping
# or restarting nftables.service (which flushes the whole ruleset) requires restarting
# Docker afterwards.
# Traffic to ports published by Docker containers (web, JVB, exporter) gets DNATed in
# prerouting and therefore passes the forward hook instead of the input hook.
## Variables
define if_wan = "ens18"
# Prometheus on grafana (IPv4 via the NAT of router)
define prometheus_v4 = { 212.12.48.123 }
define prometheus_v6 = { 2a00:14b0:42:102::e }
## Rules
table inet host_filter
delete table inet host_filter
table inet host_filter {
# Runs before Docker's DNAT, so this also applies to ports published by containers.
chain prerouting {
type filter hook prerouting priority dstnat - 10; policy accept;
iifname $if_wan tcp dport 9888 ip saddr $prometheus_v4 accept comment "jitsi exporter (container)"
iifname $if_wan tcp dport 9888 ip6 saddr $prometheus_v6 accept comment "jitsi exporter (container)"
iifname $if_wan tcp dport 9888 drop
}
chain input {
type filter hook input priority filter; policy drop;
iifname "lo" accept
ct state invalid drop
ct state established,related accept
# ICMPv6 is needed for neighbour discovery etc.
meta l4proto ipv6-icmp accept
meta l4proto icmp accept
# Docker networks
iifname { "docker0", "br-*" } accept
tcp dport 22 accept comment "ssh"
# Ports published by containers normally get DNATed and never reach the input
# hook, but they do when handled by docker-proxy (e.g. for IPv6 without IPv6
# enabled on the Docker network).
tcp dport { 80, 443 } accept comment "jitsi web (container)"
udp dport 10000 accept comment "jitsi jvb (container)"
# coturn (runs in the host network namespace)
udp dport 3478 accept comment "turn"
tcp dport 3478 accept comment "turn"
tcp dport 5349 accept comment "turns"
udp dport 5349 accept comment "turns (dtls)"
udp dport 49152-65535 accept comment "turn relay ports"
tcp dport { 9100, 9888 } ip saddr $prometheus_v4 accept comment "node exporter, jitsi exporter (container)"
tcp dport { 9100, 9888 } ip6 saddr $prometheus_v6 accept comment "node exporter, jitsi exporter (container)"
}
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.8 KiB

View file

@ -0,0 +1,5 @@
{
"logoImageUrl": "https://jitsi.hamburg.ccc.de/images/watermark.svg",
"logoClickUrl": "https://hamburg.ccc.de/",
"backgroundImageUrl": "https://jitsi.hamburg.ccc.de/images/ccchh-background.svg"
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 84 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

@ -0,0 +1,13 @@
<template id = "welcome-page-additional-content-template">
<footer class = "welcome-footer">
<div class = "welcome-footer-centered">
<div class = "welcome-footer-padded">
<div class = "welcome-footer-row-block welcome-footer--row-1" style = "flex-wrap: wrap; gap: 16px;">
<a href = "https://wiki.hamburg.ccc.de/infrastructure:services:jitsi" style = "color: #fff;">Technical Information for CCCHH Jitsi</a>
<a href = "https://hamburg.ccc.de/imprint/" style = "color: #fff;">Imprint and Contact</a>
<a href = "https://hamburg.ccc.de/privacy-notice/" style = "color: #fff;">Privacy Policy</a>
</div>
</div>
</div>
</footer>
</template>

View file

@ -4,7 +4,7 @@
services:
onlyoffice:
image: docker.io/onlyoffice/documentserver:10.0.0
image: docker.io/onlyoffice/documentserver:9.4.0
restart: unless-stopped
volumes:
- "./onlyoffice/DocumentServer/logs:/var/log/onlyoffice"

64
roles/jitsi/README.md Normal file
View file

@ -0,0 +1,64 @@
# Role `jitsi`
A role for deploying [Jitsi Meet](https://jitsi.org/) using the official [docker-jitsi-meet](https://github.com/jitsi/docker-jitsi-meet) release.
The given release is downloaded and unpacked unmodified to `/opt/jitsi/releases/` and `/opt/jitsi/release` is pointed to it.
The `.env` file at `/opt/jitsi/.env` is fully managed by this role; `env.example` and `gen-passwords.sh` of the release are not used.
The `.env` also sets `COMPOSE_PROJECT_NAME` and `COMPOSE_FILE`, so `docker compose` can be run by hand in `/opt/jitsi`.
The Jitsi configuration directory (`CONFIG`) is `/opt/jitsi/config`, with persistent state in `/opt/jitsi/config/storage/`.
The image version (`JITSI_IMAGE_VERSION`) always equals the release version, so upgrading means bumping `jitsi__version`.
Releases other than the configured one are removed.
TLS certificates are obtained by the web container itself using Let's Encrypt, so ports 80/tcp and 443/tcp as well as 10000/udp (media) must be reachable.
Optionally, a [coturn](https://github.com/coturn/coturn) TURN server and the [Prometheus Jitsi Meet exporter](https://github.com/systemli/prometheus-jitsi-meet-exporter) are deployed as additional services of the same Compose project, defined in `/opt/jitsi/compose.override.yaml`.
coturn uses the certificate obtained by the web container and is restarted weekly to pick up renewals.
It needs 3478/udp+tcp, 5349/tcp and the relay port range 49152-65535/udp to be reachable.
The exporter scrapes the JVB statistics and listens on port 9888.
Files can be added to or replaced in the Jitsi Meet web root (`/usr/share/jitsi-meet` in the web container) using `jitsi__web_files`, e.g. for branding.
They are deployed to `/opt/jitsi/web-files/` and bind-mounted into the web container.
## Supported Distributions
Should work on Debian-based distributions.
## Required Arguments
- `jitsi__version`: The docker-jitsi-meet release to deploy, e.g. `stable-11248`.
- `jitsi__domain`: The domain Jitsi is served on. Used for `PUBLIC_URL` and the Let's Encrypt certificate.
- `jitsi__letsencrypt_email`: The e-mail address for the Let's Encrypt account.
- `jitsi__jicofo_auth_password`: XMPP password for Jicofo. Generate using `openssl rand -hex 16`.
- `jitsi__jvb_auth_password`: XMPP password for the JVB. Generate using `openssl rand -hex 16`.
## Optional Arguments
- `jitsi__timezone`: The time zone for the containers.
Defaults to `Europe/Berlin`.
- `jitsi__jvb_advertise_ips`: List of IP addresses the JVB should advertise for media (`JVB_ADVERTISE_IPS`).
Defaults to `[ ]`.
- `jitsi__whiteboard`: Whether to deploy the Excalidraw whiteboard backend (`whiteboard.yml`).
Defaults to `false`.
- `jitsi__turn`: Whether to deploy coturn and configure Jitsi to use it.
Defaults to `false`.
- `jitsi__turn_secret`: The shared secret between Prosody and coturn. Required if `jitsi__turn` is `true`.
Generate using `openssl rand -hex 32`.
- `jitsi__prometheus_exporter`: Whether to deploy the Prometheus Jitsi Meet exporter on port 9888.
Defaults to `false`.
- `jitsi__env`: Dictionary of additional variables to put into the `.env` file.
See `env.example` of the release and the handbook for available variables.
Defaults to `{ }`.
- `jitsi__custom_config_js`: Content of `custom-config.js`, which gets appended to the generated `config.js`.
Defaults to `""` (no file).
- `jitsi__custom_interface_config_js`: Content of `custom-interface_config.js`, which gets appended to the generated `interface_config.js`.
Defaults to `""` (no file).
- `jitsi__web_files`: List of files to mount into the Jitsi Meet web root.
Defaults to `[ ]`.
- `jitsi__web_files.*.path`: Path relative to the web root, e.g. `images/watermark.svg` or `static/welcomePageAdditionalContent.html`.
- `jitsi__web_files.*.content`: The content of the file.
## Links & Resources
- <https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker/>
- <https://github.com/jitsi/docker-jitsi-meet>
- <https://github.com/jitsi/docker-jitsi-meet/releases>

View file

@ -0,0 +1,9 @@
jitsi__timezone: Europe/Berlin
jitsi__jvb_advertise_ips: [ ]
jitsi__whiteboard: false
jitsi__turn: false
jitsi__prometheus_exporter: false
jitsi__env: { }
jitsi__custom_config_js: ""
jitsi__custom_interface_config_js: ""
jitsi__web_files: [ ]

View file

@ -0,0 +1,19 @@
- name: restart jitsi web
community.docker.docker_compose_v2:
project_src: "{{ jitsi__base_dir }}"
project_name: jitsi
files: "{{ jitsi__compose_files }}"
services:
- web
state: restarted
become: true
- name: restart jitsi coturn
community.docker.docker_compose_v2:
project_src: "{{ jitsi__base_dir }}"
project_name: jitsi
files: "{{ jitsi__compose_files }}"
services:
- coturn
state: restarted
become: true

View file

@ -0,0 +1,69 @@
argument_specs:
main:
options:
jitsi__version:
type: str
required: true
jitsi__domain:
type: str
required: true
jitsi__letsencrypt_email:
type: str
required: true
jitsi__jicofo_auth_password:
type: str
required: true
no_log: true
jitsi__jvb_auth_password:
type: str
required: true
no_log: true
jitsi__timezone:
type: str
required: false
default: Europe/Berlin
jitsi__jvb_advertise_ips:
type: list
elements: str
required: false
default: [ ]
jitsi__whiteboard:
type: bool
required: false
default: false
jitsi__turn:
type: bool
required: false
default: false
jitsi__turn_secret:
type: str
required: false
no_log: true
jitsi__prometheus_exporter:
type: bool
required: false
default: false
jitsi__env:
type: dict
required: false
default: { }
jitsi__custom_config_js:
type: str
required: false
default: ""
jitsi__custom_interface_config_js:
type: str
required: false
default: ""
jitsi__web_files:
type: list
elements: dict
required: false
default: [ ]
options:
path:
type: str
required: true
content:
type: str
required: true

View file

@ -0,0 +1,4 @@
---
allow_duplicates: false
dependencies:
- role: docker

226
roles/jitsi/tasks/main.yaml Normal file
View file

@ -0,0 +1,226 @@
- name: make sure a TURN secret is given, if TURN is enabled
ansible.builtin.assert:
that:
- jitsi__turn_secret is defined
- jitsi__turn_secret | length > 0
quiet: true
when: jitsi__turn
- name: make sure the Jitsi base directories exist
ansible.builtin.file:
path: "{{ item }}"
state: directory
mode: "0755"
owner: root
group: root
become: true
loop:
- "{{ jitsi__base_dir }}"
- "{{ jitsi__base_dir }}/releases"
- name: make sure the docker-jitsi-meet release is present
ansible.builtin.unarchive:
src: "https://github.com/jitsi/docker-jitsi-meet/archive/refs/tags/{{ jitsi__version }}.tar.gz"
remote_src: true
dest: "{{ jitsi__base_dir }}/releases"
creates: "{{ jitsi__release_dir }}/docker-compose.yml"
owner: root
group: root
become: true
- name: point the `release` symlink to the configured release
ansible.builtin.file:
src: "{{ jitsi__release_dir }}"
dest: "{{ jitsi__base_dir }}/release"
state: link
owner: root
group: root
become: true
# Configuration read by the containers at startup; managed by Ansible.
- name: make sure the configuration input directories exist
ansible.builtin.file:
path: "{{ jitsi__config_dir }}/{{ item }}"
state: directory
mode: "0755"
owner: root
group: root
become: true
loop:
- ""
- web
- prosody
- prosody/config
- prosody/prosody-plugins-custom
- jicofo
- jvb
- storage
- tmp
# State written by the containers, which run as uid/gid 1000.
# The certificate directory is created here, as Docker would otherwise create it owned by
# root for the coturn bind mount, before the web container gets to write the certificate.
- name: make sure the storage and tmp directories exist and are writable by the containers
ansible.builtin.file:
path: "{{ jitsi__config_dir }}/{{ item }}"
state: directory
mode: "0750"
owner: "1000"
group: "1000"
become: true
loop:
- storage/prosody
- storage/web
- storage/web/acme-certs
- "storage/web/acme-certs/{{ jitsi__domain }}"
- storage/transcripts
- tmp/web-crontabs
- tmp/web-load-test
- name: deploy custom web configuration
ansible.builtin.copy:
content: "{{ item.content }}"
dest: "{{ jitsi__config_dir }}/web/{{ item.name }}"
mode: "0644"
owner: root
group: root
become: true
when: item.content != ""
loop:
- name: custom-config.js
content: "{{ jitsi__custom_config_js }}"
- name: custom-interface_config.js
content: "{{ jitsi__custom_interface_config_js }}"
loop_control:
label: "{{ item.name }}"
notify: restart jitsi web
- name: remove unconfigured custom web configuration
ansible.builtin.file:
path: "{{ jitsi__config_dir }}/web/{{ item.name }}"
state: absent
become: true
when: item.content == ""
loop:
- name: custom-config.js
content: "{{ jitsi__custom_config_js }}"
- name: custom-interface_config.js
content: "{{ jitsi__custom_interface_config_js }}"
loop_control:
label: "{{ item.name }}"
notify: restart jitsi web
- name: make sure the coturn directory exists
ansible.builtin.file:
path: "{{ jitsi__base_dir }}/coturn"
state: "{{ 'directory' if jitsi__turn else 'absent' }}"
mode: "0755"
owner: root
group: root
become: true
# Readable by uid 1000, which coturn runs as.
- name: deploy the coturn configuration
ansible.builtin.template:
src: turnserver.conf.j2
dest: "{{ jitsi__base_dir }}/coturn/turnserver.conf"
mode: "0640"
owner: root
group: "1000"
become: true
when: jitsi__turn
notify: restart jitsi coturn
# coturn doesn't notice the certificate renewed by the web container on its own.
- name: ensure the weekly coturn restart cron job is present
ansible.builtin.cron:
name: "jitsi coturn restart for certificate renewal"
special_time: weekly
job: "cd {{ jitsi__base_dir }} && docker compose restart coturn >/dev/null"
state: "{{ 'present' if jitsi__turn else 'absent' }}"
become: true
# Files mounted into the web container, replacing or adding to the files of Jitsi Meet.
- name: make sure the directories for the web files exist
ansible.builtin.file:
path: "{{ jitsi__base_dir }}/web-files/{{ item }}"
state: directory
mode: "0755"
owner: root
group: root
become: true
loop: "{{ [''] + (jitsi__web_files | map(attribute='path') | map('dirname') | unique | reject('equalto', '') | list) }}"
- name: deploy the web files
ansible.builtin.copy:
content: "{{ item.content }}"
dest: "{{ jitsi__base_dir }}/web-files/{{ item.path }}"
mode: "0644"
owner: root
group: root
become: true
loop: "{{ jitsi__web_files }}"
loop_control:
label: "{{ item.path }}"
# Single file bind mounts keep pointing to the replaced file until the container is restarted.
notify: restart jitsi web
- name: find web files to remove
ansible.builtin.find:
paths: "{{ jitsi__base_dir }}/web-files"
recurse: true
register: jitsi__web_files_found
- name: remove web files, which should be removed
ansible.builtin.file:
path: "{{ item }}"
state: absent
become: true
loop: "{{ jitsi__web_files_found.files | map(attribute='path') | reject('in', jitsi__web_files_paths) | list }}"
vars:
jitsi__web_files_paths: "{{ jitsi__web_files | map(attribute='path') | map('regex_replace', '^', jitsi__base_dir ~ '/web-files/') | list }}"
# Changes to these make `docker compose up` below recreate the affected containers.
- name: deploy the compose override file
ansible.builtin.template:
src: compose.override.yaml.j2
dest: "{{ jitsi__base_dir }}/compose.override.yaml"
mode: "0644"
owner: root
group: root
become: true
- name: deploy the .env file
ansible.builtin.template:
src: jitsi.env.j2
dest: "{{ jitsi__base_dir }}/.env"
mode: "0600"
owner: root
group: root
become: true
- name: docker compose up
community.docker.docker_compose_v2:
project_src: "{{ jitsi__base_dir }}"
project_name: jitsi
files: "{{ jitsi__compose_files }}"
state: present
pull: missing
remove_orphans: true
become: true
- name: find old releases
ansible.builtin.find:
paths: "{{ jitsi__base_dir }}/releases"
file_type: directory
excludes: "docker-jitsi-meet-{{ jitsi__version }}"
register: jitsi__old_releases
- name: remove old releases
ansible.builtin.file:
path: "{{ item.path }}"
state: absent
become: true
loop: "{{ jitsi__old_releases.files }}"
loop_control:
label: "{{ item.path }}"

View file

@ -0,0 +1,47 @@
# {{ ansible_managed }}
# Services in addition to the ones of the docker-jitsi-meet release.
# Docker Compose explicitly disables IPv6 for networks not enabling it, overriding the
# daemon's default-network-opts.
networks:
meet.jitsi:
enable_ipv6: true
services:
{% if jitsi__web_files | length > 0 %}
web:
volumes:
{% for file in jitsi__web_files %}
- {{ jitsi__base_dir }}/web-files/{{ file.path }}:/usr/share/jitsi-meet/{{ file.path }}:ro
{% endfor %}
{% endif %}
{% if jitsi__turn %}
coturn:
image: docker.io/coturn/coturn:4.18.0
restart: unless-stopped
# Recommended by coturn, as Docker performs badly with large port ranges.
network_mode: host
# Needs to be able to read the certificate obtained by the web container.
user: "1000:1000"
command: ["-c", "/etc/coturn/turnserver.conf"]
volumes:
- {{ jitsi__base_dir }}/coturn/turnserver.conf:/etc/coturn/turnserver.conf:ro
- {{ jitsi__config_dir }}/storage/web/acme-certs/{{ jitsi__domain }}:/certs:ro
tmpfs:
- /var/lib/coturn
{% endif %}
{% if jitsi__prometheus_exporter %}
prometheus-jitsi-meet-exporter:
image: docker.io/systemli/prometheus-jitsi-meet-exporter:1.4.2
restart: unless-stopped
command: ["-videobridge-url", "http://jvb:8080/colibri/stats"]
ports:
- "9888:9888"
depends_on:
- jvb
networks:
meet.jitsi:
{% endif %}
{% if not (jitsi__web_files or jitsi__turn or jitsi__prometheus_exporter) %}
{}
{% endif %}

View file

@ -0,0 +1,46 @@
# {{ ansible_managed }}
# Only the settings differing from the defaults are set here.
# Reference: {{ jitsi__base_dir }}/release/env.example and
# https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker
# Allow running `docker compose` by hand in {{ jitsi__base_dir }}.
COMPOSE_PROJECT_NAME=jitsi
COMPOSE_FILE={{ jitsi__compose_files | join(':') }}
CONFIG={{ jitsi__config_dir }}
JITSI_IMAGE_VERSION={{ jitsi__version }}
TZ={{ jitsi__timezone }}
PUBLIC_URL=https://{{ jitsi__domain }}
HTTP_PORT=80
HTTPS_PORT=443
ENABLE_HTTP_REDIRECT=1
ENABLE_LETSENCRYPT=1
LETSENCRYPT_DOMAIN={{ jitsi__domain }}
LETSENCRYPT_EMAIL={{ jitsi__letsencrypt_email }}
LETSENCRYPT_ACME_SERVER=letsencrypt
{% if jitsi__jvb_advertise_ips | length > 0 %}
JVB_ADVERTISE_IPS={{ jitsi__jvb_advertise_ips | join(',') }}
{% endif %}
{% if jitsi__whiteboard %}
WHITEBOARD_COLLAB_SERVER_URL_BASE=http://whiteboard.meet.jitsi
{% endif %}
{% if jitsi__turn %}
TURN_CREDENTIALS={{ jitsi__turn_secret }}
TURN_HOST={{ jitsi__domain }}
TURN_PORT=3478
TURN_TRANSPORT=udp,tcp
TURNS_HOST={{ jitsi__domain }}
TURNS_PORT=5349
{% endif %}
{% if jitsi__env | length > 0 %}
{% for key, value in jitsi__env.items() %}
{{ key }}={{ value }}
{% endfor %}
{% endif %}
JICOFO_AUTH_PASSWORD={{ jitsi__jicofo_auth_password }}
JVB_AUTH_PASSWORD={{ jitsi__jvb_auth_password }}

View file

@ -0,0 +1,34 @@
# {{ ansible_managed }}
listening-port=3478
tls-listening-port=5349
realm={{ jitsi__domain }}
use-auth-secret
static-auth-secret={{ jitsi__turn_secret }}
cert=/certs/fullchain.pem
pkey=/certs/key.pem
no-tlsv1
no-tlsv1_1
no-cli
no-multicast-peers
no-loopback-peers
log-file=stdout
# Don't relay to private and otherwise special addresses.
denied-peer-ip=0.0.0.0-0.255.255.255
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.0.0.0-192.0.0.255
denied-peer-ip=192.0.2.0-192.0.2.255
denied-peer-ip=192.88.99.0-192.88.99.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=198.18.0.0-198.19.255.255
denied-peer-ip=198.51.100.0-198.51.100.255
denied-peer-ip=203.0.113.0-203.0.113.255
denied-peer-ip=240.0.0.0-255.255.255.255
denied-peer-ip=::1
denied-peer-ip=64:ff9b::-64:ff9b::ffff:ffff
denied-peer-ip=::ffff:0.0.0.0-::ffff:255.255.255.255
denied-peer-ip=fc00::-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
denied-peer-ip=fe80::-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff

View file

@ -0,0 +1,4 @@
jitsi__base_dir: /opt/jitsi
jitsi__config_dir: "{{ jitsi__base_dir }}/config"
jitsi__release_dir: "{{ jitsi__base_dir }}/releases/docker-jitsi-meet-{{ jitsi__version }}"
jitsi__compose_files: "{{ ['release/docker-compose.yml'] + (['release/whiteboard.yml'] if jitsi__whiteboard else []) + ['compose.override.yaml'] }}"

View file

@ -13,3 +13,10 @@
group: root
become: true
notify: Reload nftables service
- name: ensure nftables service is enabled and started
ansible.builtin.systemd_service:
name: nftables
enabled: true
state: started
become: true