Replaces the placeholder MOTD with a usable one: a coloured header, five house rules, the NickServ/ChanServ/SASL commands people actually need, and a short "worth knowing" section. The retention line is generated rather than hard-coded, so it matches the deployment instead of drifting from it: HISTORY=off says messages are not stored, otherwise it names the real HISTORY_EXPIRE. Users are told plainly that channels are logged and for how long, which is the honest counterpart to enabling persistent history by default. Rendered and checked: valid UTF-8 (an invalid byte makes the whole config fail to load), ASCII-only for old clients, no stray $-escapes, only documented colour names, and 72 columns at the widest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1448 lines
93 KiB
Bash
1448 lines
93 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# deploy.sh -- deploy Ergo (IRC server) behind Caddy (Let's Encrypt) on Alpine,
|
|
# Debian or Alma. Single-node; runs as root.
|
|
#
|
|
# What this does:
|
|
# 1. Installs docker + compose (and openssl/jq/curl) if missing; creates the
|
|
# `ergo` system user the container runs as.
|
|
# 2. Lays down the stack in $STACK_DIR: docker-compose.yml, caddy/etc/Caddyfile,
|
|
# update.sh, ergoctl (+ /usr/local/bin/ergoctl wrapper), ergolib.sh.
|
|
# 3. Seeds .env on first run, pinning ERGO_TAG to the newest release.
|
|
# 4. Generates ircd/ircd.yaml ONCE from the pulled image's own default config
|
|
# (server name, network name, listeners, websocket origin, message-history
|
|
# backend, admin oper with a random password saved to secrets/admin.pass)
|
|
# and validates it with a throwaway `ergo run --smoke` before anything
|
|
# starts. Never rewritten.
|
|
# 5. Opens 80/443/6697 (+6667 with PLAINTEXT=1) on the host firewall. Both
|
|
# containers use host networking, so this firewall really applies.
|
|
# 6. Pulls images, validates the Caddyfile, brings the stack up, waits for
|
|
# health, copies Caddy's Let's Encrypt cert into ircd/ and rehashes Ergo.
|
|
# 7. Schedules update.sh: certsync every 15 min, update check daily.
|
|
#
|
|
# Idempotent: re-run to apply compose/Caddyfile changes or pull images. It never
|
|
# touches ircd/ircd.yaml, secrets/ or caddy/etc/conf.d/; in .env it only refreshes
|
|
# ERGO_UID/GID, re-pins a floating ERGO_TAG, and writes back settings you passed
|
|
# explicitly on this run (everything else is adopted FROM .env, not overwritten).
|
|
#
|
|
# Self-contained: docker-compose.yml, docker-compose.postgres.yml, Caddyfile,
|
|
# conf.d-readme.caddy, ergo.motd, .env.example, ergolib.sh, update.sh and ergoctl
|
|
# are embedded as a base64 tar.gz at the bottom of this file. Rebuild with
|
|
# build.sh after editing them.
|
|
#
|
|
# Usage:
|
|
# bash deploy.sh # interactive prompts
|
|
# ERGO_DOMAIN=irc.example.com ACME_EMAIL=me@x.com NETWORK_NAME=MyNet \
|
|
# SKIP_PROMPTS=1 bash deploy.sh # non-interactive
|
|
# HISTORY=postgres bash deploy.sh # FIRST deploy only: persistent history in
|
|
# # PostgreSQL (default sqlite; off = RAM only)
|
|
# HISTORY_EXPIRE=90d bash deploy.sh # how long messages are kept (default 30d)
|
|
# PLAINTEXT=1 bash deploy.sh # FIRST deploy only: also serve plaintext
|
|
# # :6667 publicly (+STS). Fixed thereafter.
|
|
# ERGO_TAG=v2.19.1 bash deploy.sh # pin a release on the FIRST deploy; after
|
|
# # that use: ergoctl update update
|
|
# UPDATE_POLICY=security bash deploy.sh # also latest | off
|
|
# ERGO_AUTOUPDATE=0 bash deploy.sh # install update.sh but don't schedule the
|
|
# # daily update (certsync is still scheduled)
|
|
# CERT_WAIT=0 bash deploy.sh # don't wait for the first LE cert
|
|
# SKIP_DOCKER_INSTALL=1 bash deploy.sh
|
|
|
|
set -euo pipefail
|
|
|
|
: "${STACK_DIR:=/srv/ergo}"
|
|
: "${SKIP_DOCKER_INSTALL:=0}"
|
|
: "${FORCE:=0}"
|
|
: "${SKIP_PROMPTS:=0}"
|
|
[[ "$SKIP_PROMPTS" == "1" ]] && FORCE=1
|
|
: "${ERGO_DOMAIN:=}"
|
|
: "${ACME_EMAIL:=}"
|
|
: "${NETWORK_NAME:=}"
|
|
: "${ERGO_IMAGE:=ghcr.io/ergochat/ergo}"
|
|
: "${ERGO_TAG:=}" # blank = pin the newest release
|
|
# Remember which settings the caller actually passed, BEFORE the defaults below
|
|
# hide that. On a re-run the rest come from the existing .env instead, so a
|
|
# plain `bash deploy.sh` never silently reverts a deployed stack's settings.
|
|
# (`|| true` on the trailing `&&`s below: a false test makes the whole list
|
|
# return 1, which aborts the script under `set -e` if it ever ends a block.)
|
|
EXPLICIT=""
|
|
for _k in ERGO_TAG PLAINTEXT HISTORY UPDATE_POLICY FORCE_UPDATE UPDATE_GRACE CADDY_AUTOUPDATE CADDY_TAG; do
|
|
[[ -n "${!_k:-}" ]] && EXPLICIT="${EXPLICIT} ${_k}" || true
|
|
done
|
|
: "${PLAINTEXT:=0}"
|
|
: "${HISTORY:=sqlite}" # sqlite | postgres | off (see the README)
|
|
# How long messages are kept. Upstream's 1w applies to PERSISTENT storage too --
|
|
# it deletes, it is not just a query cutoff -- so persistence with the shipped
|
|
# default buys only a week. Retention is a policy (and privacy) decision: raise
|
|
# or lower it here, or later with 'ergoctl edit'.
|
|
: "${HISTORY_EXPIRE:=30d}"
|
|
: "${POSTGRES_TAG:=17-alpine}" # major version is PINNED; update.sh never moves it
|
|
: "${POSTGRES_USER:=ergo}"
|
|
: "${POSTGRES_DB:=ergo_history}"
|
|
: "${POSTGRES_PORT:=5432}"
|
|
: "${UPDATE_POLICY:=latest}"
|
|
: "${FORCE_UPDATE:=0}"
|
|
: "${UPDATE_GRACE:=60}"
|
|
: "${CADDY_AUTOUPDATE:=0}"
|
|
: "${CADDY_TAG:=2-alpine}"
|
|
: "${ERGO_AUTOUPDATE:=1}" # 0 = install update.sh but don't schedule the daily update
|
|
: "${CERT_WAIT:=180}" # seconds to wait for Caddy's first Let's Encrypt cert
|
|
|
|
log() { printf '\033[1;32m[+]\033[0m %s\n' "$*"; }
|
|
warn() { printf '\033[1;33m[!]\033[0m %s\n' "$*" >&2; }
|
|
die() { printf '\033[1;31m[x]\033[0m %s\n' "$*" >&2; exit 1; }
|
|
|
|
[[ $EUID -eq 0 ]] || die "Run as root."
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Extract the embedded archive; ergolib.sh (shared helpers) comes from it.
|
|
# ---------------------------------------------------------------------------
|
|
SCRIPT_DIR=$(mktemp -d -t ergo-deploy.XXXXXX)
|
|
trap 'rm -rf "$SCRIPT_DIR"' EXIT
|
|
|
|
extract_archive() {
|
|
grep -a -A 9999999 '^__ARCHIVE_BELOW__$' "$0" \
|
|
| tail -n +2 \
|
|
| base64 -d \
|
|
| tar -xz -C "$SCRIPT_DIR"
|
|
}
|
|
|
|
if grep -q -a '^__ARCHIVE_BELOW__$' "$0"; then
|
|
log "Extracting embedded deployment files..."
|
|
extract_archive
|
|
else
|
|
die "No embedded archive found. Run build.sh to embed deployment files."
|
|
fi
|
|
|
|
EMBEDDED=(docker-compose.yml docker-compose.postgres.yml Caddyfile conf.d-readme.caddy ergo.motd .env.example ergolib.sh update.sh ergoctl)
|
|
for f in "${EMBEDDED[@]}"; do
|
|
[[ -f "$SCRIPT_DIR/$f" ]] || die "Embedded archive missing $f"
|
|
done
|
|
|
|
# shellcheck source=ergolib.sh
|
|
. "$SCRIPT_DIR/ergolib.sh"
|
|
ergo_set_paths
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Host packages + Docker (deploy-only helpers; ergolib has the rest)
|
|
# ---------------------------------------------------------------------------
|
|
pkg_install() { # best-effort install across the three families
|
|
case "$(osfam)" in
|
|
alpine) apk add -q "$@" || true ;;
|
|
debian) DEBIAN_FRONTEND=noninteractive apt-get install -y -qq "$@" || true ;;
|
|
rhel) dnf install -y -q "$@" || true ;;
|
|
esac
|
|
}
|
|
|
|
install_docker() {
|
|
if command -v docker >/dev/null 2>&1; then
|
|
log "Docker already installed: $(docker --version)"
|
|
else
|
|
log "Installing Docker (OS: $(osfam))..."
|
|
case "$(osfam)" in
|
|
alpine) apk add -q docker docker-cli-compose openrc ;;
|
|
debian|rhel) command -v curl >/dev/null 2>&1 || pkg_install curl
|
|
curl -fsSL https://get.docker.com | sh ;;
|
|
*) die "Unsupported OS for auto Docker install. Set SKIP_DOCKER_INSTALL=1 and install Docker yourself." ;;
|
|
esac
|
|
fi
|
|
if command -v rc-update >/dev/null 2>&1; then
|
|
rc-update add docker default >/dev/null 2>&1 || true
|
|
rc-service docker status >/dev/null 2>&1 || rc-service docker start
|
|
elif command -v systemctl >/dev/null 2>&1; then
|
|
systemctl enable --now docker >/dev/null 2>&1 || systemctl start docker || true
|
|
fi
|
|
# dockerd may return before its socket listens (esp. OpenRC); don't race it.
|
|
local i
|
|
for i in $(seq 1 30); do
|
|
docker info >/dev/null 2>&1 && return
|
|
sleep 1
|
|
done
|
|
warn "Docker daemon not ready after 30s; continuing (compose may fail -- check 'docker info')."
|
|
}
|
|
|
|
# The container runs as this host user (no login, no home). It owns ./ircd so
|
|
# the DB, config and the copied TLS key are never readable by other local users.
|
|
ensure_ergo_user() {
|
|
if ! getent passwd ergo >/dev/null 2>&1; then
|
|
log "Creating system user 'ergo' (owns $IRCD_DIR; the container runs as it)..."
|
|
case "$(osfam)" in
|
|
alpine) getent group ergo >/dev/null 2>&1 || addgroup -S ergo
|
|
adduser -S -D -H -G ergo -s /sbin/nologin -g "Ergo IRC server" ergo ;;
|
|
*) useradd -r -M -s /usr/sbin/nologin -d /nonexistent -c "Ergo IRC server" ergo 2>/dev/null \
|
|
|| useradd -r -M -s /sbin/nologin -c "Ergo IRC server" ergo ;;
|
|
esac
|
|
fi
|
|
ERGO_UID="$(id -u ergo)"; ERGO_GID="$(id -g ergo)"
|
|
}
|
|
|
|
open_ports() {
|
|
# Host networking: these ports are bound on the host itself, so the INPUT
|
|
# firewall genuinely governs them (unlike Docker-published ports).
|
|
local ports=(80/tcp 443/tcp 6697/tcp)
|
|
[[ "$PLAINTEXT" == "1" ]] && ports+=(6667/tcp)
|
|
# ufw and firewalld are additive: unlike the repo's declarative ports.d
|
|
# engine they never drop a port that left the list, so turning PLAINTEXT
|
|
# back off would leave 6667 open. Revoke it explicitly.
|
|
if [[ "$PLAINTEXT" != "1" ]]; then
|
|
if command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q '^Status: active'; then
|
|
ufw status 2>/dev/null | grep -q '^6667/tcp' && { log "Closing 6667/tcp in ufw (PLAINTEXT=0)..."; ufw delete allow 6667/tcp >/dev/null 2>&1 || true; }
|
|
elif command -v firewall-cmd >/dev/null 2>&1 && firewall-cmd --state >/dev/null 2>&1; then
|
|
if firewall-cmd --query-port=6667/tcp --permanent >/dev/null 2>&1; then
|
|
log "Closing 6667/tcp in firewalld (PLAINTEXT=0)..."
|
|
firewall-cmd -q --remove-port=6667/tcp --permanent || true; firewall-cmd -q --reload || true
|
|
fi
|
|
fi
|
|
fi
|
|
if [[ -d /etc/firewall/ports.d && -x /usr/local/sbin/firewall-apply ]]; then
|
|
log "Registering ${ports[*]} with the host firewall..."
|
|
printf '%s\n' "${ports[@]}" > /etc/firewall/ports.d/ergo.rule
|
|
/usr/local/sbin/firewall-apply
|
|
elif command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q '^Status: active'; then
|
|
log "ufw active -- allowing ${ports[*]}..."
|
|
local p; for p in "${ports[@]}"; do ufw allow "$p" >/dev/null; done
|
|
elif command -v firewall-cmd >/dev/null 2>&1 && firewall-cmd --state >/dev/null 2>&1; then
|
|
log "firewalld active -- allowing ${ports[*]}..."
|
|
local p; for p in "${ports[@]}"; do firewall-cmd -q --add-port="$p" --permanent; done
|
|
firewall-cmd -q --reload
|
|
else
|
|
warn "No managed host firewall found; make sure ${ports[*]} are reachable (and nothing else is)."
|
|
fi
|
|
}
|
|
|
|
# Anything already listening on our host ports (only checked while our own
|
|
# containers are not running -- on re-runs they hold the ports themselves).
|
|
check_ports_free() {
|
|
local listing p busy=""
|
|
listing="$(netstat -ltn 2>/dev/null || ss -ltn 2>/dev/null || true)"
|
|
[[ -n "$listing" ]] || return 0
|
|
for p in 80 443 6697 8097 6667; do
|
|
if printf '%s\n' "$listing" | grep -qE "[:.]${p}[[:space:]]"; then busy="${busy} ${p}"; fi
|
|
done
|
|
[[ -z "$busy" ]] || die "Ports already in use on this host:${busy}. Both containers use host networking, so this stack needs 80/443 (Caddy), 6697/6667/8097 (Ergo) to itself. Another Caddy stack on this box? Move it or this."
|
|
}
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Prompt for required vars, then normalise + validate them
|
|
# ---------------------------------------------------------------------------
|
|
prompt() { # <VAR> <message> [default]
|
|
local varname="$1" message="$2" def="${3:-}"
|
|
local -n ref="$varname"
|
|
if [[ -z "${ref:-}" ]]; then
|
|
if [[ "$SKIP_PROMPTS" == "1" ]]; then
|
|
[[ -n "$def" ]] && { ref="$def"; return 0; }
|
|
die "$varname required (set it in the environment; running with SKIP_PROMPTS=1)."
|
|
fi
|
|
if [[ -n "$def" ]]; then read -r -p "$message [$def]: " ref; ref="${ref:-$def}"
|
|
else read -r -p "$message: " ref; fi
|
|
[[ -n "$ref" ]] || die "$varname required."
|
|
fi
|
|
}
|
|
|
|
prompt ERGO_DOMAIN "Public hostname of the IRC server (e.g. irc.example.com)"
|
|
ERGO_DOMAIN="$(printf '%s' "$ERGO_DOMAIN" | tr 'A-Z' 'a-z' | sed -E 's#^https?://##; s#[/.]+$##')"
|
|
[[ "$ERGO_DOMAIN" =~ ^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,}$ ]] \
|
|
|| die "ERGO_DOMAIN '$ERGO_DOMAIN' is not a valid hostname."
|
|
# On a re-run these must default to what is DEPLOYED, not to a fresh guess:
|
|
# otherwise pressing Enter through the prompts silently renames the network to the
|
|
# hostname in the summary while .env keeps the real one. Test for emptiness --
|
|
# env_get succeeds even when the key is absent.
|
|
_ae_default="$(env_get ACME_EMAIL)"
|
|
_nn_default="$(env_get NETWORK_NAME)"
|
|
[[ -n "$_nn_default" ]] || _nn_default="$ERGO_DOMAIN"
|
|
prompt ACME_EMAIL "Let's Encrypt email" "$_ae_default"
|
|
prompt NETWORK_NAME "IRC network name (no spaces)" "$_nn_default"
|
|
[[ "$NETWORK_NAME" =~ ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$ ]] \
|
|
|| die "NETWORK_NAME '$NETWORK_NAME' must be 1-64 chars of letters, digits, . _ - (no spaces: it is sent as an IRC parameter)."
|
|
[[ "$PLAINTEXT" == "0" || "$PLAINTEXT" == "1" ]] || die "PLAINTEXT must be 0 or 1."
|
|
case "$UPDATE_POLICY" in latest|security|off) ;; *) die "UPDATE_POLICY must be latest, security or off." ;; esac
|
|
case "$HISTORY" in sqlite|postgres|off) ;; *) die "HISTORY must be sqlite, postgres or off." ;; esac
|
|
|
|
# Re-run guard: server.name is immutable once Ergo has run with it, and the
|
|
# cert/websocket origin/Caddy site all derive from ERGO_DOMAIN.
|
|
if [[ -f "$IRCD_DIR/ircd.yaml" ]]; then
|
|
existing="$(yaml_server_name "$IRCD_DIR/ircd.yaml" || true)"
|
|
if [[ -n "$existing" && "$existing" != "$ERGO_DOMAIN" ]]; then
|
|
die "This stack is already deployed as '$existing' (ircd/ircd.yaml server.name) but ERGO_DOMAIN=$ERGO_DOMAIN. Ergo cannot rename a running server; re-run with ERGO_DOMAIN=$existing, or stop the stack, move $STACK_DIR away and deploy fresh."
|
|
fi
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Re-run: adopt the deployed settings from .env
|
|
#
|
|
# Everything below (the firewall rule, the scheduled jobs, the summary) must
|
|
# describe the stack as deployed, not this shell's defaults. A setting the
|
|
# caller passed explicitly wins and is written back; PLAINTEXT is the exception,
|
|
# because the listener it selects lives in ircd.yaml, which is never rewritten.
|
|
# ---------------------------------------------------------------------------
|
|
if [[ -f "$ENV_FILE" ]]; then
|
|
for _k in PLAINTEXT HISTORY UPDATE_POLICY FORCE_UPDATE UPDATE_GRACE CADDY_AUTOUPDATE CADDY_TAG POSTGRES_TAG POSTGRES_USER POSTGRES_DB POSTGRES_PORT; do
|
|
_v="$(env_get "$_k")"
|
|
[[ -n "$_v" ]] || continue
|
|
if [[ " $EXPLICIT " == *" $_k "* ]]; then
|
|
[[ "${!_k}" == "$_v" ]] && continue
|
|
if [[ "$_k" == "HISTORY" ]]; then
|
|
die "This stack was deployed with HISTORY=${_v} and you passed HISTORY=${!_k}. The backend is recorded in ircd/ircd.yaml, which deploy.sh never rewrites, so re-running cannot switch it (and switching does not migrate existing messages). To change it: 'ergoctl history ${!_k}'."
|
|
fi
|
|
if [[ "$_k" == "PLAINTEXT" ]]; then
|
|
die "This stack was deployed with PLAINTEXT=${_v} and you passed PLAINTEXT=${!_k}. The listener is fixed in ircd/ircd.yaml, which deploy.sh never rewrites, so re-running cannot change it. To switch: edit the plaintext listener with 'ergoctl edit' ($( [[ "$_v" == 1 ]] && echo '":6667": -> "127.0.0.1:6667":' || echo '"127.0.0.1:6667": -> ":6667":' ) and server.sts.enabled), set PLAINTEXT=${!_k} in $ENV_FILE, run 'ergoctl restart', then re-run this script to fix the firewall."
|
|
fi
|
|
log "${_k}: ${_v} -> ${!_k} (updating $ENV_FILE)."
|
|
else
|
|
printf -v "$_k" '%s' "$_v"
|
|
fi
|
|
done
|
|
[[ "$PLAINTEXT" == "0" || "$PLAINTEXT" == "1" ]] || die "PLAINTEXT in $ENV_FILE must be 0 or 1 (found '$PLAINTEXT')."
|
|
case "$UPDATE_POLICY" in latest|security|off) ;; *) die "UPDATE_POLICY in $ENV_FILE must be latest, security or off (found '$UPDATE_POLICY')." ;; esac
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Host prerequisites
|
|
# ---------------------------------------------------------------------------
|
|
[[ "$SKIP_DOCKER_INSTALL" == "1" ]] || install_docker
|
|
for tool in openssl jq curl; do
|
|
command -v "$tool" >/dev/null 2>&1 || { log "Installing $tool..."; pkg_install "$tool"; }
|
|
command -v "$tool" >/dev/null 2>&1 || die "$tool is required (certsync/updater); install it and re-run."
|
|
done
|
|
command -v docker >/dev/null 2>&1 || die "docker not found."
|
|
docker compose version >/dev/null 2>&1 || die "docker compose (v2 plugin) not found."
|
|
ensure_ergo_user
|
|
|
|
# Other host-network containers share Ergo's trust boundary (its loopback).
|
|
docker info >/dev/null 2>&1 || die "The Docker daemon is not running or not reachable (check 'docker info'). Start it and re-run."
|
|
others="$(docker ps -q 2>/dev/null | xargs -r docker inspect -f '{{.Name}} {{.HostConfig.NetworkMode}}' 2>/dev/null \
|
|
| awk '$2=="host" && $1!="/ergo" && $1!="/ergo-caddy" {print $1}' | tr '\n' ' ' || true)"
|
|
[[ -z "$others" ]] || warn "Other containers use host networking: ${others}-- they can reach Ergo's loopback listeners (see README: Security model)."
|
|
|
|
if [[ -z "$(dc ps -q 2>/dev/null || true)" ]]; then check_ports_free; fi
|
|
open_ports
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Stack directory + files
|
|
# ---------------------------------------------------------------------------
|
|
log "Setting up $STACK_DIR..."
|
|
install -d -m 0700 "$STACK_DIR" "$SECRETS_DIR" "$BACKUP_DIR" "$TEMPLATES_DIR" "$STATE_DIR"
|
|
install -d -m 0700 "$CADDY_DIR" "$CADDY_DIR/data" "$CADDY_DIR/config"
|
|
install -d -m 0755 "$CADDY_DIR/etc" "$CADDY_DIR/etc/conf.d"
|
|
install -m 0640 "$SCRIPT_DIR/docker-compose.yml" "$STACK_DIR/docker-compose.yml"
|
|
install -m 0640 "$SCRIPT_DIR/docker-compose.postgres.yml" "$STACK_DIR/docker-compose.postgres.yml"
|
|
# Caddy has no admin API here and bind-mounted file contents are not part of the
|
|
# compose config hash, so `up -d` alone would leave a changed Caddyfile unloaded.
|
|
# Only an ACTUAL change counts: on a first deploy the destination does not exist
|
|
# yet, and restarting Caddy seconds after it started would interrupt the very
|
|
# first ACME issuance for nothing.
|
|
CADDY_CHANGED=0
|
|
if [[ -f "$CADDY_DIR/etc/Caddyfile" ]] && ! cmp -s "$SCRIPT_DIR/Caddyfile" "$CADDY_DIR/etc/Caddyfile"; then
|
|
CADDY_CHANGED=1
|
|
fi
|
|
install -m 0644 "$SCRIPT_DIR/Caddyfile" "$CADDY_DIR/etc/Caddyfile"
|
|
[[ -e "$CADDY_DIR/etc/conf.d/00-readme.caddy" ]] || install -m 0644 "$SCRIPT_DIR/conf.d-readme.caddy" "$CADDY_DIR/etc/conf.d/00-readme.caddy"
|
|
install -m 0644 "$SCRIPT_DIR/ergolib.sh" "$STACK_DIR/ergolib.sh"
|
|
install -m 0750 "$SCRIPT_DIR/update.sh" "$STACK_DIR/update.sh"
|
|
install -m 0750 "$SCRIPT_DIR/ergoctl" "$STACK_DIR/ergoctl"
|
|
install -d -m 0755 /usr/local/bin
|
|
cat > /usr/local/bin/ergoctl <<EOF
|
|
#!/bin/sh
|
|
# Auto-generated by the Ergo deploy.sh -- runs the stack's admin CLI from anywhere.
|
|
exec bash "$STACK_DIR/ergoctl" "\$@"
|
|
EOF
|
|
chmod 0755 /usr/local/bin/ergoctl
|
|
install -d -m 0700 -o "$ERGO_UID" -g "$ERGO_GID" "$IRCD_DIR"
|
|
|
|
# Pin ERGO_TAG to the newest release so the running version is explicit.
|
|
if [[ -z "$ERGO_TAG" && -f "$ENV_FILE" ]]; then ERGO_TAG="$(env_get ERGO_TAG)"; fi
|
|
if [[ -z "$ERGO_TAG" || "$ERGO_TAG" == "latest" || "$ERGO_TAG" == "stable" ]]; then
|
|
if _t="$(ergo_latest_tag)"; then ERGO_TAG="$_t"; log "Pinned ERGO_TAG=${ERGO_TAG} (newest release)."
|
|
else warn "Could not resolve the newest release from GitHub; using tag 'stable' for now (update.sh will pin it)."; ERGO_TAG="stable"; fi
|
|
fi
|
|
[[ "$ERGO_TAG" == "stable" || "$ERGO_TAG" == v* ]] || ERGO_TAG="v${ERGO_TAG}" # ghcr tags carry the v
|
|
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
|
log "Seeding $ENV_FILE..."
|
|
install -m 0600 "$SCRIPT_DIR/.env.example" "$ENV_FILE"
|
|
env_set ERGO_DOMAIN "$ERGO_DOMAIN"
|
|
env_set ACME_EMAIL "$ACME_EMAIL"
|
|
env_set NETWORK_NAME "$NETWORK_NAME"
|
|
env_set ERGO_IMAGE "$ERGO_IMAGE"
|
|
env_set ERGO_TAG "$ERGO_TAG"
|
|
env_set PLAINTEXT "$PLAINTEXT"
|
|
env_set HISTORY "$HISTORY"
|
|
env_set UPDATE_POLICY "$UPDATE_POLICY"
|
|
env_set FORCE_UPDATE "$FORCE_UPDATE"
|
|
env_set UPDATE_GRACE "$UPDATE_GRACE"
|
|
env_set CADDY_AUTOUPDATE "$CADDY_AUTOUPDATE"
|
|
env_set CADDY_TAG "$CADDY_TAG"
|
|
else
|
|
log ".env exists; keeping its settings (ERGO_TAG=$(env_get ERGO_TAG))."
|
|
[[ "$(ergo_domain)" == "$ERGO_DOMAIN" ]] || die ".env has ERGO_DOMAIN=$(env_get ERGO_DOMAIN) but you passed $ERGO_DOMAIN -- the domain cannot change after the first deploy."
|
|
# Persist the settings the caller passed explicitly on this re-run.
|
|
for _k in PLAINTEXT UPDATE_POLICY FORCE_UPDATE UPDATE_GRACE CADDY_AUTOUPDATE CADDY_TAG; do
|
|
[[ " $EXPLICIT " == *" $_k "* ]] && env_set "$_k" "${!_k}" || true
|
|
done
|
|
# A floating tag ('stable', from a first deploy that could not reach GitHub)
|
|
# would let any pull change the running version with no pre-flight, snapshot
|
|
# or rollback. Pin it as soon as we can resolve a real release.
|
|
_envtag="$(env_get ERGO_TAG)"
|
|
if [[ "$ERGO_TAG" == v[0-9]* && "$ERGO_TAG" != "$_envtag" ]]; then
|
|
case "$_envtag" in
|
|
# Changing the version of a DEPLOYED stack here would swap the image
|
|
# with none of the updater's rails: no pre-flight against the live
|
|
# config, no database snapshot, no warning to connected users and no
|
|
# rollback if the new build never becomes healthy. Send them there.
|
|
v[0-9]*) die "This stack is pinned to ${_envtag} and you passed ERGO_TAG=${ERGO_TAG}. Re-running deploy.sh would swap the image with no pre-flight, no database snapshot and no rollback. Use: TARGET_VERSION=$(normver "$ERGO_TAG") ergoctl update update" ;;
|
|
*) env_set ERGO_TAG "$ERGO_TAG"; log "Pinned ERGO_TAG=${ERGO_TAG} (was '${_envtag}', which floats)." ;;
|
|
esac
|
|
fi
|
|
fi
|
|
env_set ERGO_UID "$ERGO_UID"
|
|
env_set ERGO_GID "$ERGO_GID"
|
|
ERGO_TAG="$(ergo_tag)"
|
|
IMAGE="$(ergo_image)"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Persistent history backend
|
|
#
|
|
# Ergo's history is ON by default but lives in RAM, so it is lost on every
|
|
# restart -- including the ones this stack's updater performs. sqlite persists
|
|
# it in a file beside ircd.db with no extra moving parts; postgres adds a
|
|
# pinned container for people who want a real database.
|
|
# ---------------------------------------------------------------------------
|
|
if [[ "$HISTORY" != "off" ]]; then
|
|
# Both SQL history backends were added in Ergo 2.18.0.
|
|
_v="$(normver "$ERGO_TAG")"
|
|
if [[ -n "$_v" ]] && ! ver_ge "$_v" 2.18.0; then
|
|
die "HISTORY=$HISTORY needs Ergo 2.18.0 or newer (the SQL history backends were added there), but ERGO_TAG=$ERGO_TAG. Use HISTORY=off or a newer release."
|
|
fi
|
|
fi
|
|
if [[ "$HISTORY" == "postgres" ]]; then
|
|
env_set POSTGRES_TAG "$POSTGRES_TAG"
|
|
env_set POSTGRES_USER "$POSTGRES_USER"
|
|
env_set POSTGRES_DB "$POSTGRES_DB"
|
|
env_set POSTGRES_PORT "$POSTGRES_PORT"
|
|
# docker compose reads COMPOSE_FILE from .env, so every compose command in
|
|
# this stack picks up the overlay without needing extra flags.
|
|
env_set COMPOSE_FILE "docker-compose.yml:docker-compose.postgres.yml"
|
|
if [[ ! -f "$SECRETS_DIR/postgres.pass" ]]; then
|
|
log "Generating the PostgreSQL password (secrets/postgres.pass)..."
|
|
( umask 077; ergo_random_password 32 > "$SECRETS_DIR/postgres.pass" )
|
|
fi
|
|
chmod 0600 "$SECRETS_DIR/postgres.pass"
|
|
PG_PASS="$(cat "$SECRETS_DIR/postgres.pass")"
|
|
else
|
|
env_set COMPOSE_FILE "docker-compose.yml"
|
|
fi
|
|
|
|
missing=()
|
|
for var in ERGO_DOMAIN ACME_EMAIL NETWORK_NAME ERGO_TAG ERGO_UID ERGO_GID; do
|
|
grep -E "^${var}=.+$" "$ENV_FILE" >/dev/null || missing+=("$var")
|
|
done
|
|
(( ${#missing[@]} == 0 )) || die "Missing values in $ENV_FILE: ${missing[*]}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Pull images, validate the Caddyfile (static config -- no admin API needed)
|
|
# ---------------------------------------------------------------------------
|
|
cd "$STACK_DIR"
|
|
# Pull per service. ERGO_TAG is an immutable vX.Y.Z, so pulling it is a no-op
|
|
# after the first time. caddy's tag FLOATS, and a bare `docker compose pull`
|
|
# would adopt a newer Caddy on every re-run and let `up -d` recreate it --
|
|
# silently doing what CADDY_AUTOUPDATE=0 promises not to, with none of
|
|
# update.sh's health check or rollback. Only pull it when it is missing, or when
|
|
# the operator opted in.
|
|
log "Pulling $IMAGE..."
|
|
docker compose pull ergo
|
|
_caddy_tag="$(env_get CADDY_TAG)"; _caddy_tag="${_caddy_tag:-2-alpine}"
|
|
if [[ "$CADDY_AUTOUPDATE" == "1" ]] || ! docker image inspect "caddy:${_caddy_tag}" >/dev/null 2>&1; then
|
|
log "Pulling caddy:${_caddy_tag}..."
|
|
docker compose pull caddy
|
|
else
|
|
log "Keeping the local caddy:${_caddy_tag} (CADDY_AUTOUPDATE=0; update it with 'ergoctl update caddy')."
|
|
fi
|
|
if [[ "$HISTORY" == "postgres" ]]; then docker compose pull postgres; fi
|
|
log "Validating the Caddyfile..."
|
|
# A one-off `compose run` container gets a generated name (compose drops the
|
|
# service's container_name for these), so this is safe while ergo-caddy runs.
|
|
docker compose run --rm --no-deps -T caddy \
|
|
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile >/dev/null \
|
|
|| die "Caddyfile validation failed. Check $CADDY_DIR/etc/Caddyfile and conf.d/*.caddy."
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# First run: generate ircd.yaml from the image's own default config
|
|
# ---------------------------------------------------------------------------
|
|
render_ircd_yaml() { # <template> <dest>
|
|
local plain_listener sts_note netname="" listeners ws
|
|
# Cloaked hostnames end in this fake TLD (default "irc"). Use the network's
|
|
# first label when it is hostname-shaped; changing it later re-cloaks everyone.
|
|
netname="$(printf '%s' "$NETWORK_NAME" | tr 'A-Z' 'a-z' | cut -d. -f1)"
|
|
[[ "$netname" =~ ^[a-z0-9]([a-z0-9-]{0,30}[a-z0-9])?$ ]] || netname=""
|
|
if [[ "$PLAINTEXT" == "1" ]]; then
|
|
plain_listener=' # PLAINTEXT=1: plaintext IRC on ALL interfaces. STS is advertised (server.sts)
|
|
# so capable clients pin TLS after first contact. Anything sent here crosses
|
|
# the internet unencrypted. Loopback probes (ergoctl, healthcheck) use it too.
|
|
":6667":'
|
|
else
|
|
plain_listener=' # Loopback plaintext: the compose healthcheck and `ergoctl` use it (loopback is
|
|
# exempt from ip-limits/bans and treated as secure). To serve plaintext publicly
|
|
# instead (not recommended): change this to ":6667", enable server.sts above, set
|
|
# PLAINTEXT=1 in ../.env, `ergoctl restart`, then re-run deploy.sh for the firewall.
|
|
"127.0.0.1:6667":'
|
|
fi
|
|
listeners=" listeners:
|
|
${plain_listener}
|
|
|
|
# Public TLS port. fullchain.pem/privkey.pem are Caddy's Let's Encrypt cert,
|
|
# kept current by 'update.sh certsync' (self-signed from mkcerts until the
|
|
# first sync). Rehash (SIGHUP) reloads them without dropping anyone.
|
|
\":6697\":
|
|
tls:
|
|
cert: fullchain.pem
|
|
key: privkey.pem
|
|
proxy: false
|
|
min-tls-version: 1.2
|
|
|
|
# IRC over WebSocket for browser clients; TLS is terminated by Caddy on :443
|
|
# (wss://${ERGO_DOMAIN}/webirc), which proxies here over loopback with
|
|
# X-Forwarded-For -- trusted because 127.0.0.1 is in proxy-allowed-from.
|
|
\"127.0.0.1:8097\":
|
|
websocket: true
|
|
|
|
"
|
|
ws=" websockets:
|
|
# Only pages served from these origins may open a websocket (anchored,
|
|
# case-sensitive globs). Add the origin of any web client you host elsewhere.
|
|
# Non-browser clients should use :6697 directly.
|
|
allowed-origins:
|
|
- \"https://${ERGO_DOMAIN}\"
|
|
|
|
"
|
|
MARKER="# Generated by deployments/ergo/deploy.sh on $(date -u +%FT%TZ) from the ${IMAGE} default config.
|
|
# Edit freely; apply with 'ergoctl rehash' (or 'ergoctl edit', which validates first).
|
|
# server.name, datastore.path, casemapping and enforce-utf8 need 'ergoctl restart'.
|
|
# The pristine template is kept in ../templates/ for diffing after upgrades." \
|
|
DOMAIN="$ERGO_DOMAIN" NETWORK_NAME="$NETWORK_NAME" HASH="$ADMIN_HASH" PLAINTEXT="$PLAINTEXT" \
|
|
NETNAME="$netname" LISTENERS_BLOCK="$listeners" WS_BLOCK="$ws" \
|
|
awk '
|
|
BEGIN { print ENVIRON["MARKER"]; top=""; sub4=""; oper=""; skip=0 }
|
|
{
|
|
line=$0
|
|
# while replacing a 4-space block, drop its children (8+ spaces) and blanks
|
|
if (skip) { if (line ~ /^ / || line ~ /^[ \t]*$/) next; skip=0 }
|
|
if (line ~ /^[a-z][a-z-]*:/) { top=line; sub(/:.*/,"",top); sub4=""; oper="" }
|
|
if (top=="server") {
|
|
if (line ~ /^ [a-z"-]/) { sub4=line; sub(/^ /,"",sub4); sub(/:.*/,"",sub4) }
|
|
if (line ~ /^ name:/) { print " name: " ENVIRON["DOMAIN"]; next }
|
|
if (line ~ /^ listeners:/) { printf "%s", ENVIRON["LISTENERS_BLOCK"]; skip=1; next }
|
|
if (line ~ /^ websockets:/) { printf "%s", ENVIRON["WS_BLOCK"]; skip=1; next }
|
|
if (sub4=="sts" && ENVIRON["PLAINTEXT"]=="1" && line ~ /^ enabled: false/) { print " enabled: true"; next }
|
|
if (sub4=="ip-cloaking" && ENVIRON["NETNAME"]!="" && line ~ /^ netname:/) { print " netname: \"" ENVIRON["NETNAME"] "\""; next }
|
|
}
|
|
if (top=="network" && line ~ /^ name:/) { print " name: \"" ENVIRON["NETWORK_NAME"] "\""; next }
|
|
if (top=="opers") {
|
|
if (line ~ /^ [A-Za-z0-9_.-]+:/) { oper=line; sub(/^ /,"",oper); sub(/:.*/,"",oper) }
|
|
if (oper=="admin" && line ~ /^ password:/) { print " password: \"" ENVIRON["HASH"] "\""; next }
|
|
}
|
|
if (top=="languages" && line ~ /^ path: languages/) { print " path: /ircd-bin/languages"; next }
|
|
print line
|
|
}' "$1" > "$2"
|
|
}
|
|
|
|
assert_ircd_yaml() { # hard post-conditions -- a silent sed miss would be a public :6667 or a dead admin oper
|
|
local f="$1" fail=0
|
|
_chk() { if ! grep -qE -- "$1" "$f"; then warn "ircd.yaml check failed: expected $2"; fail=1; fi; }
|
|
_nochk() { if grep -qE -- "$1" "$f"; then warn "ircd.yaml check failed: unexpected $2"; fail=1; fi; }
|
|
_chk '^ name: '"$ERGO_DOMAIN"'$' "server.name = $ERGO_DOMAIN"
|
|
_chk '^ name: "'"$NETWORK_NAME"'"$' "network.name"
|
|
_chk '^ ":6697":' "TLS listener :6697"
|
|
_chk '^ "127.0.0.1:8097":' "websocket listener"
|
|
_chk '^ - "https://'"$ERGO_DOMAIN"'"$' "websocket allowed origin"
|
|
_chk '^ password: "\$2[ab]\$' "admin oper bcrypt hash"
|
|
_nochk '^ password: "\$2a\$04\$0123456789abcdef' "placeholder oper hash still active (the commented examples are fine)"
|
|
_nochk '"\[::1\]:6667"' "[::1] listener (fails on IPv6-less hosts)"
|
|
_chk '^ path: /ircd-bin/languages' "languages path"
|
|
_nochk '^ path: languages$' "unpatched languages path"
|
|
if [[ "$PLAINTEXT" == "1" ]]; then _chk '^ ":6667":' "public plaintext listener"; _nochk '^ "127.0.0.1:6667":' "loopback-only listener with PLAINTEXT=1"
|
|
else _chk '^ "127.0.0.1:6667":' "loopback plaintext listener"; _nochk '^ ":6667":' "PUBLIC plaintext listener with PLAINTEXT=0"; fi
|
|
# The history backend must be exactly the one asked for -- yaml_set_nested
|
|
# targets a specific block, so a wrong result means the template moved.
|
|
local got; got="$(history_backend "$f")"
|
|
if [[ "$got" != "$HISTORY" ]]; then warn "ircd.yaml check failed: history backend is '$got', expected '$HISTORY'"; fail=1; fi
|
|
(( fail == 0 ))
|
|
}
|
|
|
|
CONF="$IRCD_DIR/ircd.yaml"
|
|
FIRST_RUN=0
|
|
if [[ ! -f "$CONF" ]]; then
|
|
FIRST_RUN=1
|
|
log "Generating $CONF from the image's default config..."
|
|
TEMPLATE="$TEMPLATES_DIR/default.yaml.${ERGO_TAG}"
|
|
ergo_extract_template "$IMAGE" "$TEMPLATE" || die "Could not read /ircd-bin/default.yaml from $IMAGE."
|
|
chmod 0600 "$TEMPLATE"
|
|
|
|
# Admin oper: random password (plaintext 0600 on the host, hash in the yaml).
|
|
ADMIN_PW="$(ergo_random_password 24)"
|
|
ADMIN_HASH="$(ergo_genpasswd "$IMAGE" "$ADMIN_PW")" || die "ergo genpasswd did not return a bcrypt hash."
|
|
( umask 077; printf '%s\n' "$ADMIN_PW" > "$ADMIN_PASS_FILE" )
|
|
|
|
render_ircd_yaml "$TEMPLATE" "$CONF"
|
|
|
|
# Persistent history. Ergo keeps the in-memory limits (channel-length etc.)
|
|
# for the RAM backend; with persistence on, retention is governed by
|
|
# history.restrictions.expire-time (1w by default).
|
|
if [[ "$HISTORY" != "off" && -n "$HISTORY_EXPIRE" ]]; then
|
|
yaml_set_nested "$CONF" history restrictions expire-time "$HISTORY_EXPIRE" \
|
|
|| die "Could not set history.restrictions.expire-time."
|
|
log "Message retention: ${HISTORY_EXPIRE} (history.restrictions.expire-time)."
|
|
fi
|
|
case "$HISTORY" in
|
|
sqlite)
|
|
log "Enabling persistent history (SQLite: ircd/ergo_history.db)..."
|
|
yaml_set_nested "$CONF" datastore sqlite enabled true || die "Could not enable datastore.sqlite in the generated config."
|
|
yaml_set_nested "$CONF" history persistent enabled true || die "Could not enable history.persistent in the generated config." ;;
|
|
postgres)
|
|
log "Enabling persistent history (PostgreSQL on 127.0.0.1:${POSTGRES_PORT})..."
|
|
yaml_set_nested "$CONF" datastore postgresql enabled true || die "Could not enable datastore.postgresql."
|
|
yaml_set_nested "$CONF" datastore postgresql host "\"127.0.0.1\"" || die "Could not set the postgresql host."
|
|
yaml_set_nested "$CONF" datastore postgresql port "$POSTGRES_PORT" || die "Could not set the postgresql port."
|
|
yaml_set_nested "$CONF" datastore postgresql user "\"${POSTGRES_USER}\"" || die "Could not set the postgresql user."
|
|
yaml_set_nested "$CONF" datastore postgresql password "\"${PG_PASS}\"" || die "Could not set the postgresql password."
|
|
yaml_set_nested "$CONF" datastore postgresql history-database "\"${POSTGRES_DB}\"" || die "Could not set the postgresql database."
|
|
yaml_set_nested "$CONF" history persistent enabled true || die "Could not enable history.persistent." ;;
|
|
off)
|
|
log "Persistent history disabled (HISTORY=off): messages stay in RAM and are lost on restart." ;;
|
|
esac
|
|
|
|
assert_ircd_yaml "$CONF" || { rm -f "$CONF"; die "Generated ircd.yaml failed its checks (the upstream template layout changed?). Nothing started. Template kept at $TEMPLATE."; }
|
|
|
|
# MOTD: the bind mount hides the image's ergo.motd, and a missing MOTD is silently
|
|
# ignored (clients get ERR_NOMOTD) -- so always ship one.
|
|
# Tell users the truth about retention, whichever backend was chosen.
|
|
if [[ "$HISTORY" == "off" ]]; then
|
|
_motd_hist="Messages are not stored: history is lost whenever the server restarts."
|
|
else
|
|
_motd_hist="Messages are kept for ${HISTORY_EXPIRE} so you can scroll back, then deleted."
|
|
fi
|
|
sed -e "s|__NETWORK_NAME__|${NETWORK_NAME}|g" -e "s|__DOMAIN__|${ERGO_DOMAIN}|g" \
|
|
-e "s|__HISTORY_NOTE__|${_motd_hist}|g" "$SCRIPT_DIR/ergo.motd" > "$IRCD_DIR/ergo.motd"
|
|
|
|
chmod 0600 "$CONF"; chmod 0644 "$IRCD_DIR/ergo.motd"
|
|
chown -R "$ERGO_UID:$ERGO_GID" "$IRCD_DIR"
|
|
|
|
log "Validating the generated config (ergo run --smoke in a throwaway container)..."
|
|
if ! ergo_validate_config "$IMAGE"; then
|
|
tail -n 20 "$VALIDATE_LOG" >&2 || true
|
|
rm -f "$CONF"
|
|
die "ircd.yaml did not load in $IMAGE. Nothing started; fix the cause above and re-run."
|
|
fi
|
|
rm -f "$VALIDATE_LOG"
|
|
else
|
|
log "$CONF exists; leaving it alone."
|
|
chown -R "$ERGO_UID:$ERGO_GID" "$IRCD_DIR"
|
|
fi
|
|
ADMIN_PW="$(head -n1 "$ADMIN_PASS_FILE" 2>/dev/null || echo '<not on file>')"
|
|
# Only put the password on screen for a human at a terminal, and only on the run
|
|
# that created it. Unattended paths (cloud-init) send stdout to the provider's
|
|
# serial console and /var/log/cloud-init-output.log, where a server-admin oper
|
|
# credential would sit indefinitely, readable by anyone with console access.
|
|
if [[ "$FIRST_RUN" == "1" && -t 1 ]]; then
|
|
ADMIN_PW_LINE="/OPER admin ${ADMIN_PW} (also in ${ADMIN_PASS_FILE})"
|
|
else
|
|
ADMIN_PW_LINE="see ${ADMIN_PASS_FILE}, or run: ergoctl passwd show"
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Confirm
|
|
# ---------------------------------------------------------------------------
|
|
if [[ "$FORCE" != "1" ]]; then
|
|
cat <<EOF
|
|
|
|
About to start the Ergo stack from $STACK_DIR (host networking).
|
|
|
|
Caddy will request a Let's Encrypt cert for ${ERGO_DOMAIN}. DNS for that name must
|
|
already point at this host and ports 80/443 must be reachable from the internet.
|
|
IRC clients connect on 6697 (TLS)$( [[ "$PLAINTEXT" == "1" ]] && printf ' and 6667 (PLAINTEXT -- credentials in clear)' ).
|
|
|
|
Continue? [y/N]
|
|
EOF
|
|
read -r ans
|
|
[[ "${ans,,}" == "y" || "${ans,,}" == "yes" ]] || { warn "Aborted."; exit 0; }
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Up + health
|
|
# ---------------------------------------------------------------------------
|
|
log "Starting stack..."
|
|
# A container compose CREATES or RECREATES has already read the new Caddyfile, so
|
|
# only the one it left alone still holds the old config. Compare the container's
|
|
# identity across `up -d` to tell those apart -- `svc_state` says "running" in
|
|
# both cases.
|
|
_caddy_cid_before="$(docker inspect -f '{{.Id}}' ergo-caddy 2>/dev/null || true)"
|
|
docker compose up -d --remove-orphans
|
|
_caddy_cid_after="$(docker inspect -f '{{.Id}}' ergo-caddy 2>/dev/null || true)"
|
|
if (( CADDY_CHANGED )) && [[ -n "$_caddy_cid_before" && "$_caddy_cid_before" == "$_caddy_cid_after" ]] \
|
|
&& [[ "$(svc_state caddy)" == running* ]]; then
|
|
log "Caddyfile changed; restarting Caddy to load it..."
|
|
docker compose restart caddy >/dev/null 2>&1 || warn "Could not restart Caddy; run 'ergoctl caddy-restart'."
|
|
fi
|
|
|
|
log "Waiting for services to become healthy..."
|
|
if [[ "$HISTORY" == "postgres" ]]; then
|
|
# Ergo refuses to start when its history backend is unreachable, and
|
|
# depends_on holds it back until this passes.
|
|
if wait_healthy postgres 120; then log "PostgreSQL is ready."
|
|
else docker compose logs --tail 20 postgres >&2 || true
|
|
die "PostgreSQL did not become healthy; Ergo cannot start without it. See the log above."; fi
|
|
fi
|
|
wait_healthy caddy 60 || warn "Caddy is not healthy yet (docker compose logs caddy)."
|
|
if ! wait_healthy ergo 120; then
|
|
docker compose logs --tail 30 ergo >&2 || true
|
|
die "Ergo did not become healthy. See the log above."
|
|
fi
|
|
log "Ergo is up ($(ergo_version_running))."
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# TLS: wait for Caddy's cert, copy it into ircd/, rehash
|
|
# ---------------------------------------------------------------------------
|
|
log "Waiting up to ${CERT_WAIT}s for Caddy to obtain the Let's Encrypt certificate..."
|
|
deadline=$(( $(date +%s) + CERT_WAIT ))
|
|
have_cert=0
|
|
while (( $(date +%s) < deadline )); do
|
|
if ergo_cert_source >/dev/null 2>&1; then have_cert=1; break; fi
|
|
sleep 5
|
|
done
|
|
if [[ "$have_cert" == 1 ]]; then
|
|
sleep 2 # let certmagic finish writing the .json sidecar
|
|
bash "$STACK_DIR/update.sh" certsync || warn "Cert sync did not complete; the 15-minute job will retry."
|
|
else
|
|
warn "No certificate from Caddy yet (DNS not pointing here, or 80/443 unreachable?)."
|
|
warn "Ergo is serving a SELF-SIGNED cert on 6697 until certsync succeeds (every 15 min). Check: docker compose logs caddy"
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Schedule certsync (15 min) + the daily update check
|
|
# ---------------------------------------------------------------------------
|
|
log "Installing scheduled jobs (certsync every 15 min; daily update check, policy=${UPDATE_POLICY})..."
|
|
STACK_DIR="$STACK_DIR" UPDATE_POLICY="$UPDATE_POLICY" FORCE_UPDATE="$FORCE_UPDATE" UPDATE_GRACE="$UPDATE_GRACE" \
|
|
CADDY_AUTOUPDATE="$CADDY_AUTOUPDATE" SCHEDULE_UPDATES="$ERGO_AUTOUPDATE" \
|
|
bash "$STACK_DIR/update.sh" install || warn "Scheduling failed (non-fatal): run '$STACK_DIR/update.sh install' by hand."
|
|
|
|
echo
|
|
log "Stack status:"
|
|
docker compose ps
|
|
echo
|
|
cat <<EOF
|
|
================================================================
|
|
DEPLOYED -- Ergo IRC server
|
|
|
|
Network: ${NETWORK_NAME}
|
|
Server: ${ERGO_DOMAIN} port 6697 (TLS)$( [[ "$PLAINTEXT" == "1" ]] && printf ', port 6667 (plaintext)' )
|
|
WebSocket: wss://${ERGO_DOMAIN}/webirc (landing page: https://${ERGO_DOMAIN})
|
|
Stack dir: ${STACK_DIR}
|
|
|
|
Oper login: ${ADMIN_PW_LINE}
|
|
(rotate with: ergoctl passwd rotate)
|
|
|
|
Config: ${IRCD_DIR}/ircd.yaml MOTD: ${IRCD_DIR}/ergo.motd
|
|
ergoctl edit / ergoctl motd (validates, then rehashes)
|
|
|
|
History: $( case "$HISTORY" in
|
|
sqlite) printf 'persistent, SQLite (%s/ergo_history.db)' "$IRCD_DIR" ;;
|
|
postgres) printf 'persistent, PostgreSQL (container ergo-postgres, db %s)' "$POSTGRES_DB" ;;
|
|
off) printf 'in RAM only -- lost on every restart, including updates' ;;
|
|
esac )
|
|
$( [[ "$HISTORY" == "off" ]] || printf 'Messages are kept for %s, then deleted (history.restrictions.expire-time).' "$HISTORY_EXPIRE" )
|
|
Switch backend: ergoctl history sqlite|postgres|off
|
|
|
|
Administer (from anywhere on this host):
|
|
ergoctl status versions, health, cert, user count
|
|
ergoctl users who is on
|
|
ergoctl oper add <name> add an operator (prints a generated password)
|
|
ergoctl announce <text> NOTICE to everyone
|
|
ergoctl kill|ban|defcon ... moderation (see: ergoctl help)
|
|
ergoctl cmd <raw IRC line> anything else, as the admin oper
|
|
ergoctl logs -f server log (health-probe noise filtered)
|
|
ergoctl backup stop-consistent backup of config + database
|
|
|
|
TLS: Caddy holds the Let's Encrypt cert; 'update.sh certsync' copies it to
|
|
Ergo and rehashes (every 15 min, silent when unchanged).
|
|
Check with 'ergoctl cert'. While it says SELF-SIGNED, IRC clients will
|
|
refuse to connect to 6697 with a certificate error -- that is a pending
|
|
issuance, not a broken install. Fix it in this order:
|
|
dig +short ${ERGO_DOMAIN} # must return this host's public IP
|
|
docker compose logs caddy # shows why ACME failed (80/443 blocked?)
|
|
ergoctl cert sync # apply now instead of waiting 15 min
|
|
|
|
Updates: ergoctl update check current vs latest (+ security advisories)
|
|
ergoctl update update update now (health-checked, DB snapshot, rollback)
|
|
$( [[ "$ERGO_AUTOUPDATE" == "1" ]] \
|
|
&& printf "Daily automatic run, policy '%s' (edit it in %s)." "$UPDATE_POLICY" "$ENV_FILE" \
|
|
|| printf "Daily run NOT scheduled (ERGO_AUTOUPDATE=0); enable it with 'ergoctl update install'." )
|
|
Restarting Ergo disconnects every user; the daily run warns them first.
|
|
|
|
Re-running this script is idempotent: it never touches ircd.yaml, secrets/ or
|
|
caddy/etc/conf.d/, and it adopts the settings above from .env rather than
|
|
resetting them to defaults.
|
|
================================================================
|
|
EOF
|
|
|
|
# IMPORTANT: do not put any code below this exit. Everything after the
|
|
# __ARCHIVE_BELOW__ marker is the embedded tar.gz payload (base64), appended by
|
|
# build.sh.
|
|
exit 0
|
|
__ARCHIVE_BELOW__
|
|
H4sIAAAAAAAAA+xb+3PbRpLOr+Zf0Ue5SmRCgKSeCb1KnSIxFmtlSRHpc3JJjgKJIQkLBGA8JDM+
|
|
/+/3dc/gQUm2sxvbe1tluEomwUHPTE/310+44fRaxdY0XEZhouzV0v/qo18dXHs7O1919jrd/d2u
|
|
/N/pdOU+rn3+rbu7tbPX7exs7+F+d7vT2fqKOh9/KfevLEmdmOir3f3xi9C/UZ9jzv9H1wb143lI
|
|
YML0miyLjhzXXVHjVKWbCfWDabyKUvqGXqjJkCUlpVkcBmkTt+S5weURJSq+UbFd26ht0CiMQj+c
|
|
r5jUD+ejE/nRm6qE4iwgL6B0oejkfDiiQKW3YXxNgbNUSeRMFTWCkI5FHOnscNTsCUGSKaa+p4I0
|
|
wTfL+p56e3vf7dPodIhvD13fk+K1ETUShZl5ylg5Pg0ubnba+LPXFMK3anKX8M7ONk2FA5bVxu9e
|
|
POX73a19u4N/3d63Hcws1PFrojnS+Nn6MYxvndhVLn/S1Nc5KNS/7bQrMzQOj571m09keV6SZMql
|
|
qYpTfKZpGHn46gVpSHYbi3BpFsZC9v7F54CZNFN8L0lVAA5OVnSVRa6TKjtZCOFkFUyvqPENDQdP
|
|
T55fgCULJ1noxfphGE1YAuRa3/Le3t4+Rb6D1ajXaY8MVNACLE0X04XCY9/QFTNlmvpXdH52+ss7
|
|
ltoo5sEm1Wu1jESeluRFlu8tvTRpT5wgIScAL8KMD8ZJIELTLFZNEYcXixUtwiTNxccL5j2REH6u
|
|
BV7GYZr6uCs0Bhc44NDhUXStVhRq+dOHvpmAHk4iVgme5OFa+MDLDFLr850oDl+v6DbMfJcWnqtI
|
|
QdJXLEh7hgpN1MLDSNAFuUnsuXNFc7D91lnZdMJLXYZ40PGTkJaKd8dL4D1gIlcFK2uyslw1czI/
|
|
pcHZxfMRzbwYj/s+CLLc+iuah5hXPwrORyFOkxquivxwxccbqzmfe5wQRAwS1mZZaNp0FAaJepWp
|
|
AAoIdSIo2JU83LtqXxkO4jOOMob6HZmDjdVLNU1lsiWr7CLfRLNl4AGrwrkz/wQEeHGlwGheVjZZ
|
|
PXQjrGkM2KUJjth1YgELaKrh4WX/8PhZnxr1IZ+7l65kbr/etGs1Boue6F+tliNLr0a08Q4k+Kcu
|
|
oXdkUIDCSQrRT9ox1OpWH966arNuQfJUvPQCnHtCJ6PRxZAVVjbExCCgFjPJKmE0ctKFMErQE3JO
|
|
rF3EUsfSGjlzZdMwdVJvClUIZt5c79OJIsiDrG7m+RBIF1pDtx6oXbkaPKfFObJpSzXcQPMdFyuk
|
|
w4sBH0Q4m4GhH59zMhkvlchbYhM9c+fxm6PD4+NfxqPDpz1ry3L8yAvUWxmH7TGLVTwuj9eSp+Rn
|
|
s40eZYEPVbWSNIwi5cpvRobHLCE9kTdN0YnGbhxGPfr18PT09+IeaOLWWX80/mFwdjwe9i//a3DU
|
|
/70EqI0SpBtxGAKMA6tYHmZTLjgX4ADShZc0hW5ipHQcRljjr0FoQU6sKPZucDxziCdkXekl3IR+
|
|
ttQCKzALbJdttlU67fEf/ZWq6ylP+huRA9ttQ/MBENM0jFk1gJItKHYKCeJhzXvEYQOcnvy9g8Yb
|
|
xBaInKlALdNnK/FE2GhBxV1ngmlZjnPzcY+2kUzzv/ysghsPLsIS2JhvtH/59Hx8fP7scHDWo/rj
|
|
N5Xvb+tmDC9l3MetUxlSfi1G4NhenF/+fXx2+KwvY6o3zCi4HnM2CeYRF6eg4h69TMLAYu6Y+zgq
|
|
D9CYDyNaOq+txPsDMlTvdpb1tfv8HO5v67sVq5c/vkGnBuEskQ09hBIvVQD4GUTHzT2f8jQb/PVB
|
|
jeQLMMLCVD96dmwNT/qnp/UW1W/nwA3r1blFizSNeu12Ablt+l+axyrCr7T5P+H1Zv13Q4iNdnzj
|
|
+D3a7iQ5cW+pwgz0d/M7sUpjD4JJ2+aGaNw4UrEXQmO6ePSTgKxYD2As86LiSdJlFojlrxgR8S+u
|
|
KFnBzi3FQFcMoBCbQmQZfr1U+w+L8BZUtPsEy8UCrc+HFXuWsNIwKDgTz/dS7N6mPht3oSVH5KVG
|
|
432PERonpYn1iP/aK2fpt/RHd9IS1LKXYeq2aJb5/nQBzLAjtWwJQcYDeCB8w6YrL/DAfgaGK4oy
|
|
NrW4Q05KF4Nj6hI8hbtYfu35PlmwLc8vroRgQ7tvPewLHo6bGCPRomfno2NhAPvHorjN3F4LP8V5
|
|
hV8Dy5l8CgPA9Nfw3+j74Nnh037Pmi+mse2FbXEXF04qH972zCCxDhA+AM+7bcM/axVKrstXlqES
|
|
jp4PjnsWotJOsZanxZ36O43KPwD+LH9jlr/KEtJlNIPW/drGh3eaCBE5+fuvhDh2YXx4vz7LzgSj
|
|
RXfhzt6y2+ngrrK0Gxo7PDP99Hww0n5JvX95eX5JvZ8yL60XBEVHfcg2FO8Q7js80NHRBR94ANtm
|
|
fO7ISRL2uQNNyUHUBf/aLULOnNgkS1aT8DUFU4QV7BB1yJkB+dit0mjXwrbgBosKMFS+F2lxgEE6
|
|
o03ew2/xb8Em8BWkrVvaLv1cksCoCryyz4ewd+8+9u79SezdwqOfMv531/M/+JNiQ8lHTQR9IP+z
|
|
u9u5m//Z2dvpfMn/fI5rgy70kQ9/OpVAznck7AE6uhLK0y0Uh04Gw9H55S8HhXxINF5GoM409W5y
|
|
8ztByAxUBEpJHuDo/NnF+bA//nFw2j9w7+Ube+8RQTyvkyDwKltYiTdd0L0oh60fpoTaK3+GoCk0
|
|
UfodG3oFYvi4ZOARdww+l057NbKoRRE8AjYiLUZYfFav1bRJRQIpgfnBtxRuWpHTAkGBJTgSiN1i
|
|
OOC+M0+Ee4HvXatijYBMhtiEt8ChtpOTgFEJaALC+DVI/RVnJCYJpxUkLRIGqliyTkco+RHLd+Dy
|
|
L/Ks21klGaI0Lrsmy3Qv7Zan21rsZuD2itfA8QNOXHOIl7yZFEs8PhvaVSHhaRWiAsXcW3E8hP0E
|
|
Ybx0/Dz/YQxwTaN8lE18L2H/Q4dO4UPJgSfaoOSeCjtxaSUJtbuzvQVyDQ5jcEpxKSavfFsSFNhk
|
|
4ZY1bToDeziQlkQT78hlB9uCkTCJSixh6bxEcANZSdhgYeTF4Oysf7y221t2vJg9OpaWzUosVcRg
|
|
LAWQ9hRaAinkH2YzcAjHtEZf+F2m5K7AJE6bpGFmXDPMLx4T1kfPo3nsSCLAk4QgqCrfmyjYVsQU
|
|
2TKywFiLfSA+hzJ9UiZPyi1I4qSaLMk5t+alFTcfv4Gyjp5e9ofaG+vufzhYzx/+oGdWhkoiC2z5
|
|
ddLNyoXElewWOMmmX5UhwJ3UWMuQ0zJME07BmVwe86tI+fJiYm8qHgnLrTb7OgdW+Fj1Us4qu784
|
|
vxz1LBa8tyJ+9XeFt8UTz4f9S/Eo1+9Y4uLW744+/mF9LL7LyDEkgeXqbekrsbAyP6BULm+PMU8j
|
|
hA76mQ0SrbBELThwCiVokZgFKy4INXJEEt8kCn2BbI2uAjK0+XhT4KWcT3tiE8x5jUmKELXk0+Fw
|
|
iDj8WPC9R20gTht+MfyapJ0LhpVTK1bS3ZcJJ4hebulawYXSmVmM86YEIwQv6YkALjYGDfa9qQeA
|
|
5J1iz1maxaqgJSJMeQ7VwNkSxkxormsrpNIFk7Kk2MfT48PRIdZ948Rt6Fi7BBZJmrSjOf/3sHde
|
|
7E8nWd5BouLM32WMzYzpvZ9nvTj8YFarmOLo5PzFGa1dGxL5uJM2ZDZeRaHH5sV7TYiPAU0LL2Kb
|
|
ptlQkDk+PBozloyH/cPLo5Pi/o+g3r8svg77I4RJd2aTKLOcipecaGmVlJrB/3ybEodVCSIS+0dj
|
|
q39JTPRw5DAfewmrJ5yo5/TbO7DgtzpZ7vqv97Sfx7x6IJbo7v6JPM7ug7HEdp7HEVO75BQ8awow
|
|
QVEWQRfFquc6M3EYJxLOD6qInbk8NhMeiuejUxts37jqlJJZO06fI3iXVXfmeL7gkbaf3kzjNSyA
|
|
CgTLskBsPj+g0xFwKvFTMtYmOYzZPOZBJRuNlkE7KV5gdXGYlGaibTyQBICR2mvpiJJufoLrhlDU
|
|
KQxcj2fq5e7PWJ/8qlarKP+62n/S+OxTX0VG8hPO8YH4b2dvb7eI/7b29xH/dbt7X+r/n+WqVhhM
|
|
yarSEWDnBT9OyL63eq+96svQ15VGoq5N51I6Ezsv1bN3FM+8mTdlv5anf/O4WhywTb0wLyffqXHH
|
|
KtMuoqMJsSP8YNFb6ukSVHA0mVMzlXW9PE6mKl2fpIZsVweR3V1aekGWcvCmozQdEGcBMCuYK7dp
|
|
C70tm0Z5CbBSAbxf+QNyssVvr+/UNBuQ9X2+OlMpLQrvlYaDggFAxPXWhPy88Kdg2p3uBGqv3bmI
|
|
w1THi7J1Kcya0q+Y7Dw+y6k1pCSOkAB+Gx7nMT0Mmjo+w29TwJkbK9iqJ4Vj58V5B4Z2M2OV01s6
|
|
8bUk9LjGT41v/tvwc5tjA9m8da8wqqPu0hoB2lMxM5CDthbEQ9cluJAxOzm6EqPz49RQ9tyGC/nU
|
|
Wb50Ki0gLQmhdPjUJCeRUFjKbV/beUdIJd/hBdAP3zdxm2jPJEvvxHSGAG/oUMq2WmR0ubZH9zMZ
|
|
lXpt7U3tkVpiV1CJSjGsVnu0obsKygaIPFeK+deLSmGpsJCkUlK2Ot3vWkyosLwcuWp5l6PM6wOm
|
|
EcNEfLbEIYaPOnmSelM+caYFjzxgDUOU/aTYKGd1uWLN3SyTVb5DXnOqSRnKtUd61XhYdngWig61
|
|
t3va0ksEwjFe5kbc4JBvTSLDRiCFWrmRx4esOQjymBZrS1MHG3F4K2LphuL4cG6k0MtEtzEstjF0
|
|
xc0btUc6y5wQjuJRxHoyDXHiiy4ttmqP3tZwGO8o/cHPMG62QdSHema43ak8K1bC5BrCf7e2x7OD
|
|
bxE8E6qH13Xa6nR46nX84FEqmHKnyR9J6tL8Dy8STnJZTTZWbFSDKnnzIIyL7qhXGY5GmhKeGAhh
|
|
Pff070xHZyTgHcZOAMCPJV2lGxgyOeDkLtC0DbaYvFztEWTC9dVYOh8M3n0tvI1Z9BL8It0264jG
|
|
jOb5zyNOfoCdWJx4aAk1qtobKx3iAaZt227aNFQqV8BOR8rZS6U1GUvxlpJlWNfwWr5EWRSOigPF
|
|
I8goJrBGq0hRnaGoLagkMo5FpwdZOrO+rcs29Cn97W+jn0eFS8nXm8drtWqGkrLcWVsbepTXP6Te
|
|
Eawq7W+9tYFkHu8J/aos3BnGO+3JJ7GejdHpsHlnCBjZM5/eY5uo8UAfSy7qzfVtXJqOJE4NetNr
|
|
nStqL5M5neHrECsH1j4dDEf9S/pbHuh+v0biAgYm1rihrTJrBq9OKq1cOyxyEfoC10U5RGLM8fFJ
|
|
DiUDZI1EcsEMq2gsqnOgB4NysN3d3d6DK/oEODL1M1cNs8lxuOTGHz7Zn62qGFjnOo6kehAmgTeb
|
|
8ZBLNVNxDNZchL43BWmdd7LC2ENoarHPYEmoYu7wM9ZQC4AsGDGsrBYRHSM5lBif8H3GmVUR1QTO
|
|
lcadj+j/aRVY04+PSF1fH/D/4fp3tf/f2d/b77L/v7W/u/fF//8cVwVZOVFjQeIfiANgTrVVEFdq
|
|
AifhWvtZ0jJx11PS3ROczmZ1gwoPzoaD477QvGO2SnotXbGt6fxRjjml0xtDHZTJGRZ5igd65u77
|
|
aELSZE2XCq7DVNN50FkjZ86NG8ZhE0fN9CG/z1szvnEY64T4NPX1fcuM0s2r/dfOMvJNvj426cm7
|
|
jmiJc2zNJyBnh/G8rZa6jNCe8/imOOcgmTdi3d7e6l+okQUR59cd7gxRnMPBAibggy7cyM65XsFV
|
|
KO3L2Zwn0/mcDXpT12al3sPHLPbxf90cBue3nCwNXwLv+faGH04mq/rbt0WrdmE+8/ZfSfh9TeXy
|
|
il9YRsbGAPK9t0ICptvRmXy6sqqb68mfOLzK04ea7XmNyuRmcORclbxXYrQ1lyHF5wK+JY/XxRFu
|
|
oq+Td4Bc0+FqWg0KQUzsPPbRQJ6sVZ7sf7dkUNG29Ann+AD+b3UA9ib/s9fd3tP5ny/1/89yET2e
|
|
/jpdOcHv43HVSR2PH8f8JgDR2GjHeFwrBx/8heuxuLwvlM+J5/9AUOklusaZLBmm2OHN00uI0AKG
|
|
drZENj/1eHISZoy+ma+Sx7pu0LXpBy7/TBk9AQ9cNc/L4xxJwk+Hg7mUMGHB6ZkkUmq6aFGY1x0k
|
|
hx0GCHydlM2dKQ5tyeOIdpYtmvlhyFaGn6KMfTEuSCnGqhvOYSX4TT+1bdPfOe2BwNVXc8fXlTWY
|
|
r/mCLQq2ZSXOTJnyKKMwYDNQCFnz1aRh5E0pkeI67+LWS0zhcsem4zDYhNt9w8EYv/Rg02DGqQ5y
|
|
vcSZx0rloQOFxrC3YAGuuZ2xpC8NW9KwQYDNhHMqGLpgc4jF6J4LQVm9ND35rk1H+nsCfJQkkz4H
|
|
rh/pJA9nWyAzUp8UMz46vxgcmZN7qlIJ/bmol0Xm8IpAQbI1HCvw3T8XKQxTZyW1H91gay5dfKDh
|
|
4fCULk4huPybUNcGdn3agv3FtLzH9Wk3zBB58kT5Ed271hd80j+9uEeOb2pGvIBXtKDrILwFOwwf
|
|
xmPTYjM+Ox/1RdeIfuFVc86srGwvPNdVgWkPkROTTFtLp59C0zgCTJvN9Kn9xJG9hCscPEeRcvyk
|
|
V5x6RUzyNoL24fGzwZmcWT94Ga4077jX49/OuH25Pnhx7d9W2jH9VHO83/53uevvTvzX3d3vfrH/
|
|
n+PaoKMwkqYslgQxVTNueeIY6E7EA6N0rZtFuFrMkcCSE8D8gpq91gyYSNd8mRlHdDHz4kQnXMvI
|
|
K1YSh+hmL479OHdoOgsZBHt04/iZySLjBr3KQrG4oFApXge6yITV+j5OMvHmQfEum+4fXO90kdyg
|
|
tFqYdUinDMdGvUr+nFFxredGQou8R0PGSO8GNSDNHZ1flhQwdx9PdHGLa0r6UQkQ2pUooSZt9zQA
|
|
lqecifrrnfcbdMEtVFPJiXO+jd+2vOU4CDFgk10kdreKN/BMWMMDW/frclz94IJakk34XcBW+fKK
|
|
jtjzN/xMKFQJ03VQBKdkucykj38trNdioCWFGqbjb6areKGpwhmTXLZ5S5GxadcqkdoBWJmjlo19
|
|
MT/7Ui3h3MV6iXGtK73NvURevGLZ4X44u1YWVw7kVP/zDtmqO6rZOhg+v+DmsPyNpIMW9i/OLEQp
|
|
YF5jAakYZRfMkJQ0jYmPSCQE5x6IW8nzV9TGNDCJPoAble3atapr/tDmRZikDeovS5IWJvOeBlzH
|
|
eYJgO45XcoC+0m2Jmzeb1LjZsrvf2d1mdRORZ95wDdQtHA95hVWnIQoU0IOfUFmpnWTLyACGFFe9
|
|
1PwI/pyJjkaifpv61ZDN9qaoc7qp31yVN4gYoRgoEhU50iY5yTzf1SUscFY5nELyfa7VGFGSN1IO
|
|
HnwhpZa/jXJg9sg8zjy3N/dMoTQ2ryhhu/xe8Fo5iw7e/+YSN7Lqt5Uku10w7wlVX1my6UcAsXZt
|
|
q6PM6p8Pjg9q+YsqB7kMnJrScPKX5QAEO/yKlchks1cpRMt7D9XSsxbrxvoL4SYPJuXcbo8OT4fn
|
|
JutVUpLiVED/196777WRJOui8zdPkZblkWQjCeHbjGTRQ2Nss9sGb8A90wvTuEACtIwuo5KgGWD9
|
|
ztOcBztPcuKLiMzKrCoJ7HbPXmv/rJk2oKrKyktkZFy/0BRzZl+I72EFZmd3x+lWYAWarHWmnmOb
|
|
uE+EgUwnUk3GXWamJN4aDpJmrxe3nIQI8WEw6LK78IjIEvHTJKET7QzgPMYtrza2d3Z1ttn7GBP9
|
|
Ih06SvzuGYausenBKRgecjWzO1S+xpohLT4pZsjelfgF17ba4UrWjohbSousNKF7fCQy2S8m96iV
|
|
scR8emCQijMdJF1ZcHGy7C+1PlJr5KotsJq0u/6P3faSJaR3qiDYkK7fRUi8YxALELv2aAq3V98J
|
|
YTOJ2bCuHmLCY460Fo+0NbRyS+KesQ5k0vRlXYVbjKHHw19Cs/1eotLYfSxGXCKa+J9nOL1MQtc2
|
|
gPawy9tYs/laSUi/29TcgAtajEB4SOz0QsWT/V+ek9IggAvD42N1lNEkSFTbdESnVDfqA1EgOu+R
|
|
0sWR/RCleP5W2oZ40V9ow5k3wwuaJJoEVeNERPrcHfH0CVgA8xZqQSe85kVCxzU+BLtVRBAG5ktT
|
|
btBZ1v3srUtlkWUvCZ5Ob5aQocc000enQtuyiR2F2mV/oZF/KyUwQZvQQQPgkN3eCXPu7m90d88b
|
|
HjERm4AiSwgq3elOAr4I+slP/JiR9hHkdqill2UCszEx8ALEpjQvOaU0KzXmloQXu8U80ikzB81t
|
|
rnKHraf5DO9W/9fWtp/PoDRKf4ymY7y+6b/Uk7xSyQ3gYy5gel5yA2/a5Byfl9IAO8jJV2c0EI/y
|
|
shLaLilhIQivbfPZ7cXUtv2QWisic5ZB5vyqhVH2Luc3N2IbxMty/6INulc5ZGZ8vYbX+0pKGFjv
|
|
jRDCZZszXpRSPogwhEQlneq7UMVMSrF6mYhb6kqLac06U8gb/zk8jJ0JL0Zc3nQMa9WhRHG37KnV
|
|
hQOK+YIprw5ckL6fIkHH1biHQ5vNppGeXkqWLNIx7AEnkejY4JNa5MN7TBwZPYyYYHAAcmfFOxmx
|
|
NllT+BqWBg0CyKUV6yUSIdSJoNhgvFwwETOXiZOjQE4IGxrgWkpy4CKTJKm87k3eTA+T20lS6cVD
|
|
doVyyJBAmQQfa8t2+UA8I7ZrRGljFg6QvhGZwv374HDSeiHdVKxxb2DdE+ad3Tg8VqpKlypxcJBP
|
|
+H4SQSGp1aEIHV/yFqgsfHj/cnV3nQjw7cbaL22ZVoR1SiexGCBufp9BmsUUvtQClG1SrziR/lII
|
|
Oi7wkXTaPWPoIhrmea97gU1gtSB+b6/bWbSG8Fdb22vrB9KDdqO2EPy9xAwf4dlsbb6IxjyWMh1N
|
|
G2vrbNEmgYZNoRXrII4Gdg1VhIjVj6CjfL29urbefoamGyqyd0iFlJw5xusZTRHiFzEZjVX/lWQT
|
|
CRr1IAfKkubABxAywrqHVfXnJrpxpLJef4i9QQL+Er1WWlV1x5z3IgelZHsv+C10rDCAyuqH3S03
|
|
KYHmN5Hkw9/1WXAoLW0L0vLd6Pt/8we0RucwHSl/3DsY5O/p03z7b2Pp8XLDxf8vP3/K9t/Hy0+/
|
|
23//HZ/79+rTeFw/7A3qkFIOI6iLxFYSumBh7DRCKB6xc3hKcxMFdkhKOEoZNEyZvVFyGLI+dcQG
|
|
3PHRKYlXlUVPdARDtXxPniru7K6u/XTwcmNb0nmZLYtYygZnG30keb7MWBPJMznuRNYXcY7lB1WF
|
|
J6fwlcZH495owhrBpYR8ay5TU6W2oyOGh/ODeC/GcKONF2207yO2YzAshgYRy4Ad7pnV7Rfti4cX
|
|
0UV06SFLaVA1iUe9jrhs+ViorvAMwxQL/eRycLQohmlB/fI1N/EyDybH9mQ9ikTV44laGw7OYRzh
|
|
zK1jOrXFI0iCLaK2B8NB9V/d8ZAjpiD30QkLGA0+YWHf55jp7lEPEHCa1N1Npr4nsdZs7KWD2GJx
|
|
lFf5+ICkimTRjX+Y6OIzo+683vxg+GSrdhYFlS5GNG71Z74qeBrvrY38W304VpvTBIGdgxgCCSPC
|
|
6EoxEtMUq6nyjd9LLd/D7J1BIKoew2FtVuqd7nl9QOKFWV75c4NBIAc2lbFcMebKWAySj0uPH+81
|
|
Wo+X+3uP9vmPpb55EAOUpFB8WGgZifeFREQPZp973N+7l/OcWfnzsn220+vmv7PR3/tt5rOgENNA
|
|
G8e9b79Wa7IjBCsrV0moNM1P67+0f159+2E9sZ1b1uTUGWoLCk3NrHtqyQWUe7tV+SWL7jf5Htbj
|
|
CaIha994aB7kkIiha1ubr5rt3CHeFBYA7nSA37G4vFp7e6Y6pkbSbRTM/r65vrabeknJCekcB/BL
|
|
mIPP5kBSwS9OMc6NVztt0fOoPbmFHkfzA2qev0CbLVJaXZw1XXWX2v9lft3ba7Ijo7m///A+Hq/+
|
|
C+PjO+p172r9hvv35z+zmaw3mHZdmwef2/aRBw/aD2+Ipg/O3Vf3H7b5G7npc7rRVM8+a7dWq/8R
|
|
Vf91sK+/LFX/erD/sKgzlOmBHfPVvYPPzeqcnkq3zh98LHi9PL+PP91Nuomq59qf0oMY2+bgXG7p
|
|
QPd8kbd+ip6gq8fZJS+7SGXucGJGjOQuYhgCbOQOR8Pa/CA6qy2wsYP0ZE6xiB3BMMW5+4nU4vF5
|
|
3cMkWN/8WUxVheTIreP0k8t0uL3EV8FlnDtyWRSG9HXWWeSGnfW17fXdncwtaliRm36kbz+8z9yD
|
|
43M60nt219+9f0uzlW1q0u2PWFnVN+5iTtM31ZCv1JU7OMSFkQvcyJNeet7dQjKBr98cbK+/32q2
|
|
Q+Qy7w7ooq9+abYb/pc7O28O5IK/0eP4tCqKt93n7oGX278cbH/YbLaBO0ZEMIyPo75bS9nPvU67
|
|
UDCAmKGfguJxrHyBmx/GVWtXwP51hwvfSc8Wy7XMjcvemUS03z06HaI7AEG7KVQS8pa3flELB283
|
|
flr3mqHzAj/gmDYFU+x1TJHhcgowCdn30DEj+qcpPKxIY/p3q+Xf1Oke9kjTLzy8pj+mh9PBZJo8
|
|
oRfDJ8Ykxur9x93OcBzpH4gfHMbJw3yf/2jFjanXaVanA0RwDYhb6D3dODqSbXvchR08Mh+234p1
|
|
FbkcJEpNx2ew+gDIsdIy4yPTYK9o1DubwrrOj7mlpiW1dmviJfxsrtggl6rH8c5bU+2b5SXqYKPg
|
|
r4b07ixskNEk8xtMgCaru3Pa4yB45lYNu6w3314Q+LsgSUlMInvdDMIngZUEfxB/AZyAC/F4iDto
|
|
4GAivPxFOHAlTi6G9BohIp5algRiRfHpapQ8m4Bis721tStQnY2nVckD1sAIlsXF3eAi/kVkgWzO
|
|
Xk/NXzWfjkafFgH6yOkIn0ABn1Y+kaSC4AmOe73s00n32TpVOgjYG7D4zvZ15AGw/tQ9mqrZj51V
|
|
ohtI7idnG+Jk4VBM0VI4tiaacBYZAvGrMkcMiCFC/EUvSaOsIUc76nfLyxWLoMPtcXRgj/MtqS1i
|
|
gW9X19Z3kl6zU86pDTIoMfMvJh4ZzgOQ+fXW8WQIrAoxojEAcn8ENzsDtCSMW5B4tfNLz5eWFgWM
|
|
ixG12KlOKsYK24cB+FhnWBN80z//1rIb1hS9FDmRJwRGRp/aiMYsAg1n12K1gY0IrPPaAlHASfdg
|
|
0h+xqN7/zI2lD6mTbu0f/GHhHoof0fsBaUVnQMl/AdBIetkK/RaNaaeumD2Me9/s0bvp3xP6d8F/
|
|
JHV40PNt3tHyOP2+XOCZgzDzuFmFX4OY2pQPiqsnLA+dyB9P8Yfw7lN6gnqO5wr0kxoNWATELAdz
|
|
acUratKJVkBnBSel74C4eQKOihtu8lrjVvrn0J70Iv3g3heE5WyzK0tiiKIOoxeRYi6UJLQm9oEg
|
|
SgNLxWBJ0/HAou1HrGfLdixHQrdjSSUUd40LyAaowKUBX4eHgo3tpA/xRsSuIw4g/rUDbY5X3NxH
|
|
DPPklNYMT+276XkrTDZHgodih4lapvlp3GigvDTZEhcemz+GYvzgWLpY+l1OMtqbJgRTr9QCabPx
|
|
RzBuz37yjdumhg9o7XlGMXmgCivEWgITK8K6KfxabLQLwQ3XMNzQGTho0K/EUk2106ZGlquWaLHt
|
|
8I5Y34FVI1WTdhz7r1aa1jJPX1qIrUUbXg0387Gi+Hm77nP3UnYdNSFbrhsfqdhw1C5e0df1+seP
|
|
9P+PH29a+iX9W69f03fX4Vd/pq/+fGOlBAUg5bFe0XtuUuP1NlJKFkRgTbVnqiRjxdf24drDa/2N
|
|
33ZzHbTmzv60vkNqTtuaCOhpPERjKpiVlczjIiiwttLhJFueZV1VP+7NYD1MiXS4kimRGlfyV0id
|
|
3onH9XwoNi8JDtVE3hBrygJcOkegjUtAOBd7pjwHuR/Wpqep79m/DZmSQ98CbEqFumYcADGkRurP
|
|
5MR9ZlGCOE0NQ7isLYxODhRMKaD25MCYE58QbgUA1AaBCbWH9ubSbHLhad6I/bABxP7Cl+1goTi1
|
|
Iom++gGC7ZIZfl4k8ZbOwdrC+9cHa2/WqcPvdl5DYaFBse/RHUzpG5Sw75lk+Cqahne6dVUECGK3
|
|
hZZjny2raIhyRDpLfH50wFqgo4hKwdxrW1vxQ6ctpd4T0FBygPRiCyOBp5M3N9ybZe93DhOQs84h
|
|
lCdL616oQoWex125lxHcUHHz0jliYRDSuetVCDyGgxXw1go9CLQx+qpzmEYYnGOIzK6Le5e8ppzT
|
|
YMWbfl/Vm9FQL3Zmepu+kos2Zi67k7wDCwGS4ucngbDjgg0UbY4PIPbcM8wp9hq/QVM8465FDYFw
|
|
nRgHa+ZDLKqE807UrYivvgMJhuD2af9N+xyJqKVaBNsmiE5LhVYMD6k3ZT9KYiU/DIK+l4B1Po2s
|
|
idMeSf535sXPq9srtVrNP3GMGPvAXz5jpIXi3wppY56aveZavc59kiTm7lsDbBPn9mnf+pUYvzzb
|
|
V9rKxfRDohgs0LBBS+fPW+FrbcgrCCw5cND01blFaedjG62d3Km113dsjQTyO7S2u/o6vzVFs0/a
|
|
4wACsberNadlepn2ODg5bLGpjfZmoejjzC3bPles9hCeSqQ8keBKpKgRMuIe6/TGJC7aYlOLNvMa
|
|
gRPwiTLDZyDR+yyATifDKgzTjH7VOWKKLJujjn8yFUANqQwSUKCpaL++pUR43/ysUS32ZC2PgCcF
|
|
d2bLeaTYywSJfzA01Z+/tZ9HklbExTeOelyE6pPKK1piycUgihWhLmeR7TJjoTZVQhA2AjTUE60f
|
|
8gkMq9qdDs2oN+rCaPTJui8TXOnBsMpRvXLoi8oSHWLcwufE3+Vr7Je97hkH1BYKYmDm8CVETYFx
|
|
kHoLzZUpgRhNbQFAzyQ4Ba4moctGwYHhD9dNaW+p+tf9Rx9r8rNsf6n8UAoE8ESeo1YPjlQzhsQd
|
|
kbx9uAJFnt8Tm2rD1EmwqKu5STZPZA5Nz/xmpFYQXBo159OoRnT5xQsY28vab+6n8q/MzYfZm5ed
|
|
zZImo4dlWCKpZjlgo79BNY72ir19Up6x0SHpXx26LxLT67Epl6mvK+bSVCoqabBJsWGPTSc5+Pe/
|
|
yNxfzT7geCvfAM6KCT1xWhINS2dY1krGZtptU2iIm0ef6N7yBMlLhWrwyNldHnFPQF1PhaJBY+0q
|
|
Voia8A57A1QGK3MEcVWzMEpQsuQb+WKvioyh/VKlBasrA7Kxx91izEqgIXFDJweE4ltneDFQv4n2
|
|
5UAFkpTR5NwTS/l2vS0lMPG54IlnDMbOPLXKERZS78YOO7CXzNw69mfevgkN6uFhTLdwdxJi9s4G
|
|
fTDcwedqTdmUqEmEBYzG3QRG5ETkKo19FCS9JAeIzdk0PQGgK79R4gj1IA1MUfw7TFBlMZkXLC5H
|
|
NOrVTnqT0+khMpzqoI647pwwN3XtVFyXtgvmo1sDfyYL9E4GKi/4jsqm/0dh79fC/qNCMLt+Y6wj
|
|
U1NxvfbwLs2Vub1Kofaw/rFRL+lE26WZpGw8jZxlsEatb3s4rTm651Pnm7dfeMHtEtOWsJiVAvNM
|
|
LWHAx78G2C8appyCFf0VYRfwMogpoPku1DifD+dOzr51+QIcwWvU4a+iRifq9iX4PaBDp/k5CqRd
|
|
OorB9atVhdgqXV3VdqSLNzcGf+AB+fUN9/HmppTatNHFZ8i6sdh2SsVGux2bK15PAyNPofhYIiVu
|
|
nO3Cyrweo8mop7hBmHOgmjJZ/D3q6dns4G8QddPNTmjiYlKo6JpZ5wmuJ0CMEvQkM2sTYqUeXDmd
|
|
/svgA10FB0V6B4yf1YhEwAvqkgVKdue3dm7F7Onbq7EE8O57HICGLFPXob3HIQharMn+3S7SEVgs
|
|
s7nt0YMYhWfZFtpYXrqhQ9ELZ0jd9yJpEmend17HzHCSyS4U6feUUkPfTeRwTE+q6jmBlsutngH0
|
|
43GunvOH2Fd3ozNG/0TwmZ53mYgzUw7ruFYkLQdisWEynhyNagreRKfUwTi6MHvVKpw++/jln9Me
|
|
CZ0762s7+zBevcB0sprJYL+u6miUBLUxhMeiQq2zQjxk4RZWo9iU2LVeIunc5lkojlUx5ZHHrpYI
|
|
ia3369v8PbBlAeBt2K2CnixayZAVGc4VZqxg+D0ASFkGZY+HZwzViNDDMQL9SGIm/adC/GHSO/Me
|
|
Zc3gsEvsRkYtFXftHCjtaoYdCkMhT2h77eDt6s6uOR2edTTskGaQMTJZMhd3o0vuEYclzzKq/Eac
|
|
3mlDGjHB6tkrloFhycmHXGJFdYZ4ehiTsnDGjrUR0CfV0sDTgKQWwQ5U6V5WaXzUZGscMavHBpOp
|
|
eT8d+uKJK7cFdYK/ehrmS8v3C17djrmVe2W8x9Hn7hlJC5ECg8pMgw66HSTibW6s/fQIJq1H3B9q
|
|
8bFCyJinVd6xh9NxLP5DRhCGA00T8i+l2l18StLit3bv2eWErHffADZyZNa2629f1Tc/vLVZBcfj
|
|
qM+Fdkg1isYnbPyxLJTrDiNbgAfBAhI15OL5k4yJYvkomki9zsKnSsa15IrJSg4Vt8aoBzSxuuTg
|
|
4HwCgCytX39RncTIyMc+D+EMSjFXJjRJCYXawgHoEdsqJZnBR3HVqNeLpY/jUh1KDX9zxt8MSnWT
|
|
+mqpZGOxEllGKqcVinAC/Plx4M+7kRcf9TtiCIE5C2qLhtliLHRjvzvuHRFv+9wFMrCedwzYoOw1
|
|
6WvDD4PhVxLvbnoGXenr/YfccZWXU8aaswcPzEMOutFNmpoTzGF7SbhDe1lWhUYgoEVceIGugrEh
|
|
OMeWZO526EshffwynVhFQg4t6m2RiPhkQns0FWon4TE4G72oGHyEP1eMdIg0wfi0dzzxI1XkLu5o
|
|
RfsLTczeuZy9t6KHGK63NCctddNDvSd7lQNfgnPP30n+uqDHvDSNbGCSzJzGRjqu7zzOvhTNoVkq
|
|
SOtjZSe8F9JnSa5jOseG6bd6pX7XzWEuHki5+9uoy7Hs6ZdVaokJ/LENsE38EPfg6IJy+PjFij2A
|
|
vTquOKPpoTkuO236id8uCLBdUC5T3F7dfLn1TobntjeNhJiuKeLWzCWwYhfFsmQemqb+4VNqEC1a
|
|
nQAYvzolxo1tENAtS23YTojnZP7hraAljEd0B0eRMjtJaL7P0WmWORi9yVss3RV0MbMv3m9svhYa
|
|
9cb2fmvztZHO3McNJonXsp/Hz59dP1lerhh/0zZm7IInjx/rPrgvG1/cTji8gY9jgeeQqgmp7DGL
|
|
3nEacNl+hGuQiMu/kGzbgKxKkqz8vULPVyoQN7kvMxrJXf7WjLXPjmf5+smzJ/Tf02uuX3n9anXj
|
|
beUum9xu6mTW2NKTs7WF4lf+XA0JW2n5aWqP3MopvJGxACE7tJgEbOLzhVSLz1zKxecW6sXndgrm
|
|
u2ZTMT5KyV9Gxvg8/ksD1KnnzSwa5nX/a4PXndc8Z7mDJQ+WPb1Ks5c9tVZcEdaxltYtVPHYNaOU
|
|
YX8MRQDwPVr+W2S+W0l/8wmhUORzsfDflInNX/qWc9Kll0yXk+SMsHM5lBCsbuaBcKvPXEWxOOct
|
|
JF+5r/A9Z12uLzmuqkYGXYP1VqDAcLkuhXNmufesyVjUxlffYm2vzBIxZ+eyKhdzO2LBYbfx4SUC
|
|
NZZ+W1qu0z+P6Z9Gp0r/2OLq9rSnEad8lioH8gUOPKl2kAqztFT9uNRYov8e039P6L9n9MXj5x8b
|
|
z5+X0t5MpxaL/iRVITg1jOs9sODWxBfn6hvWoFHxpjlcLQeMDOMLTR4jjgBdOT4lFYBtrUv1Ro0F
|
|
VW6drS5Wt7Q6awOnUsbDL51cf7O688bWWE9EHC65F+tleOvlXaZtCtuCzmV7VFjUvGkVyq1WWbbQ
|
|
kkB4cc2Q8r5M90q0quK2QfGs46W1heRGSIw8Dn5bWgIn5XIsRBs+oSSMbZdMAotsdi4eYy7kIQ5S
|
|
OGoXf7AHDp23NEjiYUvOzeI2hv+epPcS2iklsGORDctocnzkRUAs+2zrvgFhqaHAAtsAYlzSOQTp
|
|
gtfkIlIAI447LtIUWL1fIHS0OWd7YDV8GidGgcAkkNgilP5pvLn0rlFCPVNKLXSpZVGFUmE1/tQU
|
|
y57eN/CahYG0VFxutwtPlpYK5orGUq7/uver2X9k6Bsjv+nQmz/UFwuFijq9reE0ZUJPXmuFdb8j
|
|
g6FsKfADNmBoAqqrluH31N/uAI+j9h9rzBkGQf+r/PFxkm/Y/etZYZvGglSwMYGh5yzOSBJpvGhj
|
|
1DE4dixNe51vbRGR4B7uoAs7Sb4yexp9Rj2h3TaJa7Wa2Ak5xmHFvIjGJ/hyJdCiJ3G77BtufR2Y
|
|
uDGrvOxkrNr0M37oUbvMztuW1VLd6cSiyFWDY1ja7kG0xXfqUcbGbMxZtTru0z8O1A8uimr1KBpV
|
|
+dRZffuW/rTIHhiXydSe9DxE1SoONuddo0WoNPX3E/odLoArdH/vb/scoPE39e4gdpGnqcTJC0n5
|
|
Uq1TZcOURgzS5cqg0N1SMVfqUwpoGtwvbN8tcAbtXrPZ2K/UOHVC8H1eIKdgpeV8dAOtjnyEQHo4
|
|
BmSlNUX7wOZTOVu+XU9uxltM/t4a8GOxMohI4FFJtepVA4XdiyikUORHC55zVCdAcKgQNNphx96s
|
|
oHJWppPQRt3epbzn0trIrL5lHLVJN7Vzuji3905Z5N36JwThg4aKeycxN8STDh2nyHLgVKJFdqsp
|
|
2KRd096EPWOD0kRyzz9zqhYCJJKGdZ1PugNuu5NZ4BBgWxb5lH8/zWPyy2CdwXz2bp9SIhbXgZQ7
|
|
zQpdsBwmbL9QPOWN/bG4HH0sPsREe18d4qtbnaqnNlOAhCg6EQL/g/GyRKv7lv2KdGnL8NH9o9Mx
|
|
5HYOXY11Jsfc3IFtjudTLFFHZvnpM3GyTOUuO74jUzpwL6wmjucj5WLLT24Kf0iM1FqAMsBVTtk2
|
|
rVwx7g8/dz9J9efEn5P4XbkyClud17be/4Jo6WMNGANimnCxTF1I0+9Gigh60TvrHEWMrWVBKrmm
|
|
G7LuF9WszZUaOxaHr47CMBy42enFo2EsSFKCpIVIe8Z3oPXoR2aq9cl6cAB1xpeMgDi0ruPRpZNj
|
|
HX+F2RwVIissfLcS54kp/rz6doPzct9uva5Z/EINHBseH4vlV9phasDkIKtOptC+lnGFEVkn5n26
|
|
+3RirfcWnEJkZ5u0fizjVSWAq5R/6xPdHxokZ4l9EYroHsigLFfYY66wn8PvQaZ6yPFXFTraJv2R
|
|
Fc4lxais+U3VIC6wXrNvs1lOdEam927YS9tSEgF9zxyN4LsvFG12cqFe09ygOvGUlUKwhgUrwtK5
|
|
P7Y5RDnh2riul4WusR4FFbh3BX1TADosNVh6Lwt4pWZ+8VInNOCtMq9pxVavl7QB2SHJ06JcRH7M
|
|
vU1TsHWTuz2tbtGd0olN+6mrLXIOAQ6HWIstqOsQO9al48nZzwmcxJDdbhRsEfrxbmv3pe0ibxHd
|
|
c4NLt+te/pjeePBewr2KkGwNhbYL3alpYwH4IMdmCGQYnKG8jzoOvheAsshfsrkCbGd16HdOlZHA
|
|
CYgMCJ09GNDRiviRZAVxqcCghoIsmJRmt1WqNQgOR3cha8PipuOvbBohaXE3EAzu1KZdbq+09uwW
|
|
bTY1Z9RVt+dKoqD7rHx2LleaktVvqhdybKdOchziggbkpCJPCqZDLXXW9z8z7WQNEGwuSt3snUAl
|
|
k9m+/KDsUKe3B3vZV9JICf8j1LQEI5XVfa5Zpjg8ZQdvUxEUSQl5kFt6isyHr5oOyO8FDsiV5G9e
|
|
wTOSIpqGwyu8r61s0TQFugTP9Dr4gy5eAqI/MJIgCgi5yEtTxdalXQ+wPVvtU0J5v+0MKVGD03GI
|
|
nDPdsAWAVH6Sd/br5moyHLWRyIifbS021uRg8fqvuJ1LRdatocB9s2c+TvYfqnnghC/uFT4uPXm+
|
|
n2cyYCkTVMC9wtwfgM05cVcSaEmeLjCkO898AduN1ynptqPvpP9GBmCSMpsyEllgbyCeUFmr7j/C
|
|
mNjYhDfeo6O3Il02AsF/dBa3+Fdqu2V4fM0ihrbI6Pct3NAu/FCY917bctKHhKzwdjRRXLbTV+DW
|
|
6buK1+b65svbumlyp5fOQ57dcMJtWLiGyQ0k85HD5Abm6rhNdMBvZCyhe8c3JZZ7kzYEzMSTrZPF
|
|
kx1kXkCt8bUVYgetUABRsYGh8/n9sBbRb48Lty1yC9gKmNCvWmw8m15M+q4yrzU8017f/Hlje2tz
|
|
r4AuF/bD5XTsoG4j8E0hyyo+UqddMxgvNVOgL8VqAs/QAKb3pCe2rTQp8MowZs0PJD43SdXU5Wcl
|
|
mHOx2V3uiU6BZCXtBRnsLoWbGkGyeXBiJTksfGZZkzpyFQbI+WdAUehskQtqET5bphELTCun3hIn
|
|
Xhv2EZyDSn0oja02DSjHPWRmle/jfDoeNSu2HrTEPdIBx1b7SEqWqyBV86gSkgb3ZAZJfu5erqRI
|
|
DkhV/7Morrhk/ssUHNl55ERjATXR41eB7ynh2Nw/1W+pazm8u5Dl2j5fEXTvSNdbo+K2NtdTSy4L
|
|
uMgJSYvmHDAWi5zgHksN6G2huFi1LtbbbIEJ9iKJiW0icPpJ/BW9kEUXW5hGxeqRxhd+Epb6SRoU
|
|
yR9FSINqEGPWAbRUasjRbqMdm2d+F65GrDqHykh6ol+e/F9Nbinel/OE/x3NSGH/D+B+6Yz6r2Z0
|
|
toW89Nn/ziucnbqvONSsjEJf3uPp/mZL/d/xQEu4wbh/t4PkzqLN/6XnzP9IqWXV7LxZrcIKLOcU
|
|
nHWKmDvk7PdJ0zx7YrhKF0eEnHZ/cxWj2I95xgCuSOCKznr/6h5IOymn+DERxfEotM67fEw1qJNA
|
|
OJFw3DSihm9lPx4peiItdlQ93r969uSmeLtpnR4LqTrqzCJo3udWaAcGzrAXc8T3/l3IXC7zkcp/
|
|
829tZgvF5WYSXSN69EfaBx8TviqFM5uhJSbpQNMwvFEvTnyurjJmQl2+gF18Qq0reuHbrbWfqLvc
|
|
oTl7D3pVbyDWAcvqvETaAtwqhcVkB3C7Pi8z+nS7DBXKbq/57DhR6bKvTl6c89p/857B04E+maSQ
|
|
pplmLnV9GaO8lT/Gn3uj9tLX8cdBVomvaIvlQYYL0iWsDi5X0gwu81LchZ+epF3HutAIWMou1jE3
|
|
d2rlKjtGRz3/9pW/N2/trTpA56FRmynd8oKGtdKsv3hSFU8TzTf+/Iv+icOzZragyjFmR/dSxXM4
|
|
39+s7jr7nNrQUOOGdD9nzyU1o38Z//Osnth161pAit5U5aehQ5yhCkrEIAnmk5ppP+F1HJETKQgg
|
|
QqPED3QqxVPMxRgVnGgb1uikQO8mUumEEbEnyHnhKCBwpIHpjsdDjjEyDVdzJjIxkf+AwxOGo9pC
|
|
yqyc3iSYLfMCk/TlWsbu1nvZNjsffhT5QgSNJ1YQfTpjR+Gf6v5D2hUmobFJu7hkt0eN9cJF4GGS
|
|
hHAASp3Ir3Q9FFB0v9lmWbmUlomSkyb5Lm40rqTeEleSpmOvZfvmZGfSgEU8sbcnl2gK/o+pLK61
|
|
/yEi0Lag8emeBZFzDlkZrjAkX07jOp2o7IVtKdCEZ8NRkj65M0nfRqvfSfSPNuIkBOobc/7Ofs7E
|
|
m1VN+zMF9hRga9b5z56W6GgyZU8i6pTBWaL5nsqGrxP4q2v45WtMb35c7SKzUsFoEzuN4ExIWSnr
|
|
2e858KbOkFP4jqUy/CkXOuigNpd2+EA7nHjIbV99AfbYesitczrx7d0ksYzYdMdJvpGVqWkcJR/D
|
|
zMH8zXJ1Hs/zFyr4RujcnPmuNF5a7su+2JfqXufw5n7HO3Xp7/Q+uTfvbf4EJOF4Us3wTKtE8AFP
|
|
QsAZHbZnEJ6Ph+ZFdQWY0tMTOoTBw1xqJ39Jh/k1tfjJO4qpsQNuIM26+Ms7nb1v139ef3snoTUj
|
|
8elQROYTw0pgduFO5DkS5ILPL7gXf4gF7d9wDH1LP+d9lJttSn0Wog5GgyaqkECo+hUybI9OSeJb
|
|
RLQoYDRro24fd+xsvH7z4T2Kj0D7/QPQpwS15YVAaq7UjsZA0+PSt704ngIbowdgrKA69qL5j+54
|
|
uLPzltFzwN0W4YCugNliaP3opHdk0S9rLNTyFkPr9tf/jFFgkgF14mk0YIAPjmCZDPu2PDyvCBo8
|
|
iLlOUMqG0UEBVqTGmmP+lhNoPIBQD4TpWBJ/1mzZgUIdzEHwyup4g9S+6cb1h/VCsVPgf9DdDPRd
|
|
wIAzqHeKqI9yFoccsMlRh3R/FRtFv3MsR7pPl7N4TDZu3T5xizWFbwPZ8mwd0/btjvkO5iCkHw3i
|
|
+Mz89nTpr6bKM9FAl4aMxeHdbarxaQTbUxhg6cHd+thb/C461zoS9Csbev679O4vaF+LyR8cDSTp
|
|
e377eneqfR+NZ23T/NA2P5T3fl38WN9/VFHEney4uNhtfICUeMWavXfLyyUaidPJlnNAMm98Tq7I
|
|
ECvysl58AKhXgW3za7YQQc9/p27SmfNZ1cPutnbyJy7V0P4+kRgHX3QyNMaBaaSKNp89++tzSJeo
|
|
98ppTKyRxuxq7Qleg8tJYqQIzXPVPd2atY0VD8Y0ltwyxAdaLbFqESl84BLqRlUiRThcAzvavPAX
|
|
Jfndh24K5+n37BE1QlwOjkLGLxDAEi0lIdhScLNTM++jnjgTHykjbJrD4eRUYOsV3k/DchiMUWD7
|
|
yqPpIXHZCkftMBZ8x4aTpkDvLR7F5IKePS/FiKAlEVeKAkQDtREghA6C7NlxlVaRTgjUkgHYo4Qe
|
|
onYMcc8zW3qAD3WGBuIKBoIdgloH6MbYpQ1QdztDmqllNlNjItglL6UsL7sTutSwkCJaQMzW+yQS
|
|
WVvf3t35ZXPNJm+5swEvSh0MMXIoUW+BfkJ9xE8+bzrxhC/gJxtP+qMj/PPZXES0sicABGaEdxID
|
|
uL30W1mpSsphWFpJ7XURTsJn7a192rGMf5wUUcgTXWQEbid4h2ClkNe8TqkeY6mZ9bLL/BcIuviV
|
|
vusBjrsbnNaAfNAZy17Ht6E6ok0lSknYM6YgRAFDxB5CkidegMnXmfDRf23v7qt8gFrDamQ7I1G+
|
|
qdsFlTvOOuJhF6mijn5z8IW+LKbmO9XjM/jT/bhP12Mehyb8KJSWDtQe1sFdUuPKG2z2Hup8yq97
|
|
60TwyMeXoAeuf+5Nhe/JVbJtJ4HLdScxQlBEgI5QtH+LipJ8Q3oGtEUW8d0XdhFhHUAEduzPSfhM
|
|
cF2B220TcydBAA4gA8wYq0iQzMmYSIDKDoxTZiCk4Z1qpB02bDv/WPPWUbi3sMe0UMBcPJ72HfNG
|
|
7l71uKHnDTEDv/0RWkjaFxqghvGCL2vYkxExCJUR5Veo3UV6c05McTiPjASru0gOAeqabHiovEil
|
|
LecQ3A+VO5KcFPLwNKSWlvNIm+ABeWRrGzPsEoexDEUtkMyM2Gx92N3ZeLkuVTWaYrNOasX3bHYq
|
|
9joXhFQ4z1QRHrzCFcSpo0COTZLg+jFedRlpjhQ/yWZ1MLpSTMaWumD426AEh1r+P/XPP/H0SWWb
|
|
MPBeFUq/BM84YvQO5kZ+LZuKqy3KA/dxtkksOqcZCGuN2eNM6URGCldstc81bIg29LncM8DLk5bq
|
|
OO7u7AGDk6/tmgvZSY3IpsBmhc/eLR474RssLd9LOtoXzbqKaldctqV6AnLGbwEnwct5BF/yrHIZ
|
|
9CrNYjwzwJF3z6zZYQlJJZcLkWwYCSQzWSFfkuNXOBKaYfdNf4hKe1IzZiqHDhKHksnJ46Te+PMY
|
|
6VcPUXuo0qTpTMcCiT+6vOOuv2+2iXyr3tZdFNQE4nIcoyZ0LBZ6l6nCM8jRj+54jrQ5DobkgPJq
|
|
1dswsiN7cWqXaw/pgOj+Rg8BDqErm8YOP59e8W3B5JMqX0uWIyyv459qBR5beK7KGuU+I2vFz/gH
|
|
7dcsm9Qa2n27IwWIZhfrYd6QT56Zg13PcaKuUTDKeVOYacmXCLyWlE7nT7dXeenIFx9a/pXPvuBg
|
|
V2kOVHLnyHxGrhBtGZjFOAskR/gOwzVUUkibRrw+8fE2dChrPK8WurtBCstj88Q8Nc/Mc/MX81fS
|
|
QDMgQCosZHXjFISPNevwEc9p6/wba+giAchsZ5GbBCm0kcxEHrION3bPbywHXEf9F5+7o4mCPnTP
|
|
e0NiXpOzOEl0tJqYGB7NWTey4CPDMw6rTrUZHU1QnZtU2OnE3cacgbmJ1sBIVEVbB4U1yVrQmCen
|
|
ztvvVnSdSYb5w/dpcz47yVLs7FelqNj/fA3NMgX2gj9DnsFL2Ol1Aq+/PdJEgpaKr2o/JpW+mS6s
|
|
cDY8iQU0uJUQAS8ZcCKHwGgKehDwHa+HqTzI38OjU4xRhINuR80FgHctp6yC/i5mhD1Y7ext1tzo
|
|
3VMR3diptffvZBW+yauz+20t8Tt9yEGeM05whjHoTrfamY7OuDo7nQRBqXZTlhK1dfZlf2sHATft
|
|
yqYBhoEFVimUW09V+PRtqPKgrYWWK8q6dlKwCzlwASvp1yav4LguzxWUue3bu0y4BK9fD542Um9Q
|
|
VVsVMg2o/5fOmcyAClpzo85VUJKU1G+9XETwB+jHUYLCMelN2OJM0zoENgkKZAw7GvYgIChag7ja
|
|
uPFKO2RqCtoS4qnixLn3krQM7CFJwu30OAe/vbPWWPqrXK/ltBP4Pa42d+n7D9tvbY2h9BtuqXI7
|
|
o6Y5T4ZAj2A+xEGK6ZCYD1jj+G78wvig9JOtx0RbKUp3l1LfMyStlvnV059rsFS52i7o/6mpvjGF
|
|
f1R30RmEkHKvUHCLv36vC4Ur6ORN3sysv1vdeOvVX9JXcK0caWa9Twc42kjuv/EjYieC/kh7JGx5
|
|
e/31xtam1zQm4mpysxhcvwlG5r12NzqJeUw3IYirK1GN4iZ+AZEQZYVLJdOtTVlV3kjlIqahQq1i
|
|
pWwxQZUSko7vbv20bvudalY89YIJjPqxkOuGA8MAKTYwrsfIzOdNQ0fT8Kj+YtTrrNSP+gIGryYK
|
|
aetiOD7rVJEFlEBLCDiX1e2HqF8JCcel9nCWe8ShAcQi44nX3OGQ1EeULbGZRXNLcLoHLZs8lUKj
|
|
NKGr08kpUc6/FKXjx240pgsP4oLw0WSS/BxsfK5lsmUVqyoCVrX+G+b8xuwVr0DwN/sF2xLtzYyT
|
|
K5BjgnqP3gt+X6tW2EhO4j99//y7P+4A+wPfsUSf50+f/mnp2VLj+dMG/1xaavD3dOVx49mTPzWe
|
|
Lj95tvT82fPG8z8tNRrLS4//ZJb+wD65zxQ6jDF/evr84O+odfbveOd/o8/9e/VpPGZwB5QzRGUI
|
|
Lhvg6AKHgrMGa/oKG5XEL9z0Tbv8TCzY8xFjhAyiUXw6nGi9camhUbVYH9a2vGhGZ1PRSMXuXV2R
|
|
N8GQ4vvCYDWpMZBRfxQNuCj5MCnS2jKJlgErYFJBnHVV2KKo0bPeYQ1AWBjkzvRQhQ+FZhApRz5l
|
|
xfyq2KGa89hIuSE6KDrnvXg4ZrOaFISHCNtSg11sPaXcKLAt7OfClqHu0JF+6SpDcv3ZJhdMuDQf
|
|
3jPwxfuttxtrvywG9eahE11KL7lprUPMH/2dhBVTprHanpLSsbu6/Xp99+Dn9e0dOu/bv9Uua/8i
|
|
RfF0OBhOx7F5tbW9tn4gb5VZUOO1CGejyxyftxi6sKZqVQi836bceFoFpKgdX0Xa5cXVMw9HAtdK
|
|
IMKRVWdQEW1Tzd7UZDkkGmnJaiE8pewJyC+g+SiZYUw6ym/KvA2SFsZdWH6DQp1MHO+JVI7oCA+W
|
|
oyJ0IpMbzPvEmkU4CssWzXKFhhEBx/WK4oSwuCkLNOg1tbX59heNgxaAvxgAgFp2y92vJAjt5Jxr
|
|
9nGBv/AzDgutSZFq17nD7uQC9U4sfWPqdWRIwYgyzRXu37/vxJgCusIYmz0kVDPNdxXs5PjYPaMl
|
|
hZgwAuwrWwWtzCtbH4guBuNzRTZndNxF4UHElQAOkaQxrAhCCGQRHtqBIJoXVhDugFdlg9nEpKcg
|
|
Q2yIiwsMJ/Zm/e1LAPLilTpKfjERxhnkPX9LtBlGF0aV7oUsMV6jwW+fdMnkxyftl7XeCEWzmwEY
|
|
Y2Ij18mWHVROo98I6id23aJ2THxVbLtXXLOYoZgyEEwVFxKSAp6CdZ69Vx3tHxArY3PCOTXQ29bW
|
|
ee2V0l9vr9IXGtbkt6lVo7QRxWhj1Cdl867wiE1zRKUdUz6cDiZyoxRIZ1TkFr0bndRRMp9B3Api
|
|
CWQEUWzL7gBpTmIQK/pyYQoM5yYWMPlC+Hd5Y3utyiGsKBcVhRVtXMRSi6ZaXw4D6XTcTdlQoxOJ
|
|
DBcDmuH6Khr2hMW19Hs47Y/ENamtuYVZFKaik4PGADCHE48JfB1R6ezR7R6hejaR7HDcAUbt3WoD
|
|
u/KtDErA1Yjly8Np72wCB7eF1OSOueOwXY/H5wK7FJ41bcvWAvJfMgFhtJ8tcXNialv9sLuV3GfE
|
|
CEA7xqRMAm0eRByfim3lUsZgVJNsS5Opc0r4h5b8awelbo0BMFz9PBrXz4YnweTQ3zLctTfrLz+8
|
|
tcPYQacQxc1sn8OalNnHyXkHuuTUWzmdpUUhOerUj1s76+2AH5btk03Zn/RuUwiCpArwtxGNgnIX
|
|
MgVcFxZ21t++Yo8GVKlyp2cD3K5+BKLxztYHWoi9pf0bgOQBqfyiU6kXyySldWffyI3yQgdN4ltc
|
|
XaBeiqHN6p0flx4/3mu0Hi/39x7t8x9LfWNtdg/Z9IZqKEHNV/vM4/7evZxnzMqfOUCp0+vmv6vR
|
|
3/tt5nMcNG6hyj3zk3hF24kYt1DTgbGZMPm+sAB+y3CGC03MkiP+Ztvdf6OhZwIyNDl1u0i9mVbL
|
|
B66aosDECaRWUvhbCvZyTXDOMhG5io5E1CTlGrqKuMdIzd7WRjP5m9u6A7xa5WER8HDjBhs2ZOPp
|
|
bSrTETzd1H1P88EX/caa7SX7td9sk7iA/T79Bu+RcEM32/b79N5sthv2Eu3r5syNTTd9cxvwtgpD
|
|
/e4kgs/AlEXQqtTMh0E0xSk/Ye2j0zTPlug4+OeU5iqun2KN2RWO0xsJSma5+vhbo6ptr79dX91Z
|
|
3zn4XzvEEbku2SuulCrnsXSdkba2Nmm1uUiR2KyARIfYOYm6ssXmINZJRip2FnQWUGJiOGMbV8QM
|
|
iq1l7KepNKVKABejZsqVYJ0zrWcNQdFh1CcmNNjU5cZxt4pKu04G4g4zAushTD/46tkSzygrisPB
|
|
ZR8n8Or7DbqhQ3JKpSYb2gp8fmC1gsJ785RbozE1k19dcfYHZCiPAIP6dKmQqiYVRvKn+nRt/vOf
|
|
xP5NaXI56rbbhWg8ji4LpTwTWaqve/t5Pqsfhx0EZJFoJCXmPWkYIhjJmeaFE1JetOk0A0iS6iec
|
|
6gQxutBut80LknVWCkbtjwKPJdFPXkHmYeeytqDvOGAZ+EAVCOegoHeumBd4kZ/ZxEgjsNPjgtjp
|
|
IVud6y3esi6ovJuu10K3Z7I3uJpudDIzfyNV+xi3VjwL+fnsB7lsttxSKFLnCzNvO+va2zC0/Pss
|
|
TWCe7TmHzmRumEM0YDTRmA4QO+ZSbW+fsyHOSAUr12xZ4na7OKnQ9zUslqnXTaFQyrzHL+5CFPKi
|
|
fKcOpN6Y1IVutwWSFLu51hlHxxP9hjtiexbUza0IAb+/TbUFebNyi8OTiatm3ksGaOH1m53Vaq1W
|
|
A2Q5A+SvFCyyWw0g3zDCJCDoBaJ/qVRNe5Z4WmFF/n5aW1rELpEi1oXawslpHB3YdwZ0nUfQEtlM
|
|
/I36Z3H6R4iIGI4MK/0S+KHh11/KcVwJgmQ65jMcCV/+Aj4TMMhk3xVLHyclt/nC8eXuQ7o+czsN
|
|
P7eTMAO0XlpM2q5GPF+xefHihbYThO3wZHKk7hXfx0UUMiE7uJTFv8G3HgSOq+XhOpaDmWOfSSqI
|
|
/1p+0b5eaV+329cvrleu25WS8wyW2ukmac1DrsPtBWwHVc1sdD1NzZIWZmp5iZP4aIWo4Si3Pljp
|
|
RaniMyo0mrAqNJtX8qv0gjosT3W/4KmV4F18uz4896ngXXd8SkpMSrIUnkVIZdBRTYFasnOY11BQ
|
|
1wqfchnlbysVPBBGYwWRV+62oCKU49kSvhqsLW8IW9drBjv192SGi7IARlvUGfkKzDSZCfVYWKPX
|
|
0jfl2vn0bNAdC1422CLx9r39Cje2V0REdXLLWfdAT31UJ6Dp53OgQrcQ25Y+2xtivYZdMkQ5rcFJ
|
|
BU3+bRKf53HsbynZ3jcvu0eQNsUkDmW5BpiX2JycDQ8j2PygAQHNWIpeiLCNekgqfQ4lZqOv5kBR
|
|
NkyZzdvM5DHobTrMtjYXzZstWPwaajGiNzIlLBrf7CgWt80t0khMmZZTahHH034fPl0L0u/H7NAL
|
|
Xv649mZ18/W6KS/VG986CkTG1AZuqwyEf8VYwDm4p/yN7UR7iSS0GG6sgwkJDN2Jf4Sx2ZFnJ/cw
|
|
U+OPGFFBgsT5RSL7il5w+9xgyBAl50CuHEAKdOdZmFIBXhlqjzmxALZf/gtSD1W8PsuMGBzuY66y
|
|
rfrpjY1D8J3cwn8DPTnDiofHx5Ira9/ABurLNszfqPamziA/LSrNrOwZny0QihXA0AKJxLHBzO3e
|
|
vOGJORGTfHcnzivnIk9q0a4rCa0tNm6AGjeK4knXVGNiNdWcGrr+577ZfLXSXpYK2dZJwTrJYOjE
|
|
JKuYXAL+MFbEXQhTtdw2k6We22d+sbE9X+aea2Wvxi29DqnOHjDuvUKy+Y/a5Z/pmile0YUbxNLQ
|
|
xN9kGwlCYPRNqsO6g9d+rYfpx9ye4AlbyA3Cy/1H5qHt1bXrnn+YlFT0KudqdsnRra+vpMPicxdJ
|
|
b062XuJzinuwc8uE0C4bs5AfJbEx6lPKm6O4O3f2ibiyCwCcIful7UKwKOn0Cf9z3EtvVxnY9cPs
|
|
ds1ZPZbxbO/82oHMoNXHMfG8hTnpk3ebXuU79t15RT695IIslQczwATQvp0itAmXPPaqS9uaiU/w
|
|
uQ0yQ6oiVQgOj9iVmuaT7mFXdPATvF7iPpS2zsCqNQ2LnTL0nDmcHh/Tl/3oM5GMNtHpdWEB2dl4
|
|
/X7j/boEcDnrurSlxQsF9gdUwkl2BT7PWfZAwUXSMY6jI3SRr7o8U28zHWW9idcYFfw5F9G4E+9V
|
|
zb696ax7HXxPVO+u2C3HA07vJz5Vg3yQsBcwUR5KGSocLtfubzZMSx1Ue/BcixsqfF/COYAJ4zed
|
|
nFjWma3xY37TiGHOeeXcMTm5IBiXyg10wnEXZIrT70vGV+ZvKz+kv9d5yFmdWeN2Bbek2iMgJUox
|
|
8BMfVvcf1usWI1UrQNrUz6NG9fHSUuoQ+SOjyFc5GCSyZW9QNbaradCek1jq1LNDd5E9rovO4bhI
|
|
Ty4KxsBlC9n8Q1L9BX8NktcjP0BHwg0GtIW7nQqaV5fot7Zni7h9wP1N4pq7v01WUEmRYVRM95jW
|
|
mGvcnSkcnEXpmo4k97PLnmJXqsPPMsqwsxn1YNmpX1Dn98ciasg1GZVoRsAiLTBH5xzIaiRwTuB1
|
|
IlQDj879SgRImp8vaONOkbStFVTukXhlDhU4YIoedC+kqhavjiGudRTBlg7PNGRmGZa7nzN5B+cI
|
|
7Tfr26+3Djberb5ex0Ed3HOV/NWsnpwejWu9YT1wqqpg4l4fPnTTPC9eTexNkl4o1KTMAjSlEJYJ
|
|
cNuoNxgg0oupdjC8QMIh7XI6FaZHcKhpYwVqG/NzU1DlTtN76QVjksPPtbRDXvgIyEJCtLWtcrd2
|
|
UhNHnlSjkpq7eLYklvKSAztytdaSIDZqD74KDc+1c+7Spel3h0ZM4vgHUAO6wyQqg2hWf7hBCBtP
|
|
lykXr2SdbypcvkdZOhs51P19pyBqDpgqXrnVuWm5+loJO2jZcA7eYC1mCC0vAkFCNlpCJ7urr9uy
|
|
pi3sLGR0VAfDaqc7klyi+Zj0tgDb+ubPB6823q5zoVP7x03tMPpcK5a5d9WpefTglwf9B50Hbx68
|
|
e7BTyS+bmUzqe/oac+qP1p+7ezb9ieek+k/weHtjDlpPCNCf5FUYSb3SCJ5Xq9TvlzSKU6JV+sFt
|
|
k2jhd0Iz6TCv0aVCf1jCTU+WO+u8cTkG3mS/h/UJhyFBrCkFby3nVGOshBOSV8YvmJbUNDBHAVHb
|
|
usdPTbbmVqoyZ/6J6KlTfBR5o9TpIr2HX1e4fREQl5UsgWwgrYqXCaCSQdZf/gi9il9wUwOCQWph
|
|
WuyfLVmgPn0RxxOUarNXjb/TRKRgXhbspJfLoad9hcuHQ6qak/XKdPB3midJ52aoI2Sdc0BWOXSy
|
|
38QknUVH3WSpmT17J6gp7Nji6xyZhUYl4sCV5ZsMLWvCXCIsNnyHi/Oi4/ByOEWRzjP4izu9OOne
|
|
IWlpx2eXXi8kh9UZSLitQpbidxAC5tgjYxrZUDHGVRB+5MbXOWKOZap0Pj+9Pb1ywmrKDB4jy5SX
|
|
rfbj6tpPH95zuhrfhC61/a/rtl+Wn+sBc0NfTGJ3Albf21KxadQKW3Vx2utU6TnFNK1LOohGqZQk
|
|
YLKSgbQJQUM7h4k3O5W7nr1R8s/tn+ktT/P6fpT/XBFzIHAwp/1hx8Iq8rdZ45hMWMHfKpKW0+/G
|
|
MeQWi0cq+e9a0VHKHvinEcy+QwHJdjAjDkGE4R0Y3/oM2ThxfCkzpZa5cgqRtRJY5wT5E8a5zKxK
|
|
5UN52Jvd7OxkbgxIJHV1FqnknXS+fm4hUSug/fQh7NBt75JjLB+iI1sxc46hhncal2Gs7iZvoQc7
|
|
U4BYfDCeSPl+a2f39fb6zsGHnfXtiib9ZK++/LEy0yjFn5Vw/uzU0Urdae7mNR0AiH7ZO1p6aNmx
|
|
2wM+gL658G03jEKbIvRaIc9e4xuQ2A4jv9HMxVZUJxGMZV8nV+dQwa1skNb8IupNDiQE9lIeaCwv
|
|
gayh/YzGw8Nu3jnkHwyxRtAGTF7TcnVWvLPyaDjuuCrxofhVKGKiGSHDkyBHdBwS79KtH3v94JIe
|
|
QJPiSrG3idBJi9aSxWYEB7YAneWQ5IBN6PycMonLN9nHdtffvX+Lows3ZB4vXgXXb24XXeAd1OA8
|
|
jP1wtvCsXEzlL1pwTt6vVlkSe7YkyxcKX2IhWTelNc9AYmMEIRhdv7TmEMSncd68dOt6zdEuC1AS
|
|
EX6tiBCT4TWDNlwjm+bIM5abZU/IW4bZIxQAAyOI7CCPmGzPDruIfLWEhWXkYTeriLDtRScD4jy9
|
|
I3tYIr4PmFZDEf6taonMWdHBbnKkhKXbt0d2wxVti79rz93L2XV/XcpNVwWAxmFvAC+inOKxS33R
|
|
EP5yYdYKFirUL6+9oRa0GJASpDAe7kSlHoh9Jyll51K3OCGAuHTiX/F8DnL8BxB61mjHymlDDcUp
|
|
an0yh1r/aUqzhlTK4usldLR1ljiHxl1AQ8ggVaDtOPNjS7mx1aLcLBSv8OuNx8i+gmrcJOWhWvlw
|
|
0wxuFVZZltnMEbTSHfpiskumKkt5mRtDTI88Dozo1363f9gdqwWHHaRsxFEOoWAvEg8PRYqJTo7C
|
|
UZdz2RLMt9Mhs6V4PB0BQcYcXR7RF+UcC+VFRP86e2RFA0YHCcQjqmf1o8GUDodPKdVNU23UuEPq
|
|
jiC4MSqWPOwQK+wokrPIwczH50cHAsvBsCligrG2JZ3ZHIPMnc0Hwgmngyzzgw4wC77FMkDoXDn8
|
|
z+zo8jWVyMFKB9B7/465kGWZIP98Ohn2o4mgb+drwLoVFVymNzinzdQ7YWNWLU/mzwz85dbfN/Vp
|
|
nWZlWKYwJToaTNwsWCRYNwU/3AjArTc2d2jwkcGDtwLJ7FFv++OSeiIlUzelWdNrFf4w87wh1vuf
|
|
LKdkQYbUM5s9w6UoYDu2bInD/3vHnPEYnURgEWHqEMKKGI3XiUidce94YsrIGxqOGO1l0QgqIYNj
|
|
kvxPEth5L4Z/yNafcEp8bSGQRqB6pUQwZ47mvq+IWZoN0r4F2lp1GwVrjF5WY/TjAqc04ZzigUWd
|
|
DgNGMSYet5DpQcAcffXa3rmTaNjUdjt1oe7Pbs0XgZmVdn+bjKOjiS9jOvkSkIVpvSqR/wXxMO1H
|
|
DdRah3lI4721X551z+qS9Fiu5xRTl22Pvqzadqoy0Nrkt4njRzzh1altV8cHdQlXUog64szUofL1
|
|
nOoWwWAzjQTnBC904oQ7QtDAx0d7vz7aL7lnnbTXshSReqC692s17/48wtHpta5FmzA8HcUTkvH7
|
|
pvyoeMWduqlXIfbz+24ksLfStGmYxSu86sbtvsTugWXz7PMpOR87PXUQ2q2TCErIO3wK0y9XMXBi
|
|
xefeQJFLn4p3AUyK+u27eMygvYQQF+EyHMDK8asla1F6WBKG5ZsO8J2vqj4sBRGug3YSmeAKIBTL
|
|
ZySFNSahOauOoMQgbi8TKztoF8vlgXlkGhW6WC6bAZHaUzVcWsI6TiQVFyLpfrH9yeuLS7Mq1DFF
|
|
7AV4OLtDX9IZ9/7Q57rL0QHsZIIDyqa7IJSo359KYsT5P2q/1P6jmSAFsP8ndkesdQst3Bc3k4aj
|
|
s2dpDCJIwGEic0x6FBsv8TpnoHKO88RDJfjufGDwmXHJ7orFJBLK2ckTly3c69bsUDPvObGaergg
|
|
iPxdTea1YkoU0xmDtmPrEhW4d5dZTW9Ry7B17dYWaLIO7Bhw8n5BhKD1Peb7w6wuweEheTBPYrjj
|
|
/AUa2DmqjO4/rPihcUm4Sq6VhON1PHeKLLvvy+KoojICOkrEaEmsKC1q/jQPOa7U/pCKMGsWooFI
|
|
WTEaLhBG8o1f1JkJkz8+At8h5picoC6pFetw1C7+4PyZDG9p0eBc8quuoq7S+Ciwpy5VNCzbR/UT
|
|
mdmDAddV58VJMmPDZwJmhAoDtPCcO5ugGJg8fPXFNOwt9zReTLUni60VC2wmbrVqSBGJWFOMjKZz
|
|
25xvRu8f2lS1VHOQerHnJcPl7KzK7WiqhKTgCUoUMYi+RfyLczEwB2p3YCt7+dapZCTxzC0O4OQj
|
|
r9tDU5kd5+msd3YpWjlCPBBWIEvS3KdMWA52xAw/Q/D2+5IKYQzj5JYrHsKZpk17GGR3p468mFlk
|
|
CIid4E5NWHVPJp7hVMM5dQV8Ep3RbZzUvbOmj+/NqH+pR1MIoFbzCMzD/phdASBhJ2LRt6yatfGm
|
|
zMMQ4ZRQTjrRpUUnEOxaRWuJkW1wXJWCNDhfuEUbepEUrJtRj4AoEi334xMr9GdKJwVcnm8P3XKv
|
|
ktDubIkcI0WTAgrml9mYHwxGNi7ytqs7G683118GqEC0g7lETFlgZABdMmC4hXjK1VO6KJzRVGyf
|
|
l5s7ij7q16WRuEGOEPzLUv3Jk8cVpwPbXodVhGT8JL00npiH5i/PniwtQYTJHwbpkhbJyFhYUz64
|
|
yxlw02PAmqIzjgrtcBSsvgOJgBia5qgLzs50wtg2VjD4gRrGZKV5eyoGlPqXxKkG3EKILqtFyc7j
|
|
B21LmbNEnrW1ipgccvNxww2np6Z9QO7I3W4RaohwiHCy2bhDf8S5DoLS0JtHCSqRi0VSfBcGji93
|
|
xsMRBLHDqpYyol9jGCIm8bdOC4EggK45KYD4m4iS3qaGfKrgLWxQCEQ3dd+tce4+CU8c183XIDY1
|
|
q8vV6Iwkxa5yemmHt7WYVuggGqFKU7WqcaGlq6vaBoer3JRYAKkK2lNoGta4y3QsfhD1w881RXxL
|
|
IgNSAT/+TblBe1fWsYcvxQCVUzuBJ8YfFi9o/uA6GFnqxXcanScAyDwqXrj9gzcK98Q7j3hKFBcr
|
|
djEvZXlxpZan9s8IKRObvhdJlrKOpY3QPMIcEwr3aFv2ANZJOlfOJXgJI4FgwSEkFT/CI/d9X+Tg
|
|
lCeepX0tAb+Q3iW+OeKShXD13H6mvSvrns4G1TWxnrC/VBt/rXgeyLyouJl9yEgIQVcUQd0OUAyA
|
|
tn8tPbryrJqyWDnWzG/JbgKgvG/ctuNcPqRDcf3DxktT7f6ThD91PPVoPmHu1YovtVAWSSqvyCRV
|
|
dZJql/2zgt/EpoUvpF3tAQSWcQ65P+3h7wET69znUCk3q5cZBR8YsNkG/vOfMx+mS4wzxT6yjrF5
|
|
Fw6RpOKADenstwrs32FFeLOxs7u1/UvbhnAsSpzVhXUGKDz/McOzpWsua6Cr4QVGEI6NNE/qorDD
|
|
LHJkqXBiUzp+z9QtpA6+npYbGPfZlldTw4wa+TQukaQujeUTeobrqMk1mQFpZs0ig+7kYjj+DKlu
|
|
NB3zIi6MTg5OfCu3pG10Gcot4rpNnD8qRgu6WasDZ4RTGxqTEUY0clGmced/v7UbUlF8i+9fH6y9
|
|
WSfqIGkeFbs/9ySsrchh5DLpQZAIzXttlhSjs8yNMG9SjuC93n/3lf9yOIiKV40bTlrhnJoJTOTE
|
|
xGpZLgAxweoNM8UE4IRoGhInfZ52YRS3oNrMNhGnJvTMliCRnF2OscicFpAgZV1Se5C872vyQeXU
|
|
kXc0JWcrCeIxZTX9ecYoJDOHaVV4TL7xnrwWNEGG5g6yPFXimZd+Oft8n5F6iQlsF37+8HZzfXv1
|
|
x7frTfPVuZeVTPqaLBTTkI1m4pSXHCee9AO2Rwe9kZ+qSC2J+TxpKKjTnRj6ULrjzlmL6ZI6Qaqy
|
|
Typu5Vc1TMLyREQUnpM0h/3dtGmEHCjkMKzs86r494YiCzElS+9kxqypIzU7xSv8vGmlXuxekLw/
|
|
edKaGZC85eIlVJCT/QQ2geDmpmswBVaZk78U4yiAu0OxJlOglMROZ/h0KwkhXOH1OLHNTWiFyA2f
|
|
UhHP6yDNsdwxxxHMPKbgJtvOoLz7JqCeW80NPo05I0OKbG6zI+jYuUz3bOsBW8eDWth5lUwrXhQJ
|
|
tpJMETedV7/kGJADMyuXHKOuiRhn8LhVn3MqDWmh35w6R8eFil0tFuk5XZFeZkFJXm68erW+vSOQ
|
|
pYzMK5Z/U6kkBEA/5Hgg5j3jcMikqNybkaJCWrJoxRrD5VUDTBK4pJSYlgmtudJ/4jj+xAZgr8Fx
|
|
twqIfOwOs/4PknE2Nl8nzS5q0o5gc4KBcL6ixYyzBv+h38WX3cNeNKh/ABLp1MSnPdI7lp4/f8qy
|
|
ZDO+jNFxkoHG+mvZc7F8ku8+Vbz24GtRY4DU85UyaDzp6LsUDUS3AHyeuIl0X1NzJ5iIYDemECCR
|
|
a1Cxsmva0f70ae7Ns7y8TL2sAAKFygPVM4GdbvfB7n9UiPSIXa2saKveoHcUMLMjAhsXzaPDlEeO
|
|
kmZdLlnMUB3lw2l8eTj8jSYJ8K0iGyEwZeKvM8pacAyFJGHFUkPXtWze7a5WGFHR+WYlxAjhLEnQ
|
|
YDiLExerxvHNKysyDJa4fU7UCT0kbqoyRtfgqhOZvoE4NPv0ExO5qPxtFXl+gMhSvJKM75uM4GHz
|
|
ue1xbJ1w/lls78k9i5PAKGfNE6uJZUbeGwpF/yiazRrcWHacvGwhN1jut+iWGh+U1PZkJc9FQdXM
|
|
hotO6upZOC+iqcxJ/5PUeRlyco7fVLXCFCS+0MJ4J7ggOeNpohqpjZhXFarlWrIjwgkkkMG27nUn
|
|
fHlaXPjCWZUTTgQK110nTMS50gRSLx2GdSCF6JzOm8/ZczmDeHD2V9TlkoANzHVVxfpY8kT2xlsS
|
|
x7wIbE80vNv8tESfGo3OUJE9iKBLx5NLEJ+GCehU3tQ0Y5sV2RlzmZo3Tx7LwFs4gzymJLji5yGb
|
|
NByDAYLfqkD35ceDBm/i7bk59KifW6/lyPy2ulqC9JrJWzXWMJ3UD3OiRpI3PU8VvSNfzYk1YFPK
|
|
mtgXJgAiFTHASxO2Z3o5SfZlAwh2qQsiKHmqZMmaAVxIRYUzDElKBO0xmj6xNS8CgQNNOCbGZsIK
|
|
0mbt9uPAqyWdBj5i5pCCIsLMD4898TgXyruVhDrOOmzyEUFkNp1Jo9OddMd9oGFFNkrYBZm4Q6lS
|
|
yxxL3jF0b9ZBhIuzRp7hGKIUKpflJE8J+VCN3+31Sst5/wVabL7Z9vdxZOHGgd7kaitoByXaNc2I
|
|
cvlQXtaKzawdHpEwz9kRXcEEQMpmFKOYCsksqI4AKbPMwjH9v5TSCxlgLa1HYs8jAIPr2UkFknjK
|
|
1bEFlDXkBbeemY56ZKN4Ri3eCaac635weXD2fOdobnnzbfzO0p8pS8R4RU2kW6J+aMGV2Emv8JRC
|
|
KWK14dXG5ssE7ZuzJGKWRGpswZS3UmMM750qBrIYTOVikA68mEHerrC5EpQLXHBomT7IuOAVDFWR
|
|
kMRJWmiSdtnty9VrOj0eSr9l4cg10JgfwSmtQrGHMV7RMHkLeqYvEiy7iE2vtQUGW+CkcceeUR8S
|
|
KgCzNh2XlAh88QI/YYEWwT+YWj6SUWWFFluRFWReyxJ7x4DpnDtZTyonWmuxrrDMNKer0Hg+etjt
|
|
NxxUCC3LTYXMFx29FmOdZsbOSDhmViS49q2InogL0Gof2ET9bsTVhMDPI1isp93aQlIywYeQp32p
|
|
dQ5cwUX6imeFp46jb589eZI3fYl8//fxEPpX+g5TDqaBo+G1zGlqHoTM6WRV5fCrHCjJ0uuyS3Lt
|
|
MD6O+mFKrfiDQ+CrHLWU8exH3XGPlOCjeuMpqgCF33H0StCMNYXev8d1qOLTjwNW3lCMyhQexAUX
|
|
yCCmUq5kYAtjhO8SxHh7e/AWWZdHv33hY/ZoSGPWzwbtuPuwaPfNGxHPlI+Bn3nFjDHNfzAXSU2i
|
|
bb+kmVRIE6xyibtrfGQtDPPhONzr3f0kPqrVwIaK3zX7mdpgcx/OVW5AMkJygY9zbh3f7U2pYYt+
|
|
axlg83bisna/OfTkI9Au3rYmpqzobw/iSikrJ5JQFsbPhXsicgVm4st40u139GfY55qdrBcv1rde
|
|
Lex9GPQm+wsvu1IKl6TANhh/U0LhbLEwF/LEBcNwFGxsr6kPcWGVAy9EFLCtLyzs7chv+wu7wK4m
|
|
Fs3F49Zp17A00c7UqjNhoNMCuvc1A5z0+iSTzB1eUohN09UaT43EXsXU8100sL+wNViLzrooAtp+
|
|
2Fyi9V9478pAtwXmZm9DuOb+wt+jwaTb+fGyzW+PayJZf+kY7EF6lyXKFOv75itBLO0rB3DLErzk
|
|
FERf55cyeHlTL0dMeua3iTcN+71/dTsvu2fR5U73qN04/Yr1kL5Due9E3f5wUCVJeRh1ZtwjvmiO
|
|
d7kweUR3pyzUux5Cc18cTPRdXsseD2+4Uv35S5vMRL+meWberJRld1W+mF1mu1Vmclg0d+WTHIyr
|
|
RovB7xGu8s7UnBPhTqdueLwma3IL2tW8tUvN+JeTiDe+ucz1iptbVOZycysnSN2fNxp/492lyLB6
|
|
NiVUc5bOUtZ4lc/d0YQDhNLCuaaPqJR81WhKVcobJyjzn4IJbYMvLFURY6zoOMTxZi9olTG9oLxN
|
|
r7kAXs9g1gp8F/ZGHLrJi9kGp5eUgityyYrs9uUDd9knd3v5YUVo+wPQTppeUdg9Hts1DeNagSZs
|
|
j6755dfa0LVrcp/3F++t/9M1b79/ko/aqf/Qd8yt/9xoPGs8eS71nxtLTx4/efwnuvr8ceN7/ed/
|
|
x2dW/Wfrv0DRhQ4dWRCkBCWC+SWL8mzZcZYs+G6lrPKGK8N8eOklXaKcRRKoaV+gxaIvxqgNOia2
|
|
Sw1wl9gnIB2TW2tmNzr7HDtIO9h31Ak8HHEuJxc2A5osVxjrkphLjZUby89rS/S/RvPZs2fPK+gH
|
|
g4HyuEoMI7toprHFERlFcXwxHHNlsxghuJO4zrfWcEXKT3u5yzGb9Sz0otRDMzmAjTNKvVJzAO6U
|
|
pA/rfOI52V5/s7rzpuWB8YYgAwwC5BUolbmHFOIQM067Z6NPrnCFlR8wN7WZ1Sht4cgvqEj5vabk
|
|
nJqSXP00jQUjWervtnZftlOIc7X+cNKhCZ3ixA3MsaIZ3WVfSphumfdn09tzFVphMYlwqBcy19VE
|
|
kvdxlBsvWmcP/Wa1+kVGdKGbpigf6ApnG4WyzP28BYTcji2osmAkhH2verxv9jb3w3t5s3Aojtb/
|
|
ZhQzMxj2BHh8goTFlrMRcdI+HSowb1jPVM7HhfUwTDyHjrrS2GHQ6IIIX2aP9N6Lawg2fgf5Er2C
|
|
pOrPKAuvGXf0TROpaC1TwhMlzleJnUWEJO+FBWEeU61GXHaMQx0fdtePYWOYSJu6/TE2Nnznfz4W
|
|
119u7G5tp8AQ6CGQ1J0ecgS4YGz0WO4sitgt0vKiARnzjFra4NI9HoJoXOH2xMZ2LVHl12pyw4d9
|
|
FqF1omxvl6wqV1ByjKZYwqzaO4KP+K94wpk/1rmXtY5l1vR0p3s4hefk2q9SLp+YGK/W1gTpcQlp
|
|
1Aw+HpoX1RV5Eh2wofR7gjN5bb1XaHI/Y5cMX0HkxI5jeZeUiB45S0U1FaWfXw3FfXa4EVA04zJt
|
|
bu2S0nzCaJtcbB5XFKsQ0XSd+a2JUyxyS1VmlnLc+02BDWzmQKSZBdNRhc6RLeo9gvsxtwyxjvPF
|
|
/g5r7gucICukMtAmjXkX8W/IyIwmHOnHz8NHxJu5wqD84GFVZnEtYfRxeDoj8dW+hb90L0qGc2HG
|
|
bPNJnlJ0XIWO54dBsccj+/ALL9zyetA7+kwdr1bhG71lYf1SseJb49ZJAuJtIRlSXtrqLSv7nnqM
|
|
qNU3q9Xlp8+M1yumHi5ERb0DTEmUAAnPb5M59mQo1fd6E88JybNd46QSqbSFAePS/AaZDa6qA9XN
|
|
MeShw+Hk1KW0tESgkVbntxgKYDFv/5FGUtG1S24cEyucUQd+y1xWNW1f0GRiZNEgoAcJ/VzhFERh
|
|
pcGyHrDzW0QPYhFAnfBpE1i8NWawPSaDcV8JbMFYapWTZTxEnI89W9JyaTIX5awoSsf5O9k8fJKo
|
|
WMvX+WFwKhdpYIssJB9Fimf3/5kc2/TAZ3iLXyjhC+omCP+QaznRFuuNro96nTFvjXt46G+Q+6+j
|
|
I5YE6JmOHm377nF6F0Py2zaWlx5DGm88rv3VNDomHkX9+bNd1joALIki8VnT9iKOEF5dW9v6sLnL
|
|
IajTeNQFSg8H7cxv1EPf5o1EAhUCKkropXB8noQS2hVUvG5vbDbeSxhDReekQwfEC7ETrxDbwldc
|
|
3Fh+lXb0Mh89x/RWs9eoPk2JO3wuGA1cxDK+XH9FkqMcQTjy+jT3KGMBAQ9gSMlSuvLisNYuylTz
|
|
/Zs7Zmd1e/31xs7u+jYtMrwDp7RI3fHyLfONXPOeajbMc7CHcTiPh2fg2oDmwgZAcR9sT6JEYD3y
|
|
nAATCSwTDnyiAVIgdKg0DbWTf4FhOdlk0SKAi9mWRQ9XkkHPrfldtcdleed/v+1pNDYzyMjCGXPI
|
|
FmQIPswUyXx+o3xIYLx6KGtpBRkTKgiOSTKqJtdvYT+aXmD1OmSaclC8pwzTdyTPHPVGOCViwIPJ
|
|
+c1QIhZ0+AUGF2xhdynSiW+ycBVreBrCpuMczPzbJQGX2BfFFuaq/hBFf6v6xtqLSbyyKBm+RxoB
|
|
34tvWStiFCQFExvr4KCMzqBYqPgbu7gfliziO0+pHffq6/WDjZfrm7sbu7+061C96pMh5rX2uXvp
|
|
rBnhVNZAXgtcwoMGUE4iUhasVdbaOdXGCXPnrXZOAPxKKfTcD8nUWmY9K/ayq4kUVD04D+BLYA35
|
|
jl4HaLf2Wdb+7MN3SJJF5DjukiifMGVWbDjdzt1yZ1XH/tlWJ/EJsMaKiWwEv5oLJ2AHtg5JeHEx
|
|
/q62xXB8gFuCXNAV6yLJK4ORAs0LijnkZNFr4lQjwFcWmDNunXtaaYqHx8IlN7LlM1b+vBw4IvKL
|
|
Scgm9hO3texTCJDXdBslV03kaQJJl+N08aYiSp52Ej9qyxSXazX6zuatcCbtuOuQ+MqMegfUkcjU
|
|
oFZXT4bDjhipaloDSe5NYVBhIRgnrIUEm2M/sPeYAarsIt0z6cWkacHT6Xh7hzBXKP6Nqz4naWFJ
|
|
zxyAfzRJX1jRpLCgzC/TNL9O4YVxtjmjWoI8rEa1dCD0vVure0jbccSgIBbFhhN67TMkenOKNlPW
|
|
cCDKlB9Tnx24A8PzxpcaWF5c6321lJJUJAdBOgl8a/PtL54+VzMfBlww/d0lHaiLWkfBnRdJ6sM/
|
|
z1yWTkHQCs4ikjNPHRgzaxQFczKNxp1FrfEgFgWQnLaGDjNaqhkmJfri6dERovJUDhgk2VOwKKCg
|
|
npoDVECwgMFrkeju0UTC/0gMPbU1BM80XhJdG6q+ag67JORIOCAyzruqbGcm380wO6KPNR/mCoyS
|
|
ca0s50wTZV41dJcpkSpfYTP7OF8i76LXdmVuUsguYn9lg6qNQbV3na60hcHmywmhIGQW6mHsE0Uh
|
|
5zWrdjklt0sWL1i7ZNmGNhbbEYICEySoBzMSSq7ggV3bfXuwurPz4d36wS/IvVi64XlqzI68c+Xl
|
|
R3D6xi5iHxY4U/YMU75h6Qezd1nf3DcF6n1WkpHu0JXFxRumgMuHDjtpHuvhM1pteUlMujJb2m5Q
|
|
OZy5XlfmhS6NKB9qlCIqHY1Bu2c55SaysXi3MdlbO/0FLDIT4DGv5l5J9c4iKu5lyxdNbBHKDL3i
|
|
X2z30p1CV74AXZ1utRR5d1j4r6i54agzl5d7Z4d1A8npoX0DeOesYrWp6U+h9D+2cPcpicR+ZlJC
|
|
2GjPplzlgtVIUhn3tGVlF2vDTgF1621+MpRLytTz7L7ZjT53bfw4PBTOVnUkOCjI/G6aT8UfPiVw
|
|
2Z96x5+QIso1fgedHuQdbU5TDOVMwQnB8BkS4HQ4jgbYYLFZssxQmFrf9mFn4/WbD+9dU1oWhs4P
|
|
YiceRKyWcgLxC28MoDelZNj4CMwDlcJmyw5u/bUZyOl0gnX/SBHB1qVg8yC/VXMMVEaEKQCW4E4g
|
|
LWwQUzodR7EcMX1tECtE81uokaA5Rzjg06DvTm2x2kAYOI/Gvciq1fYoEInXIWE+nCd2PBT4zMwj
|
|
Cj9zmEi7qUYKD2dn9/CkyDQhfd9rPHXrrgrjDOkOJizHIQTCljooWAKcnDaNSW0KaiR7PtGcVP6A
|
|
lfcJcjlLkDKYJAdMBixGT1ihyt4UVAQcE8sge4WjjugU9iiWuBIbF6uxwQ13YrVSZi4xVwEu3TE3
|
|
KSXeeBrPKUKCqsJCz7WHZbuPrlVMqZRmJSzn78PzXqTDY1b8JQuRw7jD8hzfXNdRyYM77uowXiVL
|
|
dlMz72cd6XrycByc1dCHkluEEgHC3jUYzkJXH7D+Ca0cpdRQSa2B5KxGMBV0PzyYyb1cQpfNWp4i
|
|
n6CENApWrUSlgv5I9eXEOtIygb1DlPI+yvmV+5+BjATUC50umSS6KjQJ6ZJ9n83qee+m4F9CsCUK
|
|
ocXymFxJ2RHkK5s/q+7FXFy+YIaSg1V6hWbc4vlt8z2+um3lN2mBZhKy1QFs4gdDZ+jhKWv/l/l1
|
|
L6r+ax//LFX/elDdv2osPm7cFJm7IYKx3zmQg9Up8dl5FMSIHYkioI9n80EWH4BTUzCqiw69K4GY
|
|
3Fzf/fvW9k8Hm6vv1i16Hu1hksdmoVXgvR4dxBMPo0omlEGkwgoufpWCOfnDaeDJr4GksmEnkvOA
|
|
z4OYOI59A/+hwQX8uwYW2ICUK+BQMQqauDFubLY6QB4KJgBWxxULXfVDgPrg1+B7u7qxubv+j91K
|
|
Nhxc1jDhbu8//Ph2Yy15xLyFd2BzfVtjF549N2V3sd3wMGNkMU4PW/RfO6/+ohI1h8aeHga5Y0mV
|
|
Q4fA5mLD7Wy+kfZoQhNv+KKfPkq6g51CHxEtSG9J6j7Ob1a9BeUHcUVadDE4xTIcE5jXgwFNOwML
|
|
iUkUNnGxHqtVxBrJq7A2VwppmGodeqYf26vvRM+mAZ3R8DDzooaqDIAepXGhsWEl/+R0eBFYO/Mt
|
|
UVj3Fj8l8Tg5IdFum9kuvldANKVnG9PTNEy1Qbx8s5qQX3ChEkKT3CHZDl27UxS5xKQ7yra9du1w
|
|
23Sis0yfufpuY2dnY/N1qRWmfGd6mM2vuqV/QcR8pneL1pHA7X7M9M9dR+iGi0nn+4J9h1res3D7
|
|
Wy59PrZ2J9n2CUT629WdXUYg/bAN8LlYwtgtdaQMucOpsFn6iVcmyrynxUsoVyXJ9k7kxEl09jmJ
|
|
0RyYMPzSlJGa7sSKH6xOc98Umhq4tvy0IS7Z5q5AwtB/m+KgBo4sMD0KuVe0oeVnT+vLz54lFcrg
|
|
uGX3dGwzpCdjWg5WGhAsWi40aFTNNfVRyCxYhzhabCySnvKbaRQEjghBCdrsWVfKeKPEbR8gCbRQ
|
|
y0+X68tPnxAvHI8vRWjCduceWMOnpGwXlkwTorQLocGdvUG34MEe9Sa1YJdaHkir4+ACi8vtdoGm
|
|
rXB9rb8uJ78+cb8+e5r8+qyga47PoF1MZOx4eliu/9rc+9XsPzJcpIN+8B/1RVMoJAmE0B8G2i7o
|
|
YKANV7SJvV+b+w+bqYe0dfm2JX8a/tN4dynaWXJuFUxxydyUdPo0kBBZ8oP4goNBpCTDkAQFQHp4
|
|
8bcSeAMg+YlgEp9wyGSXrdLanrBfXiDgiXLm+dHZtMOxIqbMACGC427jDR/12DrA1wu9gVbuKlRy
|
|
1yoZRtmRITdvtT9qGL2WEEfV/YA24rYpNJ45kpoKzFyFGtidg3ZjSYFNeVrgPrxvqicT9h0GNm09
|
|
sBtck6V6fA3MazRTcc1Vj3G0mYe2XstA5HKt1uI7ezzzzTo7kdhCJOe9jI01t8iU1jQcSocKaE+u
|
|
pLHxPmEXJY5zIHFDfKUMBMtvCa1bheKAiEMrcKsiCE1SNcBzVgBd0x9rS/x/2tHUo9+g3dGFF4Pe
|
|
2co1qUMuaM6GMrpap3Yl8OXtKzGnnoKEivrCEvKIcKzfhCWsOe0n1HUkc9xz5DqXdZIiPyfbV468
|
|
exlkRT0uGNVQ+MHQZu5q4fLL7iRPs/EavltlB/tJv9AHZ8wv4xBJjy67XP3g5eZOXQo1/ECS1jzA
|
|
xdCImZv6nu7MDGDH+e+hvZ0gR6bemp2tOZKbW3+mk3YuQGRKi8musUgD/NwcZYBjlf3Ci2wdoakG
|
|
9Z8C7PuUeFz2HQmCmX3FbXCVczvAjUgACS9y3gtpo8x9OFLgy/XNXSEUQDFOB03PvgZLSNZVkSrR
|
|
rbscqnVml8+yN6iENuXq0bSXEQBGexmaOb5ZZichh7ziz8dIGvTjXuni6ALkfuozBWouYAdotGJY
|
|
N2G9n6PMrGoSoAYfY5IeVJeXYtaXCoumSNyuuHxTyi2ifq1nhPWZCdPtzI7TBP+/wl0PHpiHwMjj
|
|
Lwb3zU124dwss0Um6T3Uq+OeYL3JEJiNSyhuDlXbTzS9UzuIM53TSnI8438iTrHYNbfKPCxGZYds
|
|
dTxKpx4b7X7zQfz//T//L+tM9MdSs7FMK1y5Y9uFYjSV7YT9nX0FRlYyM8aG89dn/zqdwb33zaof
|
|
qKyx0LPDlK0hF3F7gBiK4lRzF1229leQ9XSJUF0bshqGcNl5w64Iwos0tdTu0y8LyTagXzPvYY39
|
|
DScsISCcMh7pcOe8wCdusMTfl+xpKPVgiSune81bNOXIThLpxGWlkcMoUGfDfDNZbIlxxmax5Vc5
|
|
4+Q6mhv2c8E/GyN4kA/vbLS59fJoIe4o1eKRZqVo2ahjrkTGvplFQaUi3ixOMeJ2n0WHGg7PtLqa
|
|
hmqk2gwQt9SNhBBbKWCEOPOhV69qzCZw2IkzhGMXBsERPGsBAW3DJaOuY4SiRXYENCk6yeFCoQz5
|
|
nZIHk5DuzHzyrHi4/+Int2C2ok/Yd9q8O54AybFgepEnORsGNlNGRn4Hl2PEtqrhIFLC0i2YIjcO
|
|
x74cTleCZAkGhs7bDnynBnbL7gkpVU6xaIw6X8xm2ktSNY9+htQi4bHsqrj6W/PxTSH3uNBzLApO
|
|
Mf8jnagIT2s3fMYV3sa9qGhn5tynRjfhKoLzr8WWaQtHpRAIx/84ax2PHl3OudGZ4uwn8K/hk7bz
|
|
J4Bf9iMeN0lGyPjb7CdhTuN+9nDjjaBrOgsI6Q4tcH6HmdmC5da3HbXclmX4gladf8zRi8SfaJkp
|
|
InFYxO/2OEzL7dqBBG9rm62Md5qD5uyxZTcoNP3JMMjBEaxDnIjiaQ02haZgyAAyHQ69LtovTh5h
|
|
LdudCIXcRcbnLlEado6J6JIybNYDhGZDJyKo+jXiz784KSg376dmfrHGkl5snXvLz5+x/IcG6n9/
|
|
s7Wxw3xjzFwDr2hKKGF8Zn57uvRX6v+Q04V8mZ9U2QidqxKDEL7Jem86YkkV5ZGtKmg/tEVEWIRD
|
|
Jjrr/at7oAsgM1WZpVICmDnyp4RhpE9oxgaKHZ8K+8/VBdmf93Y4BDfGMcERJ5405LdPk1RCn0rO
|
|
J+6MkDkjRVmglvxoq650PDoYHh/wiikZzNbrnNyJBu5KL5vDmZ0XMkbvGejy0lVOTsgGiV1yskaz
|
|
ctjMGwSBMhCjrekTUpFYSUFlQk8avoz9p0HLSZfYJmqXKhvjxltoFmnItIg9+rZZ2U1EDtmnNNaS
|
|
tODKBTvg35y9lt81ppxXaKRpoB3M2/oJV41nclU7tI/QNT4W8vQHL/gwNVL2KHN7rbR5nhEfbesO
|
|
ms2yZVEGIONlRymnF58cMw+v+7blR0nqGqA145T8+ePW7huVLL2Ev9MoG3h5nxOwhip1DIZV0jK4
|
|
CvDwpDfIponc4exzr7v9/Jy9PJIgSU/PPvC+fG1YfEXD3iFza7Bn7mmFBnzlJf+oci7AL1lia4dx
|
|
ahEntpuTMaOnJeHVGrgXAKl7OZs2ByTKs/foK3zmRSoDHfT1rffr24tcPt2qmVIC3iMh4mKcScRg
|
|
TzkMWQOYB4irMqfDs45Ej9Fa5am/MjoVOHhgiNgHEFPN/GTrUiDHKI6OtUh8KU8A59my0mwJsZFD
|
|
8R/U7myiTOYcXQr2kvbf67hNo7Mz0zQyedqRF/b7ldnT/2qYJKAyUK5by5Rekqtx2AFnVY2wXjTp
|
|
MZVcwehOpoIgwTywq137atF+2AM/dCaj98Mbx9a7uGmQIDxmVQYpBIyF0emdkC6/aA5M1ZSXq4+X
|
|
OSMyTmv+820MpKUl77KraqtHaOpf2J4GtK2bwq/482Phh+IVGxVv6Nem29+JpL2Gi9Q23+Sg7Nli
|
|
AJlwQNPE81DlG7pxaN+g7SYhvRLk39Mqqj5kMqY+Q76jCxd6I7n3B25rLj9JyTVo2t190h2oVF4I
|
|
Mq24sNRFwXM1J3dKXFuqB7erYcnSYAjppSnIjOEXNhl/HSunvWETs+adqSHz/gqObfdqQEhlGUIF
|
|
S4Tw67ckm9DqashpwAcwt7kNluGSkvriLSNZ6rdpUmEMjFz5HVs7QHX41ga8/9FkK+hC2r8s/X4x
|
|
2QbEo6Hxrn0W5Vl7ZCT6L6Fh10g+MVsvkvS77Vv31GFUNtN+FH9Gra5WJgKCppdHsvry3cbmwfvV
|
|
nR2uuFEwlYyXZ+a22exehOAg2vO8beIT97h/LQLGdad79jto3OFCFNJt3N3oKR3JIFgYtpj0JpWa
|
|
2ZbtiyqwHrpZOkD7D9lYX0LWNBk5b/xy3qsT8mW819p3hsf5gnMqvG/misJ4fE1891o2+7VIQ9fj
|
|
fgZf9r5ZTRlpPNTsHJ19kQPQoV1vv397wOr02vr27qv3yPNd748ml64yveCkiFfXvmAo9YmtRp+H
|
|
SBMaJe4aFhbkeC1DciiI7ajYUP7nMpzx/O2BTM8RnMS7sdxrN1q9F+3NV63eo0cV1k+KPfNfpv4r
|
|
wlGi6vFq9dX+1bMnN8W6Q5IzxZ7Cvd0gZEhdurIcd3bqzo/NOEWATFJ+OsOBwvT59PWMc1rPBTll
|
|
Z8njwo7EyF8su1rz2beHx7A0WjHWrW1fxg3lhQ/MS97LRRsW08fP3THXOWuKGZL4qnTVMRz4ODhA
|
|
nr356ewSFNg9vnTPJjBPLt2kZ20ISeRgK6VKzNiXeYA7md3IwT39js1KwAzwyRfFFi3qdqIJ46xm
|
|
Mf4slksh3GZJtvxd9lrxod1lLtVMiXd8FFDtUsWfq8c6V0xVmh5XvhgPwRyChfvBoNhZFn6o5fvu
|
|
OCKr00VEVqy6BbzBpsQOt1KqCsGTSlCuy1oEJsN0sCiNL73suYx4m6P6FAnJgUtYv6IODvMzPkoD
|
|
feOX++alhnTSdplOsOxjv8XDKSoXcRYXw/QEhYWse280HnamRzaLXEravNt6ua5ohRKtSDsZPlYa
|
|
aTZUkQ3BbBKjlvlJxeHRBrniE2Oq+q9Vv3KZcX92Vvm5+zjUzKO+rf4jZst53DcJlrORn+WlJcYp
|
|
ul5+ypF/18vP9p4+279+/HxvGT+fLC9fP/5Lo2Ku7RP8aiVyjRvNhM8JXMsXhtYAdqe9BBQL7IYf
|
|
V9d++vAe4W8FA7iACQB1sGsuotjGVNHdHL9rvQuzwiBT4Y8M8FOR9zU46LFi35qJeGz54Y55BW1v
|
|
LWMba7695IFUaTH5fm3S0odGnKIeNYhZxRVO6KebxdWTlNwNAA4gwFjghrIDhVWIJq6Xq9g+n8T6
|
|
j73IOa90dC49X1piVJlKmIbZ4XLeHO/lL4ST2NMlgagVfUi2HHi/rXbbsRXDcyrcJs+1kkxVgA5Y
|
|
kCRJsRTbcqGrFZwnqCJbkDq88BgGIBAWkEAbgyGcRSGBLmO1rutgJ0SYY+MHaEvjxtl4509IClgn
|
|
i+OUlL/z4PtBsfOB+yUF/w4AUcSbJiT6n3Sdhadn0ZedfV1XXOINDrvmw+b65tr2L+9311/WLFiz
|
|
BDqPPrNVB/2rk3zsGtNvOoNj/5sKZEonaqeXBjwthE+ZcApDUnD4lwf9B53qgzcP3j3YUR2bd3OS
|
|
vUfkUHEJJXOCJv2t33DfWprFfi5I2nUuZISyirmpDqn00jDs3kjk3U2JkSs7phTXaw+97IV6vTTD
|
|
tSelMCZDKY8reJtp9DGrQqHUIne1WZWknqkEOdxUMn7HOwMw/Ag8NJd8LK9WcqFbOS6GAa2PSSaL
|
|
AfbVie8OwMChLajI/PRu2b4Z07cIiW/h9bY4XwoYB2I/Go56LvJfYnHg2+IoAVBzGqatRcztkouQ
|
|
S+APIINlTJUsFIHjOdX3Es7Dda6bGg+NaCh6F1fUcOexq6zTs4g38WWf5LvPku6h7SV+Vu494yzh
|
|
pkVl8BLJbs/5nkB7QbhAxnJNT03wtgPbutOZQ+DfQq6xgJeUHdsk6ZycJp3UKUDy7vuRp4fzjvRR
|
|
q3GX5XwhqnXn0CUo21ayNwQt0hdBe4ASzrQhX9rnPJBsmdB3ghNi0VPUg8tzafFz4OSJXSaNCBXu
|
|
mlS+0z9vzWzUL0N1ULIOQyNhkAPw9VmFQaP3beKiEnr1Ijqrk37aN0g/AViDQq3ybsD2G3U93FT1
|
|
L6SaZMf9aMgoj+K/Ai69RTu0ZwfxeEXD6HPxxJPQ9eqlr59yxvTpMTqnv1EP84PEXI57ZtGPkxUv
|
|
ljEfCkOfCelPB726XNO0qdGmns5wazInfjntjyyWhJd6aiFo7NrkxnlAPOGDD1BpIpfxDL5//XJ1
|
|
d9UrJcyQEDKvLYtSSZezvmxioVwwsLqblBy391c/GD8FeGtn9/X2+s4BzirSBqud3Ksvf5wZh7zi
|
|
plsHWyN6LKRztJPQiuy9LWXXtoeidrUCCQTKCDIdlVlajB87wVkbXa43VKvhJutjAdYsEAudlH6K
|
|
cOULOzHDWZkk42pxVJmDPmm9BUXnd5WgvSRu+fLl1rvVjc12mC+/8Ia0gq3tX9qWrSxwTV5fRnq1
|
|
+2D3P+hGWkL6HhCa4lY9Ti+NvVRBxYEdzurGE2UhQsWccbXMrGjkCU5+3eMciUkO9NtAkpywLpYL
|
|
CPCSJiuTXy1eTeKbmkDByjwHJn6UYqke/evYKqbVNTvNBVMzsqVBgWNHgkG68V2E8dT2x8JXt299
|
|
rjqULtW4K1Zt9jeEvajWaLSrWklPERntZkgCjTFcl5kIVE00EuwBr3X6XibVvsmXU6QQ6NIzVptw
|
|
84LjaT8q2dORQVJQk19CG6R8QYzlyLzQ+yskb9CRUqmZNbCvHsLbjkUA4cIu7pzWsQNPB71Q9U22
|
|
5IdB1wKzNtGEnLu3KVg1834K6wqvxWhKB9kRB1T0boPI5cRMq4+wDlThOsmqDB5PJwASVR235pIp
|
|
FeXkC40QYO2a4HNTUKsD/ROIL7hnnsvHwc9Kn3Qf7GEe91duV4AEf5Df4U1/iqDnq5muZ7jm4e9x
|
|
lfSuzBu/wuOCvEWowR7s4T7ObvMHBCzNRN6t0yIyoIV0+Vp292+0u6v+xnZ2AfdCd599NH23Er2d
|
|
9rSI6hAZQ0kzCJr0OIjuWN0nZ/QjTtxZ9ulkW9IzWB+2mJV+dRy/lDoQQn3xCGGynTZ1azmlCSrr
|
|
guRET1s56BwR1/B6ecAkuMx+5QxYCWOFZCJjZU/a7Q94eJLgBp6AiBbZfuA1A6JQ8BJO7ADgD71J
|
|
ioeKuZbDiCOY6emCQ4pGtkc/qhmBU7bF3p0v0i9Ez3YDFNpOjkt6tUdxPn7jmkJoAuf8IroMUBpb
|
|
c2EZ85d59XDImHRuPf0KgaEmjm0kWxZfSRVu3htW/PtCHTfXxuVZ0VShcVFlax+2JaHRoXa76Raw
|
|
tP+ELok77ddNkJOF4hs6nVNxVqdsYj/kuufDqMOSkiARwNkrlyKOpQd/8pWlSQyt1pz0OrMNOdaO
|
|
08KtLj6CfsdXJ95XJz3L0+wGdpjTvgZgFdBkgpItHkCRFyfxN9BK06+hLZ/7EoT5HWgsRB7vsR1P
|
|
Pnoq00zgKo3+tobQIZPbzRlNhYww0ZB13Llv8u6yKvaSFK33W/d8GSo+A9Wip5CyW9sbrzc2V9/m
|
|
QLvXzLbFhhelEWzHkqOVKkqxy1tw0GPqtOnFPrIi0/50YCtejT20xRmAuoqFZPWm5EzYWV/bXt/d
|
|
4Xm1V9mflSMcatXQKmvHXGXHaus1DwiZ/UBuRAlHdBGqvrbIdoB4nh3AazmJ8fmIlAEOg5jd/0o2
|
|
SjwJBnSOVuXELIhm36T5NjCUcbifZI0w/GycVYPT4Nhz/OGZmWU0Kd9Ue7eYqvmO79zskFvipsTb
|
|
WSie5qnGf/6zIwIWXzvBUqc83C6a3hGzcm53DEpFBs32gycyN6h/zpIl1V1YdG4lscZBDEFJIzZ7
|
|
v4URmjMsrMmrFKG7a9MBgwG2cgeXVJkQDuHmRWT7jWPjXMy03cc+EmzY5zlG2JSNzxfL5cbE/CSH
|
|
PbO3A6vRdw4fpoG8PbNTLk63Par7wnNZ//NONFM9McF5Zk1Wnskvz2rlfIbebskxu+Rzoh0LkuyZ
|
|
PkIZxYd4hxEmYD05kMjOrHSbaT6Nd+webCwv5Wy5XMsV+MzXm61e5M9UuuNzNtT2zGly6rl4EbB1
|
|
xNQhBVsGpsvRVVkD0Yz95K2PRdc4pNOQSEHnr5U2OrF8DqNUqvBAdjPkmT+8YhuH3WM2JiupqCPi
|
|
MLIWRykUJ1EXHNMAsdCh6M8ADs/Z9mlGa4n5TtKaJ4+N7vxMOnZw1htzBLdb3pf3RI70NW8j3cm/
|
|
5bLPHKNUFurWBGI5oq2leC5cNXSicKQJ6INFdV3gMvuPYq1VHht/UA/Tw6mEJ/XX9P9rAM/15BS6
|
|
0c2Fw1Oa8Cicb3RotALq6YqwewO7SipH6aLc5Avpwb5MAUYtz4FDvyPIOd5ltmmVjKv81gR13YmS
|
|
DdOx0uMdaNFkKNHP8eeN7lZXLVzKVG7FqbqIBpPEpgWU1ZGASyqCar4nzIMYQgM5p5UELL4JC000
|
|
TZGaTRZdHWr4Lg0RkMB45uBpfSNfWvLJOKHSSEPF49BeeuyspYUEbDG5vew0AA/lFchVlQywQA4w
|
|
at77Q7zTnFfORkTFZ3h8XPEXJrmS1AYd644jGcoBlHKx6DyE0uANATBC+gXjLjzvveGg6U5PtDHu
|
|
McBdXBNIrSrQM03bzF5ae0z6Dxvv4YpvPMpCnfsmXt+bK/SLQt/ZQq4VGwCWY8idWwDWRYolJnN5
|
|
Dxd3YXq3JipmfHafIEBQM8DEXV/CzaUQU/pGD/waqrWz/dulbEkMFzu+Oz3q7xgINUn59aBWGynk
|
|
bM9CM9oiLTKUvAEcEySlq+RwGp0dVy0QupYiUSCYLuOdTABm0ZFIRjimh4OTRM0HpMl2t9/tH8Ib
|
|
P2RhqmNG04l0gbmnIy5X+Ys2q298QuURZmnym1Yt4xvcpbYnN6pTDbqg/4B/y9rWO5Iu11ltVNLh
|
|
Zg6kZIVjnD57SOcf+FDsM3MTglagnrgeO2ZDXYqTXge35D+t40k34I8pfWv+5rhJuQIHk7TRJMPZ
|
|
b60l50wSXFTOc4XMuQ+Uj7AcjuvC4TcdeHSLaB4Xo+YJDQGa4ZdYdYSyaOO9BshPNMlx+OeabvAJ
|
|
vJW56WKPl3n153QoiUzwspQCB97sh1uaqXarLShLO1m9anf1NR1JFjJYyci/ahrPq9HZqOcB3cxu
|
|
TXW4Ga3hKk/YHVpifW9mv17+aHzl/g7tvd/a3p3dM1w1T588ThBw83dUtmhicx7t+8ePaIVJsW5f
|
|
/7RxSLcX8G65Agwi5NCuOese85GtmXliV56ZcXXf7GLzC7e174Wbl501Cs3RHVi/AJ+acgwPB6og
|
|
3m6+VNFL5hFNId8RUb++rP1FVtDZzaROcbeAifx45/7alzCkw1dlnenEJSZiaTkfLWR2zyxdJHD1
|
|
mb7xz7yQp6+b12845KT1Lx12bg9hZoXt22WFwMI9C7XjS23rqFc3h1t8o9cw9hKb7/MZ5rccke8t
|
|
uBpd3HzDtpUqq061yR8Sce6ve+kdqT6nxVmW0dwYvd9nBE0+M22hso98WVI3zR1MgumqadhB/jZP
|
|
1LivmMWAeWYi2mbY/dJnlHBajQfLGeSaHYEtGuiPxfezbycF/9jaUs47EXtxpuJYyyvYiOtJqSyU
|
|
x7Mr/n+w/OAfVHbwa6xv980WlHhAxfTEP6PqG+DQk+wjXGfZgzVKGXwtIwol2gmTgC90zdIcfGHr
|
|
NknKU1DyobtCU+GbLKVgGCXuSSmjI/g9pE00t3zqupW67B7qhEYSidUbAlMu/tzyUs37wEQZcy4e
|
|
x2BEEzvt7D3O2vPn2SjnlWz09923MUnPN3gK1bT8KBQmlaS64xobrpxXDwMphRZnq3YyWYqJ4oyh
|
|
Wl0hDuFPXChJ+aLggUs0WymWhG7BlLJmzk73cHrypbmE9PIzX3hU4ye8qoOKXG5zw7DiMMuV73qD
|
|
4+Eci5A8MhxcM4H5BqDZ8rhj4zRjB/wWL+yF//4iAITNoSnxU00pnSBggzZ1jd5xgolOgSGEIAjY
|
|
XdIR+37bX0x5MmGn3bNRkhKPv66rp9dV/r5C3BmeLT1jZMlwcCVFx+w1TmOq+IvHy+UXLtI7QVNy
|
|
+Gnypa2KYVAvz96lxb4qmfZs1utda3Tl1g6rZItz5dUKYxNo6YdSYu0FrEKm84xS73cehfHkLlci
|
|
LyEHL8BIb0foTvZ2zZWRH3qnYDhV7rBFko/FAehKlEGS5r8dliS1+fw5MtLMwp1HHlBHdHTq1dxU
|
|
Huw9giM7rCyJN+aUklRYgdyqh14PMsgwfoC/HseVuRPV+j3iBZ1Sd0yfM758kMQXtmbLAbw8GR+b
|
|
s7/xlXzRM4lP4W2WJMgjuFFobO6E5IRBJptfSf/2Bqwg9O8d4hHqdVTdyt99h2B5psgZh8TiDt3q
|
|
rrSo/1qRGrh/cnxyHTG+WOdSIbxvq9WoE41w4B6578LsDoVLsBd7A8kiAgq9PMPtuhsW+bSudepp
|
|
VLqArPjB1HRLv58l0y3VWHLnWy7lT3gyw3wyVlLcT45Ln/2pnF0JbrPCt38jNl2Gm/JO9O9S9LHw
|
|
LhdVltxHX6tS5fPmfngT4p6ng6Nuxd50N6AP+5h5gWyPlYLXuLKJj8WPYBTFh+5V4GvB6Oyrulzw
|
|
ftarmB0quvsesdV4ONjX0hyNQisztp823r41xQG9+ephs/pTT+INLn2YyxvXpcNoEE5RutSJtj+D
|
|
j80oaJJ8AABp7jjOQ6SJAPKxN7o+6nXGXA/iHkSFv8FYdK25JjQJnamCdzAwRqOz7+aFA9upJSAk
|
|
ITxLMASo4dW1ta0Pm7strlJQwqtY6JNpLSWJ2SFi08b72ZVGJuH8d9oF+sMejCp5crVWhsvYu+xf
|
|
dE7j/eK1ftEfFr38q3bh5Yft1d2NrU3jN5o50Lypt+v94cfVTbP68qUpTkyR9Hha9UdEdTczIPGB
|
|
afYlK0L3E41H45NuSOX82pfrb43AZ+QJCTTBlS94kyzIrFdtbL7amv0uRuZ6WEk9gwKoOQ9AfE84
|
|
2PERS5WZffRy/dUalkOX0m0YhPek7tfwK5+taJBHyPJsjpB/o02bcDfOPU058m5eqTAhPQ43SDod
|
|
k+x+dqejmtvnY5leoU8nBU9Z+Ff8LS7WwIrQn75/vn++f75/vn++f75/vn++f75/vn++f75/vn++
|
|
f75/vn++f75/vn++f/69n/8fg9vGtQAIAgA=
|