Skip to content

Commit

Permalink
feat: add devnet 3, yeet devnet 2
Browse files Browse the repository at this point in the history
  • Loading branch information
barnabasbusa committed Oct 4, 2024
1 parent efb2d13 commit e3ff31f
Show file tree
Hide file tree
Showing 206 changed files with 182,493 additions and 9 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ This repository contains the infrastructure code used to setup ~all~ dev/testnet

Status | Network | Links | Ansible | Terraform | Kubernetes
------ | -------- | ---- | ----- | ------- | ------
Online 🟢| [devnet-2](https://peerdas-devnet-2.ethpandaops.io) | [Network config](network-configs/devnet-2) / [Inventory](https://bootnode-1.peerdas-devnet-2.ethpandaops.io/meta/api/v1/inventory.json) / [Validator ranges](https://bootnode-1.peerdas-devnet-2.ethpandaops.io/meta/api/v1/validator-ranges.json) | [🔗](ansible/inventories/devnet-2) | [🔗](terraform/devnet-2) | [🔗](kubernetes/devnet-2)
Online 🟢| [devnet-3](https://peerdas-devnet-3.ethpandaops.io) | [Network config](network-configs/devnet-3) / [Inventory](https://bootnode-1.peerdas-devnet-3.ethpandaops.io/meta/api/v1/inventory.json) / [Validator ranges](https://bootnode-1.peerdas-devnet-3.ethpandaops.io/meta/api/v1/validator-ranges.json) | [🔗](ansible/inventories/devnet-3) | [🔗](terraform/devnet-3) | [🔗](kubernetes/devnet-3)
Off🔴| [devnet-2](https://peerdas-devnet-2.ethpandaops.io) | [Network config](network-configs/devnet-2) / [Inventory](https://bootnode-1.peerdas-devnet-2.ethpandaops.io/meta/api/v1/inventory.json) / [Validator ranges](https://bootnode-1.peerdas-devnet-2.ethpandaops.io/meta/api/v1/validator-ranges.json) | [🔗](ansible/inventories/devnet-2) | [🔗](terraform/devnet-2) | [🔗](kubernetes/devnet-2)
Off🔴 | [devnet-1](https://peerdas-devnet-1.ethpandaops.io) | [Network config](network-configs/devnet-1) / [Inventory](https://bootnode-1.peerdas-devnet-1.ethpandaops.io/meta/api/v1/inventory.json) / [Validator ranges](https://bootnode-1.peerdas-devnet-1.ethpandaops.io/meta/api/v1/validator-ranges.json) | [🔗](ansible/inventories/devnet-1) | [🔗](terraform/devnet-1) | [🔗](kubernetes/devnet-1)
Off🔴 | [devnet-0](https://peerdas-devnet-0.ethpandaops.io) | [Network config](network-configs/devnet-0) / [Inventory](https://bootnode-1.peerdas-devnet-0.ethpandaops.io/meta/api/v1/inventory.json) / [Validator ranges](https://bootnode-1.peerdas-devnet-0.ethpandaops.io/meta/api/v1/validator-ranges.json) | [🔗](ansible/inventories/devnet-0) | [🔗](terraform/devnet-0) | [🔗](kubernetes/devnet-0)

Expand Down
4 changes: 2 additions & 2 deletions ansible/ansible.cfg
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[defaults]
ansible_managed = Ansible managed. Don't change this file manually. Template info: {{{{ (template_fullpath | replace(playbook_dir,'')) }}}}
stdout_callback = yaml
inventory = inventories/devnet-2/inventory.ini, inventories/devnet-2/hetzner_inventory.ini
inventory = inventories/devnet-3/inventory.ini, inventories/devnet-3/hetzner_inventory.ini
roles_path = vendor/roles/:roles
collections_path = vendor/collections
forks = 50
Expand All @@ -16,7 +16,7 @@ fact_caching = jsonfile
# Keep facts forever
fact_caching_timeout = 0
# Where to store the fact cache
fact_caching_connection = tmp/devnet-2/
fact_caching_connection = tmp/devnet-3/
[inventory]
enable_plugins = script, yaml, ini
Expand Down
6 changes: 3 additions & 3 deletions ansible/inventories/devnet-2/group_vars/all/all.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ ethstats_url: "ethstats.{{ ethereum_network_name }}.{{ domain }}"
ethstats_secret: "{{ secret_ethstats }}"

### Checkpoint sync specific for Ansible & Kubernetes
checkpoint_sync_node: bootnode-1
checkpoint_sync_node: lighthouse-geth-4
ethereum_node_cl_checkpoint_sync_enabled: false
checkpoint_sync_url: https://{{ secret_nginx_shared_basic_auth.name }}:{{ secret_nginx_shared_basic_auth.password }}@bn.{{ checkpoint_sync_node }}.srv.{{ ethereum_network_name }}.{{ domain }}
checkpoint_sync_url_kube: https://<path:/secrets/services/services.enc.yaml#ethereum | jsonPath {.testnets.peerdas-devnets.node_ingress.combined}>@bn.{{ checkpoint_sync_node }}.srv.{{ ethereum_network_name }}.{{ domain }}
checkpoint_sync_url: https://{{ secret_nginx_shared_basic_auth.name }}:{{ secret_nginx_shared_basic_auth.password }}@bn.{{ checkpoint_sync_node }}.{{ ethereum_network_name }}.{{ domain }}
checkpoint_sync_url_kube: https://<path:/secrets/services/services.enc.yaml#ethereum | jsonPath {.testnets.peerdas-devnets.node_ingress.combined}>@bn.{{ checkpoint_sync_node }}.{{ ethereum_network_name }}.{{ domain }}
# ██████╗░░█████╗░██╗░░░░░███████╗  ██╗░░░██╗░█████╗░██████╗░░██████╗
# ██╔══██╗██╔══██╗██║░░░░░██╔════╝  ██║░░░██║██╔══██╗██╔══██╗██╔════╝
# ██████╔╝██║░░██║██║░░░░░█████╗░░  ╚██╗░██╔╝███████║██████╔╝╚█████╗░
Expand Down
1 change: 1 addition & 0 deletions ansible/inventories/devnet-2/group_vars/ethereum_node.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,4 @@ prometheus_config: |
- targets: ["{{ vars[ethereum_node_cl + '_container_name'] }}:{{ ethereum_node_cl_ports_metrics }}"]
labels:
instance: "{{ inventory_hostname }}"
supernode: "{{ ethereum_node_cl_supernode_enabled | bool }}"
1 change: 1 addition & 0 deletions ansible/inventories/devnet-2/group_vars/geth.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ prometheus_config: |
- targets: ["{{ vars[ethereum_node_cl + '_container_name'] }}:{{ ethereum_node_cl_ports_metrics }}"]
labels:
instance: "{{ ethereum_network_name }}-{{ inventory_hostname }}"
supernode: "{{ ethereum_node_cl_supernode_enabled | bool }}"
- job_name: "execution"
metrics_path: "/debug/metrics/prometheus"
static_configs:
Expand Down
8 changes: 5 additions & 3 deletions ansible/inventories/devnet-2/group_vars/nimbus.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,10 @@ validator_bls_sync_files:
ethereum_node_cl: nimbus

# Checkpointsync
nimbus_checkpoint_autoremove_enabled: true

nimbus_checkpoint_autoremove_enabled: false
nimbus_checkpoint_container_command_extra_args:
- --trusted-node-url={{ checkpoint_sync_url }}
- --backfill=false
# role: ethpandaops.general.nimbus
nimbus_container_name: beacon
nimbus_container_image: "{{ default_ethereum_client_images.nimbus }}"
Expand All @@ -41,7 +43,7 @@ nimbus_container_command_extra_simple_args:
- --network=/network-config
- --validator-monitor-auto=false
- --doppelganger-detection=off
- --log-level=INFO
- --log-level=DEBUG
- --light-client-data-serve=false
- --graffiti={{ ansible_hostname }}
nimbus_container_command_extra_bootnode_args: >-
Expand Down
62 changes: 62 additions & 0 deletions ansible/inventories/devnet-3/group_vars/all/00-defaults.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
ansible_user: devops
ansible_python_interpreter: /usr/bin/python3
devnet_name: peerdas

# IPv6 Specific configuration
global_ipv6_enabled: true
global_ipv6_subnet_ranges:
hetzner: "64"
digitalocean: "124"

######################################################
##
## Role specific overwrites
##
######################################################

# role: ethpandaops.general.bootstrap
bootstrap_user: root
bootstrap_default_user_authorized_keys_github:
- barnabasbusa
- parithosh
- samcm
- savid
- skylenet
- pk910

# role: robertdebock.fail2ban
fail2ban_loglevel: INFO
fail2ban_logtarget: /var/log/fail2ban.log
fail2ban_maxretry: 10
fail2ban_bantime: 600
fail2ban_ignoreips:
- "127.0.0.1/8 ::1"
- "{{ lookup('ansible.builtin.url', 'http://ifconfig.me/ip', split_lines=False) }}/32" # Avoid banning ourself


# role: ethpandaops.general.docker_network
docker_network_name: shared
docker_network_enable_ipv6: "{{ global_ipv6_enabled }}"
docker_network_ipam_config: >-
{{ global_ipv6_enabled | ternary(
[ { 'subnet': ansible_default_ipv6.address | ansible.utils.ipsubnet(global_ipv6_subnet_ranges[hostvars[inventory_hostname]['cloud']]) } ]
, [])
}}
docker_networks_shared:
- name: "{{ docker_network_name }}"

# role: geerlingguy.docker
docker_users:
- devops
docker_daemon_options:
"log-driver": "json-file"
"log-opts":
"max-size": "250m"
"max-file": "2"

# role: ethpandaops.general.prometheus
prometheus_container_networks: "{{ docker_networks_shared }}"

# role: ethpandaops.general.ethereum_node
ethereum_node_images_always_pull: true
151 changes: 151 additions & 0 deletions ansible/inventories/devnet-3/group_vars/all/all.sops.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
secret_zerossl:
ACME_EAB_KID: ENC[AES256_GCM,data:MaFunLQX31XPGGuAdmXJEb+2jMVN5g==,iv:QjZR7VKAYrue+i0jcld/tmQi3Qwfw6HogpLVzDRFpaM=,tag:kuc2r54Osz41eMzWou9wIQ==,type:str]
ACME_EAB_HMAC_KEY: ENC[AES256_GCM,data:VrtHU5kn3P7yG9ek6x5+k7YhvIS50q+0T1+ryJ+D0tZeQcp+tuPUXDYk9PFjVdCy9gr1MJF4OiKU+ynsd3jhSDOlyJGuZqyLfqSSMER6dntXdyhqSKU=,iv:tbxaCn7+aJUh8JsiAQ1gnMLyqm1aAnPSECjI//NLqLc=,tag:UyJvxuVHYIrjFjXF36R2Cg==,type:str]
secret_prometheus_remote_write:
username: ENC[AES256_GCM,data:N8zEJerCytHEfM8awSkKjQ==,iv:vF0KGOZL+3OyIWwm1h4PmZoh2UdnvpAmiGB5E91Cq/Q=,tag:+MrdrSBVCQ0sbQB3Z3d5Kg==,type:str]
password: ENC[AES256_GCM,data:S29UyYV1ySAmsA7JkjWeRXDRhyjQH9iR6TbUI7aPZkU+Za8L,iv:6eT9fH3LFdgjk5JVrk/KvHYbOsxdO3d8whk8bj7GzV4=,tag:PhsAUbbOqYp4TOi35VFCkg==,type:str]
secret_nginx_shared_basic_auth:
name: ENC[AES256_GCM,data:bjlM,iv:DiOGlqfOfrDlt7X4OGY27OYlkDDEHguv+kg1zRhBek0=,tag:ZPlucwl2PNXeXcOc8PmCBQ==,type:str]
password: ENC[AES256_GCM,data:CeX1jyv0KDK151kGStjh,iv:aXD2auKPfUAHolr2ucFNPr95ZrtfD6ucwJhGeGTwUF8=,tag:wVfTl+zuf5IqynDdvxNRNQ==,type:str]
secret_ethstats: ENC[AES256_GCM,data:HIwmSTRE8lJq903D0Vig1PldLPJ6QVh9ZQ==,iv:XQ3L/Jn+1qeF6Qqmizu4iUsJXKGvoLovNtxlns2FIoI=,tag:JM98o3sPU2ZIDOif+y6rlg==,type:str]
secret_genesis_mnemonic: ENC[AES256_GCM,data:ZgfN0UKNL1/1LfDuurC7vT36tYtf5pIqdVH4KDmh8m2qJjaSjLZN7WHIRCLH0F+6EdTP/BnqwDrVEJInOL447JqqWRuAqPgaAOE0wP9c6WtTFCE7zQShTc1gmWskBDHAX8EEEqxLn0gBqQu+NGlqx/kcTsr5VcihG3dX6vuXAIH4VNMywkscPNX3HLaNhrJxMPdR3rUECe3VTZE7cHpdOBt89TZb,iv:hUwVngpfwfoQS47+XEOF1/KnPvkWulvp5fvBMHxYzkI=,tag:Dd8dvLDqbr+WwotFPic8bA==,type:str]
secret_mev_signingkey: ENC[AES256_GCM,data:7xug6L4MXETqWb7cmZS6BpAxBercs4mnJEg1NKp+LwZjCWl5pPAlTbfZASwXVBMo24Xoqi9/FbjeJML6WtaJ2Q==,iv:UGcVz81+wBNdb4cmkg9t4tSamqOaBUfWk6glh/6jUA8=,tag:W5Y00+vamA2tq2tEpAEhQA==,type:str]
secret_mev_flood_private_key: ENC[AES256_GCM,data:2vVJ+N0XLer202Dc5J2HVjTEW6XUa+LpmhS/mo2brt+qzabraTSaD7d4P5rVqbovW+W5Je5FdDr4s7rScyn/RA==,iv:1qNfUVqJ9eebRmA4Ly59KFR9WmaQ8eelSvNLJAWCJ10=,tag:knDhqt3zak1OEsHi2nQ3oA==,type:str]
secret_mev_flood_user_key: ENC[AES256_GCM,data:+XXSXUZdEKClV09Pfy/YWULlRl+5njMWcKOvPwuF6YUWHP2spLbJa8BnOimxxi6v7ioGMXEZW7XROVqqQiY4Aw==,iv:efkOBcrGeGJwT91SR+2wFI/fpnWASQeqjH3MJSIQBAA=,tag:KjJMfc7VgZkc8cy/IHrNNA==,type:str]
secret_xatu_sentry:
server_address: ENC[AES256_GCM,data:U3A2QJfVr5/cj7sMbf1C8ztynZc9MS5K9tstLiNYRzhGtC9ZU6npoGL/xsV8y5Z8yg+Z,iv:fuAuq7J/ksqoOiUKMmL96DB5Qbx6HJs4qHVYMoAziOE=,tag:LhQAkrXq9QsWrUneltJXig==,type:str]
user: ENC[AES256_GCM,data:6Rl/PXMHqw==,iv:gHXmk6tie0m6usKO6v9kwBI3BW0Kjj04wuMiijQYVbg=,tag:qjLt4uzXQ2s3j+xvEGlYFQ==,type:str]
password: ENC[AES256_GCM,data:Qs3nM2MRodo/iUNB+w6ezZo5jIBpWp/vjuZmzDly55IYMobc,iv:qdGn0xmCaDu8W+y2cOh4tDaXz9eifsMc186OqaPFcAk=,tag:kiSkV9uWDoAtzSSWkHiZ/g==,type:str]
tx_fuzz_blobs_privkey: ENC[AES256_GCM,data:XUiDF6puTOcP0veM5k2x9PmPSA2vP1FeoxSY7rn0bxLMB0b/DsB7y7bfsjBlgPIiL9f2AOSfsol8WWxd3zT6IA==,iv:qTk22/lpJyWFycayBupQp0sBaw2E2oq7peWypQh+0Ic=,tag:Eeqpv2JCfrsQd5ovOcpdVg==,type:str]
tx_fuzz_txs_privkey: ENC[AES256_GCM,data:c52KtPzcxyZPj3vQ6tx0Di5uLFy5JoRUSZ5ZH/WEj7nqC7JTwRw3+bNPk8Y43wjE7caqRZ7eq0la0Bc42ydpew==,iv:gHO+ttqzJCbRBCUvmlsTVNQK6vpnGXamIag63HS/fas=,tag:1Qultc6tndFGDuSKjm/TVg==,type:str]
goomy_private_key: ENC[AES256_GCM,data:+AwqAcOobrvR5gXxdABQki0rH41Ns8H3sJvVtQb5sh/596u1oDPq2bEh6Tpkfx8B+x4rSp+MRQi5wHwk9/Nqcw==,iv:Ibm4sLvU+tNk7EqaSPs/2CRLU1yLlNDgSWjR+uNPrvQ=,tag:oWbWW/jt9pPTWFcRoVTBsg==,type:str]
nethermind_seq_api_key: ENC[AES256_GCM,data:Zg0SODORD54P9n85F/2cp3MiQvQ=,iv:tNCA6W6hJm1PybTE2piAhfUjDKCqQWeN2FQfgiayJC0=,tag:Vo+R3gcYDAAGRPq3cMcvvA==,type:str]
nethermind_seq_server: ENC[AES256_GCM,data:H3G1mfT5Cr+lfG3bAfoeIf2y5yVakDDxHg==,iv:3uWO4N9Lga8eYz4DPaMnApdU4hm5gmTvmfo9wmK/1zI=,tag:RjnziVFH/GkWSY8jyJwzxw==,type:str]
nethermind_push_gateway: ENC[AES256_GCM,data:tT+zfsrU0XS4rluMi/fGpJtCmI8f/fHQ8dCI1oXefrlreelrAAMhsPSaiTPmtqRrJJRjOS1OvqxFiZHOUhUogB/Ux0AGjW4p2El7t5Z08//GvgawVv7+saxj2sCMlfwpeIUAri0jAFaXt8r/7DQfgSv+4w/SKLCChnl2t4JfJjP1iJYO5SSZnp6UsoItR1bJYA==,iv:J6T0wKwuJWr1SurTIOjrIxuKclHfhnEnOBbsVBdAkBk=,tag:grgfx8SGmzYBnazu+S8lrQ==,type:str]
secret_xatu_event_ingester_secret: ENC[AES256_GCM,data:/K0awTdZlYnjXZ9M4eUbTo22FyiWV9UqBFoza1y8M3qCAb0=,iv:KH9Qn32ASd9W0AfXFjGLi9gsyiZI4GSjfKEyMkwDqCU=,tag:9iYl53rRy92ait+BxEC3Fg==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age: []
lastmodified: "2024-10-04T08:58:21Z"
mac: ENC[AES256_GCM,data:fFCaY9Ezah3rt0c+f21qXgTiyOHgsGIlGisuIIfsh+oHoBmpS174on85TMHKb5pQ5MwB1s0gRhzMmMOcvBPkJeadVJuCu9NjG9s9TYNOftG3fWXbrLjZ3SufCAoygwM/cH2Ouo/1weepeuGhEQPXXcyVUGbC6NQbbh86Zzdw9P4=,iv:EymNOScJVxzVy+FafUA14iHgOwfog4O9AesBivGu/Iw=,tag:aLwKpZmeKOj9MCJN/Sww5A==,type:str]
pgp:
- created_at: "2023-09-28T11:48:21Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA32GcoRiZf6pAQ/+K0pHUTKocKocuNwu8d4rWDcVWqzYk2GaOynxQHmNlyhi
TWEb6YUuE6aLoXL8/Wwx0qtBTESS7g3UnjnukLukOW+GphZZuDVeEre1il03JaiD
rUpQFkBiWQZAZbzVHsg9OLQUhgrAN03WfCQW6eL/IP61q+S08OSHC4Yn39EJWSXp
QIAwRFBCROF21IYeMAOZVjnfVykVn3sybaUuYqaSP/LhKsc3q1lF3RFM7MP/zv8q
dSwOCsw+uprIUU8z1j4CJDjzitlKxfsAGHVCipG63WfuqhmtBoNMl2tCIMYcw668
fDoECYOs4jlNuMxa7bGoAHLXfezqS1siy3T/YHYic8maf8PkDEjUKWX2orR5LTWb
MetbUwaylRpJ9VWlBFaXa/nqMlair1SHz3XkARnnR6blVh1AlxIEYyXsCNk7x3cV
7wDRkyc/Vmf1MzoVDHSCwjgaAS/FpTbPM6iysG1bDUktUENwDoZ4eS4KQ6D3tvFh
huWCRnwCvNsLdvC/imlWxSYr3SF2WDGR+mEbmSJcxaKW/KkhP5EG3qGQa48txmH5
hi/AnYXKMgOyFOtjrDJJfCVW/bRd/GmO/6fbu2twpKlbx3k3Rrr5Jwa5hiYAMKr9
h0KUp6s6jF+hyNioXIdlPD+jXkf8QoO6zWpKoy4oItr5D4GDRTCebmfxkk60pCnS
UQHNPsBsQGPD6059xZQ05BvHk8OISNohfeYSgnRwFeC1PGO8jMj0FyBbfm2RkX1Q
zZ1X96Q4FI2bAb0aimqiZGHG8gq+DfhrrfaPSvSscfEyhg==
=5jV7
-----END PGP MESSAGE-----
fp: 80DB2B4EF6CA4D9829C280605636BC0E08138A24
- created_at: "2023-09-28T11:48:21Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMA87Wber4r4dGARAAo+HyY/BCDL7QhVgD+tfeMYikHg5n0zbqduXIGchgG+gk
o9UKK3O6F8V8mWoyf5Tat8cQOZpizTY2nGDRde/6CGLgOak1FRHDb8nhCuiiy6mC
ChuzerSmpYsx6UpqRhTS7IXtmdg0p3pe5o6JCZEUKrvP9ijWLQTUpy3K2u1H7qRp
SWmrvOiAQ5LjbYMl3lU71U0oykc3T/7q9fiZptZTFhzzDrBLnomp1ZdUmRzYtbhx
3Zk3QLhEJGRdQUwHEIDKGVT6AXS73R2xBZlp8elmwM8T5ze7GzOo16RRfw19sV/p
jmBZqhNZD7vb88jtoMa30FFj8kp5rMq1AvFeO+7PcnKvW6sMDX7iaaLPZ2Vzg3Tx
/AtqShFImJr9j0Oa3B2THfGk2hsSJLuwpWIuJhyADrgijxavS3I//K5taJXgNsTY
ER7junq3kZzfBIpWQB7e4DokvbE87pBF9cKdNRoPGr+iy1tvh9eex+eThuqCpuy0
Ot6HR+R3M0GAnqXZ+dihBMxFGpfadYX7dcNMXc0Uqpv/rgq+fUgz1i/JwjwuMoEW
kcnqjGDNsYGmG3/l0RfpmvkLFPt2Niji8DXl5Zt8ti8fW7HON6ddd57uYQ1o+O9m
yGetEZOF5obJeQPNWXXbYsmEZwN7EcRBMhivVamouLAe/HNYgJdQHOcCSW45ZDPS
UQHXFVtY2va6BfLgzZDKx6bGGUWAZZb54nB+5Rrx16tEFJekOHTmIBBxD0zWiMKJ
IRJh1DtPleiv7M87SBAWVBqLSY5ZBfiElQs9MiO7oIGkxw==
=6fxS
-----END PGP MESSAGE-----
fp: 69F66EEA7AE36CCB77DDB8CA1BC39532FB4A2DBD
- created_at: "2023-09-28T11:48:21Z"
enc: |
-----BEGIN PGP MESSAGE-----
hQIMA4hw3nPn82LyAQ//TAEBuAoCaspDCZMSloKrzEN64GIv2QJNy4PdTcx/3yZ9
JmYaxNG4Fu6f1xGrpwoUIOIJQ4Oi2osU3xP04d4gi7hEUPbEBH0V1QhHbB2ci8Ry
Ylf3sRDGGs8OZnDNHSRMc1UxYRqoK4nQEalYqTeiQGOvSBNMN9vJZHyAvx8hMHnM
Zn+OPuJ8rdsuXQ2AnAevz5pC0Qo143JDmdUl7rTenKT05yfEfF9aKSIrpjg24fgZ
nl1KMCZzudfp3wZvvR7HIy2LYG/dLd4SBvQVsLPpDRhPR2ieg520aiKTfWT1i5zR
fBPCzpgVzm9ex2QPBVpbt7XrCwmoU5ltWRg730gGxzIl8tWU7xR7CZtVtP4qMVuv
v6dFwIJeLLmPAKq0WOo2eNOmDdOIcX6WkTMocZh2q7N5VlAZZFj4/o0Pp/mhaG2m
DNtZuxLuNXhXdFvuP2bCwNID/4tEJya3jcQFIby+zaOGp/mfxUmuK83In9WzPTfU
rNlBe9i6g5nwfNmVyl7/ZclNpVFy/95KCjFv1ZqzE04DoYMyDLqSJ0IgjiGc1x40
X6Fm7uIVDNrNqZeOyda7CDxsiNjyFNwle8ChqEoohuK50wvZonL+5iJtYnEdfdZT
q8gMtiqAlYMoPu4USxtVS8tbzjJwSw536jSHcS+QWmi0h3htQB81X6Fmokyw8SbS
UQEci/lnKwM0fmilDWHn85sspZN9h47NFAJ7sgXiSrEUDxLUfj4mZpUWOn5U61eL
3pbepyoDhznykX+sQIeFvpSJ5AFjoBetSewP4OGgZ/YmZw==
=1Tcn
-----END PGP MESSAGE-----
fp: D1002590180DE371BCB455EAEFCD4ACD0B4D3F6E
- created_at: "2023-09-28T11:48:21Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcFMAw01qfIBwY0JARAAv2FxRfh+MMFJFdnTGWOS/i/SSOYqlw0Fcr72OYPHPRSQ
XXPkM065g117CT0aUhTwfs/DD8aukT4mwgxmXwM8/yI+hjZ0uT6Unmwr1PCo5JN1
tIvPDh9ZoVxi0Wq67cIu96eKzlOLU6bWfz2HayxiSNIAQjUvHNZe8GJ5WxXj7W57
Zx6YsDTm0Fsd3ndyhC61wGdqFleRAerturQAmgVdbJ9JeNpgSHQXUBtlZtLEHWRK
d3te8AbkkN3HOKJ4OKhQv2htmHM2L1tEM++l+1tr2r2ekGetzZvLm+5bksAwdwkS
GxCnyTU9sC2CLmdE2QTGrhlZd3YDZ/3WcDZhKn+xHsOBFp33Qy+yVSGUh/XDYUDJ
xR2HDfdrS1ehmiuQR56YpDM6VtlGAlFkw9sQst5v5j6U1dbnjgouX6WxhAzOoMYK
uR6x0KY4EEj0DugrSPMFTCSiwqONWVmh5UnW/R2tDfS7w+78NZmIlL2rEG47LDo7
+bbMHP1PDxoNsTq6kpl9vEY4tREkaXGZvTP4HXfd+01GZORQ7ybPqmEMC6AuetdC
NRUYoh1BDP6oTpZOS0qm5IihGJRIzSDl40zAVdDQXkDdgPoGov0XWJYTmXcNSCaj
sUdOHj8LZkVHCKG7jHKymR2uHkJ9DDNj07zdCEUwIPJq0IvazgdFebWcCky6MbDS
UQHyt+BqP1M8ICtXlaBrREkZPSzZvLTJLgqrs43EVOpNH1BP2U3X4T8LgdWVYHGy
oBCC3fzJ/F+gHQgUgZeb78FHBppXtZzWN91gQyGso0z0VA==
=l9+P
-----END PGP MESSAGE-----
fp: B9F81F327CF5346860E85269D7AF98F214C59E4E
- created_at: "2023-09-28T11:48:21Z"
enc: |-
-----BEGIN PGP MESSAGE-----
wcBMAwDFOgk9tOQ+AQgAq2I9Xdaf7oNR3GNtgnpBeLMlm9i6NKqmLWCWZpa6AK5Z
yGYFRAya9/FEzdA3IWTLPtK54PExD22Ltj36YgpXLTzAVex+eCtvIq0ADsLa9dwm
2wB6ZcNQFBP6XlovHO3dP1cAf1z0KMWhdZ3TaS+6Su775t74t+eqyAY80AO8HhFJ
+mx2ryYTau2eugQ97ijGFCrb4e+3C/uDjLkPSFN8EA021VcyPJQ+3wN517LcSw7k
OgQ6dGCq1eRcHjlu0SkiMBf1G7l5H3kzPQqX7Mbd45QUxnIUScS8UEO5p6XLm2jL
54AR2iw/ztVm1mQD4hKw6xC7zO5nbNpgvKvEqGLVQ9JRAabGwRVVuTGLyIV+BYc5
y/dFrT7+apeV9oTpjV2dxJ3ShxgO8QaEDrsFsoRmSjrTTa+3yY3q5rcJv97hTeXw
iuC1i7RZ8drFqIbzMVIVIz0E
=4RwK
-----END PGP MESSAGE-----
fp: 0600D41E1313E31016F7C55BF597BC0C5F22D1A2
- created_at: "2023-09-28T11:48:21Z"
enc: |
-----BEGIN PGP MESSAGE-----
hQIMAz4a8AV36xppAQ//T+sI4myUCRgzDzLGbILleBgOo5kxtWsqUvqyg4QZNsS4
+t6oJKgO/qOc8u/O+FzWsTRLzHYolsqgJx+wmwTQEQi6yvrikwxHG5GLBbsX5hn4
KohjQankBEN+GCmGH+R4fXnXUhERuobqByosbX2qZY16gaaToYbhFqBh1zBvFkCn
MSZBjvgVQmHEwYtR5/bbUg5UwlTnROcNhpQndkwPt3b7B5+N+H4Dw4aJUWs0SX/A
QGkeXmCNCWUQQ/wpK7doTQ2VcX6jRb9Ocrl+JFMRGWentgfF74l7Y98T9brv1r0k
m4+wstSPIJnNKSaBDKjmkVDb8GvsIs6M9+DCzJdgTNWAc1ww1WtLnK/7Mf2Um+jb
ntc2IMXFwy7sblopQzz3z5H+rbYVZGhA4oyOnBznyW1P3BzkWQ//DmgAAp3/QV1j
pCkqAa3dNOadErbn8fbmK5Z/fIh1KMS+DqjGqARkd5v/oLqzCxx2Hz7Mj1qAT9UX
6lhTpJtwXVYKvkjHwYIEOYWdYm4Ft/AqdNJ0S1s0nM1Iiz044HT2s3/pi3Kh0I58
RmL8M0P/4Mldn33jPyTqUNwuJVtdedEW1/MtiRuQrMMKMlj2wjws9mmrDHAu7ejC
ooIK+URuYAiA+tDcJjzOQsNpn4NN6CpUr62qeGCDh6JScIvLdCVHMZ3I+L6XY57S
XAECAgszZJCCewO77rvSwggDv7BsU9vt3SOmSKsju8qIuu2bzEapmsRsrkzzZBHJ
p2QAB/4TUXzujNighZ9KnRIjrewFTJyQG6JVG9a0Ig3uz5yxb5bdewbvzRYx
=ixtV
-----END PGP MESSAGE-----
fp: 29C50D01122FDE78E257482DAA497EB2610A8435
unencrypted_suffix: _unencrypted
version: 3.7.3
Loading

0 comments on commit e3ff31f

Please sign in to comment.